组长端项目负载时间轴字段应用总结.md 6.6 KB

组长端项目负载时间轴字段应用总结

应用日期: 2025-11-13
基于方案: 组长端项目负载时间轴字段需求方案.md
修改文件: src/app/pages/team-leader/dashboard/dashboard.ts


✅ 已应用的更改

1. 数据加载增强

1.1 loadDesignerWorkload() 方法

  • ✅ 添加了 data 字段的获取:project.get('data')
  • ✅ 添加了 updatedAt 字段:用于计算停滞状态
  • ✅ 添加了 designerId 字段:用于设计师关联
  • ✅ 添加了 contact 字段:用于客户信息
  • ✅ 添加了 space 字段:从 data.quotation.spaces[0].name 提取

1.2 loadDesignerWorkloadFromProjects() 方法

  • ✅ 同样添加了上述字段的获取逻辑

2. 时间轴数据转换优化

2.1 移除测试数据逻辑

  • ✅ 移除了 dayMapping 测试数据映射
  • ✅ 移除了基于索引的日期计算逻辑
  • ✅ 改为使用真实项目数据

2.2 真实时间节点获取

项目开始时间 (realStartDate):

优先级顺序:
1. projectData.phaseDeadlines.modeling.startDate (最高优先级)
2. projectData.requirementsConfirmedAt
3. project.createdAt
4. 当前时间 (降级)

项目结束时间 (realEndDate):

优先级顺序:
1. project.deadline (最高优先级)
2. realStartDate + 7天 (降级)

对图时间 (realReviewDate):

优先级顺序:
1. project.demoday (最高优先级)
2. projectData.phaseDeadlines.softDecor.deadline
3. 计算值:项目周期的 60% 位置 (降级)

3. 阶段进度计算

3.1 基于 phaseDeadlines 的真实进度计算

  • ✅ 根据当前阶段 (currentStage) 选择对应的阶段数据
  • ✅ 使用阶段的实际开始时间和截止时间计算进度
  • ✅ 降级方案:如果没有 phaseDeadlines,使用整体项目进度

支持的阶段:

  • modelphaseDeadlines.modeling
  • decorationphaseDeadlines.softDecor
  • renderphaseDeadlines.rendering
  • deliveryphaseDeadlines.postProcessing

4. 停滞状态计算

4.1 基于 updatedAt 的真实停滞判断

- 如果超过7天未更新,认为停滞
- stalledDays = 距离最后更新的天数
- isStalled = stalledDays > 7

5. 阶段截止时间处理

5.1 使用真实 phaseDeadlines

  • ✅ 优先使用 project.data.phaseDeadlines
  • ✅ 如果不存在,从交付日期往前推算
  • ✅ 按比例分配:建模30%,软装25%,渲染30%,后期15%

5.2 阶段状态计算

  • ✅ 根据当前时间和阶段截止时间计算状态
  • ✅ 状态值:'not_started' | 'in_progress' | 'completed'

6. 返回数据增强

6.1 时间轴对象字段

{
  projectId: string,
  projectName: string,
  designerId: string,        // ✅ 新增
  designerName: string,
  startDate: Date,          // ✅ 使用真实开始时间
  endDate: Date,             // ✅ 使用真实结束时间
  deliveryDate: Date,       // ✅ 使用真实交付日期
  reviewDate: Date,         // ✅ 使用真实对图时间
  currentStage: string,
  stageName: string,
  stageProgress: number,     // ✅ 基于真实数据计算
  status: string,            // ✅ 基于真实日期计算
  isStalled: boolean,        // ✅ 基于 updatedAt 计算
  stalledDays: number,       // ✅ 真实的停滞天数
  urgentCount: number,
  priority: string,
  spaceName: string,         // ✅ 从项目数据获取
  customerName: string,       // ✅ 从项目数据获取
  phaseDeadlines: object,    // ✅ 使用真实或计算的阶段数据
  data: object               // ✅ 保留原始数据
}

📊 字段映射关系

已实现的字段映射

功能点 字段路径 状态
项目开始时间 data.phaseDeadlines.modeling.startDate ✅ 已应用
需求确认时间 data.requirementsConfirmedAt ✅ 已应用
交付日期 project.deadline ✅ 已应用
对图时间 project.demoday ✅ 已应用
阶段截止时间 data.phaseDeadlines ✅ 已应用
阶段进度 基于 phaseDeadlines 计算 ✅ 已应用
停滞状态 基于 project.updatedAt 计算 ✅ 已应用
空间信息 data.quotation.spaces[0].name ✅ 已应用
客户信息 project.contact.name ✅ 已应用

🔄 降级处理方案

1. 时间节点降级

  • 开始时间: phaseDeadlinesrequirementsConfirmedAtcreatedAt → 当前时间
  • 结束时间: deadlinestartDate + 7天
  • 对图时间: demodayphaseDeadlines.softDecor.deadline → 计算值

2. 阶段进度降级

  • 有 phaseDeadlines: 使用对应阶段的真实进度
  • 无 phaseDeadlines: 使用整体项目进度(基于开始和结束时间)

3. 阶段截止时间降级

  • 有 phaseDeadlines: 直接使用
  • 无 phaseDeadlines: 从交付日期往前推算,按比例分配

⚠️ 注意事项

1. 数据完整性

  • 确保项目数据中包含 data 字段
  • 确保 data.phaseDeadlines 在确认需求后已初始化
  • 确保 data.deliveryStageStatus 在交付执行阶段已更新

2. 性能考虑

  • 数据加载时已包含 data 字段,避免额外查询
  • 使用缓存机制减少重复计算

3. 兼容性

  • 保留了降级处理逻辑,确保旧数据也能正常显示
  • 新字段缺失时使用合理的默认值

🚀 后续优化建议

1. 数据补全

  • 为旧项目补充 phaseDeadlines 数据
  • 为旧项目补充 deliveryStageStatus 数据
  • 确保所有项目都有 requirementsConfirmedAt 时间

2. 功能增强

  • 使用 deliveryStageStatus 显示各子阶段的真实状态
  • 使用 spaceDeliverableSummary 显示空间交付物统计
  • 添加阶段状态的可视化展示

3. 性能优化

  • 缓存空间交付物统计数据
  • 优化查询性能,减少数据库请求
  • 添加数据更新监听,实时刷新时间轴

📝 测试建议

1. 功能测试

  • 测试有完整 phaseDeadlines 的项目显示
  • 测试只有 deadline 的项目显示(降级场景)
  • 测试停滞状态的计算准确性
  • 测试阶段进度的计算准确性

2. 数据测试

  • 测试不同阶段的项目显示
  • 测试有/无 demoday 的项目显示
  • 测试有/无 space 信息的项目显示

3. 边界测试

  • 测试没有 data 字段的项目
  • 测试没有 deadline 的项目
  • 测试没有 createdAt 的项目

文档维护: 本文档应随代码变更及时更新
最后更新: 2025-11-13