|  | @@ -307,6 +307,68 @@ export class TeamAssignComponent implements OnInit {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  async confirmDeleteMember() {
 | 
	
		
			
				|  |  | +    if (!this.editingTeam) return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const ok = window.confirm('确定要删除该成员的项目分配吗?');
 | 
	
		
			
				|  |  | +    if (!ok) return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    try {
 | 
	
		
			
				|  |  | +      this.saving = true;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // 软删除 ProjectTeam
 | 
	
		
			
				|  |  | +      this.editingTeam.set('isDeleted', true);
 | 
	
		
			
				|  |  | +      const data = this.editingTeam.get('data') || {};
 | 
	
		
			
				|  |  | +      data.deletedAt = new Date();
 | 
	
		
			
				|  |  | +      data.deletedBy = this.currentUser?.id;
 | 
	
		
			
				|  |  | +      this.editingTeam.set('data', data);
 | 
	
		
			
				|  |  | +      await this.editingTeam.save();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // 从群聊移除(静默尝试)
 | 
	
		
			
				|  |  | +      const profile = this.editingTeam.get('profile');
 | 
	
		
			
				|  |  | +      const userId = profile?.get?.('userId');
 | 
	
		
			
				|  |  | +      if (userId) {
 | 
	
		
			
				|  |  | +        await this.removeMemberFromGroupChat(userId);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      alert('成员已删除');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // 刷新列表并收起弹窗
 | 
	
		
			
				|  |  | +      await this.loadProjectTeams();
 | 
	
		
			
				|  |  | +      this.showAssignDialog = false;
 | 
	
		
			
				|  |  | +      this.assigningDesigner = null;
 | 
	
		
			
				|  |  | +      this.selectedSpaces = [];
 | 
	
		
			
				|  |  | +      this.editingTeam = null;
 | 
	
		
			
				|  |  | +    } catch (err) {
 | 
	
		
			
				|  |  | +      console.error('删除成员失败:', err);
 | 
	
		
			
				|  |  | +      alert('删除失败');
 | 
	
		
			
				|  |  | +    } finally {
 | 
	
		
			
				|  |  | +      this.saving = false;
 | 
	
		
			
				|  |  | +      this.cdr.markForCheck();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  async removeMemberFromGroupChat(userId: string) {
 | 
	
		
			
				|  |  | +    if (!userId) return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    try {
 | 
	
		
			
				|  |  | +      const groupChat = (this as any).groupChat;
 | 
	
		
			
				|  |  | +      if (!groupChat) return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      const chatId = groupChat.get('chat_id');
 | 
	
		
			
				|  |  | +      if (!chatId) return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      if (typeof (window as any).ww !== 'undefined') {
 | 
	
		
			
				|  |  | +        await (window as any).ww.updateEnterpriseChat({
 | 
	
		
			
				|  |  | +          chatId: chatId,
 | 
	
		
			
				|  |  | +          userIdsToRemove: [userId]
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    } catch (err) {
 | 
	
		
			
				|  |  | +      console.warn('移除群成员失败或不支持:', err);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    getMemberSpaces(team: FmodeObject): string {
 | 
	
		
			
				|  |  |      const spaces = team.get('data')?.spaces || [];
 | 
	
		
			
				|  |  |      return spaces.join('、') || '未分配';
 |