PROJECT_MANAGEMENT_STAGE_UNIFIED.md 7.0 KB

项目管理页面 - 阶段显示统一修复

🎯 修复目标

将项目管理页面的当前阶段统一显示为四大核心阶段:

  • 订单分配
  • 确认需求
  • 交付执行(统一"白膜"、"软装"、"渲染"、"后期")
  • 售后归档

🐛 修复前的问题

显示混乱

当前阶段列显示:
- 白膜 ❌
- 软装 ❌
- 渲染 ❌
- 后期 ❌
- 订单分配 ✅
- 确认需求 ✅

代码问题

文件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') → '交付执行'

📊 修复效果对比

修复前

原始阶段 显示阶段 状态
白膜 白膜 ❌ 进行中
软装 软装 ❌ 进行中
渲染 渲染 ❌ 进行中
后期 后期 ❌ 进行中
订单分配 订单分配 ✅ 待分配
确认需求 确认需求 ✅ 进行中

修复后

原始阶段 显示阶段 状态
白膜 交付执行 进行中
软装 交付执行 进行中
渲染 交付执行 进行中
后期 交付执行 进行中
订单分配 订单分配 ✅ 待分配
确认需求 确认需求 ✅ 进行中
售后归档 售后归档 ✅ 已完成

🔄 状态自动映射

getProjectStatusByStage() 函数

文件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. 刷新项目管理页面

步骤:
1. 打开项目管理页面
2. 按 Ctrl+Shift+R 强制刷新
3. 查看表格中的"当前阶段"列

预期结果:
- 所有"白膜"、"软装"、"渲染"、"后期"统一显示为"交付执行" ✅
- 状态列显示"进行中" ✅

2. 查看控制台日志

步骤:
1. 按 F12 打开浏览器控制台
2. 刷新项目管理页面
3. 查看日志输出

预期日志:
📊 [项目管理] "项目名": {
  原始阶段: "软装",
  显示阶段: "交付执行",  // ✅ 正确映射
  状态: "进行中"
}

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()
  • 阶段显示统一为四大核心阶段
  • 状态自动映射为"待分配"/"进行中"/"已完成"
  • 控制台日志输出详细映射信息
  • 与项目详情页、组长端保持一致

项目管理页面阶段显示已统一!刷新页面即可看到效果。 🎉


🔄 后续优化建议

  1. 数据库统一:执行批量更新脚本,将所有子阶段统一为"交付执行"
  2. 筛选功能:确保阶段筛选功能支持核心阶段
  3. 导出功能:导出时显示核心阶段而非子阶段
  4. 统计报表:按核心阶段统计项目数量