# 组长端项目负载时间轴字段应用总结 **应用日期**: 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`): ```typescript 优先级顺序: 1. projectData.phaseDeadlines.modeling.startDate (最高优先级) 2. projectData.requirementsConfirmedAt 3. project.createdAt 4. 当前时间 (降级) ``` **项目结束时间** (`realEndDate`): ```typescript 优先级顺序: 1. project.deadline (最高优先级) 2. realStartDate + 7天 (降级) ``` **对图时间** (`realReviewDate`): ```typescript 优先级顺序: 1. project.demoday (最高优先级) 2. projectData.phaseDeadlines.softDecor.deadline 3. 计算值:项目周期的 60% 位置 (降级) ``` --- ### 3. 阶段进度计算 #### 3.1 基于 `phaseDeadlines` 的真实进度计算 - ✅ 根据当前阶段 (`currentStage`) 选择对应的阶段数据 - ✅ 使用阶段的实际开始时间和截止时间计算进度 - ✅ 降级方案:如果没有 `phaseDeadlines`,使用整体项目进度 **支持的阶段**: - `model` → `phaseDeadlines.modeling` - `decoration` → `phaseDeadlines.softDecor` - `render` → `phaseDeadlines.rendering` - `delivery` → `phaseDeadlines.postProcessing` --- ### 4. 停滞状态计算 #### 4.1 基于 `updatedAt` 的真实停滞判断 ```typescript - 如果超过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 时间轴对象字段 ```typescript { 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. 时间节点降级 - **开始时间**: `phaseDeadlines` → `requirementsConfirmedAt` → `createdAt` → 当前时间 - **结束时间**: `deadline` → `startDate + 7天` - **对图时间**: `demoday` → `phaseDeadlines.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