|
@@ -2,14 +2,14 @@ import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';
|
|
|
import { CommonModule } from '@angular/common';
|
|
|
import { FormsModule } from '@angular/forms';
|
|
|
import { FmodeObject, FmodeQuery, FmodeParse } from 'fmode-ng/parse';
|
|
|
-import { WxworkCorp } from 'fmode-ng/core';
|
|
|
+import { WxworkCorp, WxworkSDK } from 'fmode-ng/core';
|
|
|
|
|
|
const Parse = FmodeParse.with('nova');
|
|
|
|
|
|
export interface ProjectMember {
|
|
|
id: string;
|
|
|
name: string;
|
|
|
- userId: string;
|
|
|
+ userid: string;
|
|
|
avatar?: string;
|
|
|
role: string;
|
|
|
department?: string;
|
|
@@ -58,8 +58,12 @@ export class ProjectMembersModalComponent implements OnInit {
|
|
|
|
|
|
// 企业微信API
|
|
|
private wecorp: WxworkCorp | null = null;
|
|
|
+ private wwsdk: WxworkSDK | null = null;
|
|
|
|
|
|
+ isWechat:boolean = false;
|
|
|
constructor() {
|
|
|
+ let ua = navigator.userAgent.toLowerCase();
|
|
|
+ this.isWechat = ua.indexOf('micromessenger') !== -1;
|
|
|
this.checkWxworkEnvironment();
|
|
|
}
|
|
|
|
|
@@ -77,20 +81,9 @@ export class ProjectMembersModalComponent implements OnInit {
|
|
|
|
|
|
private checkWxworkEnvironment(): void {
|
|
|
// 检查是否在企业微信环境中
|
|
|
- this.isWxworkEnvironment = typeof window !== 'undefined' &&
|
|
|
- ((window as any).wx !== undefined ||
|
|
|
- (window as any).WWOpenData !== undefined ||
|
|
|
- location.hostname.includes('work.weixin.qq.com'));
|
|
|
-
|
|
|
- if (this.isWxworkEnvironment && this.cid) {
|
|
|
- try {
|
|
|
- this.wecorp = new WxworkCorp(this.cid);
|
|
|
- console.log('✅ 企业微信环境检测成功');
|
|
|
- } catch (error) {
|
|
|
- console.warn('⚠️ 企业微信SDK初始化失败:', error);
|
|
|
- this.isWxworkEnvironment = false;
|
|
|
- }
|
|
|
- }
|
|
|
+ this.wecorp = new WxworkCorp(this.cid);
|
|
|
+ this.wwsdk = new WxworkSDK({cid:this.cid,appId:'crm'});
|
|
|
+ console.log('✅ 企业微信环境检测成功');
|
|
|
}
|
|
|
|
|
|
async loadMembers(): Promise<void> {
|
|
@@ -104,9 +97,15 @@ export class ProjectMembersModalComponent implements OnInit {
|
|
|
const projectTeamMembers = await this.loadProjectTeamMembers();
|
|
|
|
|
|
// 2. 加载群聊成员
|
|
|
+ if(!this.groupChat?.id){
|
|
|
+ const gcQuery2 = new Parse.Query('GroupChat');
|
|
|
+ gcQuery2.equalTo('project', this.project?.id);
|
|
|
+ this.groupChat = await gcQuery2.first();
|
|
|
+ }
|
|
|
const groupChatMembers = await this.loadGroupChatMembers();
|
|
|
|
|
|
// 3. 合并成员数据
|
|
|
+ console.log("999",projectTeamMembers, groupChatMembers)
|
|
|
this.mergeMembersData(projectTeamMembers, groupChatMembers);
|
|
|
|
|
|
this.calculateStats();
|
|
@@ -125,8 +124,7 @@ export class ProjectMembersModalComponent implements OnInit {
|
|
|
if (this.project) {
|
|
|
query.equalTo('project', this.project.toPointer());
|
|
|
}
|
|
|
- query.include('profile');
|
|
|
- query.include('department');
|
|
|
+ query.include('profile','department','profile.department');
|
|
|
query.notEqualTo('isDeleted', true);
|
|
|
|
|
|
return await query.find();
|
|
@@ -141,12 +139,7 @@ export class ProjectMembersModalComponent implements OnInit {
|
|
|
|
|
|
try {
|
|
|
const memberList = this.groupChat.get('member_list') || [];
|
|
|
- return memberList.map((member: any) => ({
|
|
|
- userid: member.userid,
|
|
|
- name: member.name,
|
|
|
- type: member.type || 1,
|
|
|
- avatar: member.avatar
|
|
|
- }));
|
|
|
+ return memberList
|
|
|
} catch (error) {
|
|
|
console.error('加载群聊成员失败:', error);
|
|
|
return [];
|
|
@@ -163,7 +156,7 @@ export class ProjectMembersModalComponent implements OnInit {
|
|
|
const member: ProjectMember = {
|
|
|
id: profile.id,
|
|
|
name: profile.get('name') || '未知',
|
|
|
- userId: profile.get('userid') || '',
|
|
|
+ userid: profile.get('userid') || '',
|
|
|
avatar: profile.get('data')?.avatar,
|
|
|
role: profile.get('roleName') || '未知',
|
|
|
department: profile.get('department')?.get('name'),
|
|
@@ -180,7 +173,7 @@ export class ProjectMembersModalComponent implements OnInit {
|
|
|
groupChatMembers.forEach(groupMember => {
|
|
|
// 查找是否已在项目团队中
|
|
|
const existingMember = Array.from(memberMap.values()).find(
|
|
|
- m => m.userId === groupMember.userid || m.name === groupMember.name
|
|
|
+ m => m.userid === groupMember.userid || m.name === groupMember.name
|
|
|
);
|
|
|
|
|
|
if (existingMember) {
|
|
@@ -190,7 +183,7 @@ export class ProjectMembersModalComponent implements OnInit {
|
|
|
const member: ProjectMember = {
|
|
|
id: groupMember.userid,
|
|
|
name: groupMember.name,
|
|
|
- userId: groupMember.userid,
|
|
|
+ userid: groupMember.userid,
|
|
|
avatar: groupMember.avatar,
|
|
|
role: groupMember.type === 1 ? '外部联系人' : '内部成员',
|
|
|
isInGroupChat: true,
|
|
@@ -259,34 +252,35 @@ export class ProjectMembersModalComponent implements OnInit {
|
|
|
}
|
|
|
|
|
|
async addMemberToGroupChat(member: ProjectMember): Promise<void> {
|
|
|
- if (!this.isWxworkEnvironment || !this.wecorp || !this.groupChat) {
|
|
|
- alert('当前环境不支持此操作');
|
|
|
- return;
|
|
|
+
|
|
|
+ if(!this.isWechat){
|
|
|
+ alert("请在企业微信客户端添加")
|
|
|
}
|
|
|
-
|
|
|
- if (!member.userId) {
|
|
|
+ if (!member.userid) {
|
|
|
alert('该成员没有用户ID,无法添加到群聊');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
- const chatId = this.groupChat.get('chat_id');
|
|
|
+ const chatId = this.groupChat?.get('chat_id');
|
|
|
if (!chatId) {
|
|
|
alert('群聊ID不存在');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- console.log(`🚀 开始添加成员 ${member.name} (${member.userId}) 到群聊 ${chatId}`);
|
|
|
+ console.log(`🚀 开始添加成员 ${member.name} (${member.userid}) 到群聊 ${chatId}`);
|
|
|
|
|
|
// TODO: 实现正确的企业微信API调用
|
|
|
- // await this.wecorp.appchat.updateEnterpriseChat({
|
|
|
- // chatId: chatId,
|
|
|
- // userIdsToAdd: [member.userId]
|
|
|
- // });
|
|
|
+ let result = await this.wwsdk?.ww.updateEnterpriseChat({
|
|
|
+ chatId: chatId,
|
|
|
+ userIdsToAdd: [member.userid]
|
|
|
+ });
|
|
|
|
|
|
// 临时:直接更新本地状态用于演示
|
|
|
- member.isInGroupChat = true;
|
|
|
- this.calculateStats();
|
|
|
+ if(result){
|
|
|
+ member.isInGroupChat = true;
|
|
|
+ this.calculateStats();
|
|
|
+ }
|
|
|
|
|
|
alert(`✅ 已将 ${member.name} 添加到群聊`);
|
|
|
console.log(`✅ 成功添加成员 ${member.name} 到群聊`);
|