2025102220-fix-unassigned-projects.md 2.9 KB

解决"未分配"问题和完整显示所有组员

日期: 2025-10-24
问题: 组长端工作量负载概览图未显示全部组员,且项目负责人显示"未分配"


🔴 问题分析

1. 项目负责人显示"未分配"

根本原因: 数据库中 Project 表的 assignee 字段为空

代码位置: src/app/pages/team-leader/services/designer.service.ts 第330行

designerName: assignee?.get('name') || '未分配',

数据流程:

Parse数据库 → Project表 → assignee字段(Pointer<Profile>) 
  ↓
如果assignee为null → designerName = '未分配'

2. 工作量甘特图未显示所有组员

根本原因: 只统计了已分配项目的设计师

代码位置: src/app/pages/team-leader/dashboard/dashboard.ts 约2000行

// ❌ 问题代码:只获取有项目的设计师
const assigned = this.filteredProjects.filter(p => !!p.designerName);
const designers = Array.from(new Set(assigned.map(p => p.designerName)));

结果:

  • ✅ 有项目的设计师:显示在甘特图中
  • ❌ 没有项目的设计师:不显示

✅ 解决方案

方案1:修复甘特图 - 显示所有组员

修改 updateWorkloadGantt() 方法,使用真实的设计师列表而非从项目中提取:

// ✅ 修改后:使用真实的设计师列表
const designers = this.realDesigners.length > 0 
  ? this.realDesigners.map(d => d.name)
  : Array.from(new Set(this.filteredProjects.filter(p => p.designerName && p.designerName !== '未分配').map(p => p.designerName)));

// 如果没有设计师,显示提示
if (designers.length === 0) {
  // 显示"暂无组员数据"
  return;
}

方案2:项目分配功能

在数据库层面为项目分配设计师:

/**
 * 在designer.service.ts中已有方法
 */
async assignProject(projectId: string, designerId: string): Promise<boolean> {
  const project = Parse.Object.extend('Project').createWithoutData(projectId);
  const designer = Parse.Object.extend('Profile').createWithoutData(designerId);
  
  project.set('assignee', designer);
  project.set('status', '进行中');
  
  await project.save();
  return true;
}

方案3:数据库检查和修复

检查步骤:

  1. 打开Parse Dashboard
  2. 查看 Project
  3. 检查 assignee 字段
  4. 对于未分配的项目,手动设置 assignee

SQL修复(如果有SQL访问权限):

-- 查看未分配的项目
SELECT objectId, title, status, assignee 
FROM Project 
WHERE assignee IS NULL OR assignee = '';

-- 批量分配给某个设计师
UPDATE Project 
SET assignee = {Profile的指针} 
WHERE assignee IS NULL;

📝 具体修改

修改1: updateWorkloadGantt方法

文件: src/app/pages/team-leader/dashboard/dashboard.ts

位置: updateWorkloadGantt() 方法内

修改内容: