将项目管理页面的当前阶段统一显示为四大核心阶段:
当前阶段列显示:
- 白膜 ❌
- 软装 ❌
- 渲染 ❌
- 后期 ❌
- 订单分配 ✅
- 确认需求 ✅
文件:src/app/pages/admin/project-management/project-management.ts (Line 220)
// ❌ 修复前:直接使用原始阶段
const currentStage = json.currentStage || json.stage || '订单分配';
问题:
json.currentStage 是"软装",则页面显示"软装"文件:src/app/pages/admin/project-management/project-management.ts (Line 219-224)
// ✅ 修复后:统一映射为核心阶段
const rawStage = json.currentStage || json.stage || '订单分配';
const currentStage = normalizeStage(rawStage); // 🔥 统一映射
// 状态判断使用原始阶段
const autoStatus = getProjectStatusByStage(rawStage, json.status);
使用 normalizeStage() 函数(已在 Line 17 导入):
// src/app/utils/project-stage-mapper.ts
export function normalizeStage(stageId: string): string {
const corePhase = mapStageToCorePhase(stageId);
return getCorePhaseName(corePhase);
}
// 映射规则
mapStageToCorePhase('白膜') → 'delivery'
mapStageToCorePhase('软装') → 'delivery'
mapStageToCorePhase('渲染') → 'delivery'
mapStageToCorePhase('后期') → 'delivery'
getCorePhaseName('delivery') → '交付执行'
| 原始阶段 | 显示阶段 | 状态 |
|---|---|---|
| 白膜 | 白膜 ❌ | 进行中 |
| 软装 | 软装 ❌ | 进行中 |
| 渲染 | 渲染 ❌ | 进行中 |
| 后期 | 后期 ❌ | 进行中 |
| 订单分配 | 订单分配 ✅ | 待分配 |
| 确认需求 | 确认需求 ✅ | 进行中 |
| 原始阶段 | 显示阶段 | 状态 |
|---|---|---|
| 白膜 | 交付执行 ✅ | 进行中 |
| 软装 | 交付执行 ✅ | 进行中 |
| 渲染 | 交付执行 ✅ | 进行中 |
| 后期 | 交付执行 ✅ | 进行中 |
| 订单分配 | 订单分配 ✅ | 待分配 |
| 确认需求 | 确认需求 ✅ | 进行中 |
| 售后归档 | 售后归档 ✅ | 已完成 |
文件:src/app/utils/project-stage-mapper.ts
export function getProjectStatusByStage(stageId: string, currentStatus?: string): string {
const corePhase = mapStageToCorePhase(stageId);
switch (corePhase) {
case 'order':
return '待分配';
case 'requirements':
case 'delivery': // ✅ 交付执行阶段
return '进行中';
case 'aftercare':
return '已完成';
default:
return '待分配';
}
}
| 阶段 | 核心阶段 | 自动状态 |
|---|---|---|
| 订单分配 | order | 待分配 |
| 确认需求 | requirements | 进行中 |
| 白膜 | delivery | 进行中 ✅ |
| 软装 | delivery | 进行中 ✅ |
| 渲染 | delivery | 进行中 ✅ |
| 后期 | delivery | 进行中 ✅ |
| 交付执行 | delivery | 进行中 ✅ |
| 售后归档 | aftercare | 已完成 |
修复后,浏览器控制台会显示详细的映射信息:
📊 [项目管理] "张家界鼎盛项目": {
客户: "张先生",
负责人: "李设计",
角色: "主设计师",
原始阶段: "软装", // 数据库存储的原始值
显示阶段: "交付执行", // ✅ 映射后显示的值
状态: "进行中 → 进行中" // ✅ 自动判断的状态
}
步骤:
1. 打开项目管理页面
2. 按 Ctrl+Shift+R 强制刷新
3. 查看表格中的"当前阶段"列
预期结果:
- 所有"白膜"、"软装"、"渲染"、"后期"统一显示为"交付执行" ✅
- 状态列显示"进行中" ✅
步骤:
1. 按 F12 打开浏览器控制台
2. 刷新项目管理页面
3. 查看日志输出
预期日志:
📊 [项目管理] "项目名": {
原始阶段: "软装",
显示阶段: "交付执行", // ✅ 正确映射
状态: "进行中"
}
步骤:
1. 在项目管理页面使用阶段筛选功能
2. 选择"交付执行"阶段
3. 查看筛选结果
预期结果:
- 显示所有原始阶段为"白膜"、"软装"、"渲染"、"后期"的项目 ✅
所有端口统一显示四大核心阶段! 🎉
此修复仅修改显示层,数据库中的 currentStage 字段不会自动修改。
// 数据库存储(不变)
{
currentStage: "软装" // 原始值保持不变
}
// 页面显示(已修复)
{
当前阶段: "交付执行" // ✅ 映射后的显示值
状态: "进行中" // ✅ 自动判断的状态
}
如果需要彻底统一数据库字段,可以执行之前提供的批量更新脚本:
// 批量更新数据库 currentStage 字段
async function batchUpdateDeliveryStage() {
const Parse = window.Parse;
const query = new Parse.Query('Project');
query.containedIn('currentStage', ['白膜', '软装', '渲染', '后期']);
const projects = await query.find();
for (const project of projects) {
const currentStage = project.get('currentStage');
const data = project.get('data') || {};
data.deliverySubStage = currentStage;
project.set('currentStage', '交付执行');
project.set('data', data);
await project.save();
}
}
project-management.ts 使用 normalizeStage()项目管理页面阶段显示已统一!刷新页面即可看到效果。 🎉