"订单分配阶段还没有完成,点击顶部导航栏之后就把项目进入到下一个阶段了,导致没有经过组长端进行审批这个项目,这个项目就已经进入到下一个阶段确认需求了"
症状:
currentStage = '确认需求'(错误)approvalStatus = 'pending'(待审批)修改文件:project-detail.component.ts 第503-542行
修复内容:
project.currentStage代码示例:
switchStage(stageId: string) {
// ✅ 允许查看所有阶段
// ❌ 不改变 project.currentStage
this.currentStage = stageId; // 仅改变本地视图
this.router.navigate([stageId]);
}
修改文件:project-detail.component.ts 第462-548行
修复内容:
检查条件:
// 如果项目在"确认需求"或更后面的阶段
if (projectStage === '确认需求' || ...) {
// 检查订单分配是否完成
const orderComplete =
title &&
projectType &&
demoday &&
quotationTotal > 0 &&
approvalStatus === 'approved';
if (!orderComplete) {
// 自动回退到订单分配
project.set('currentStage', '订单分配');
await project.save();
alert('已自动回退到订单分配阶段,请完成必填项');
}
}
1. 用户点击导航栏"确认需求"
└─ ❌ project.currentStage = '确认需求'(错误)
2. 项目状态:
├─ currentStage: '确认需求' ❌
├─ approvalStatus: 'pending' ⚠️ 待审批
└─ 组长端:显示待审批 ✓
3. 进入项目:
├─ 项目列表:显示"确认需求" ❌
├─ 导航栏:订单分配●红色 ❌ 混乱
├─ 页面:订单分配页面 ❌
└─ 提示:待组长审批 ⚠️
4. 用户困惑:
└─ "为什么显示确认需求,但进去是订单分配?"
1. 用户点击导航栏"确认需求"
└─ ✅ 只改变路由,不改变 project.currentStage
2. 自动回退检查:
├─ 检测到:currentStage = '确认需求'
├─ 检测到:approvalStatus = 'pending' ⚠️ 未完成
├─ 自动回退:currentStage = '订单分配' ✅
└─ 提示:"检测到阶段错误,已回退" 💡
3. 进入项目:
├─ 项目列表:显示"订单分配" ✅
├─ 导航栏:订单分配●红色 ✅ 正确
├─ 页面:订单分配页面 ✅
└─ 提示:待组长审批 ✅
4. 用户体验:
└─ "明确知道当前在订单分配,需要等待审批" ✅
初始状态:
项目A:
currentStage: '确认需求' ← 错误(之前点击导航栏导致)
title: "李四的办公室"
projectType: "工装"
demoday: "2025-01-21"
quotation.total: 80000
approvalStatus: 'pending' ← 待组长审批
操作:用户从项目列表点击"项目A"
自动修复过程:
1. loadData() 加载项目数据
↓
2. 检查项目阶段:currentStage = '确认需求'
↓
3. 检查订单分配完成条件:
├─ title: ✓ 有
├─ projectType: ✓ 有
├─ demoday: ✓ 有
├─ quotation.total: ✓ 80000 > 0
└─ approvalStatus: ❌ 'pending' ← 未审批!
↓
4. ⚠️ 检测到阶段错误
↓
5. 自动回退:
├─ currentStage: '确认需求' → '订单分配'
└─ 保存到数据库
↓
6. 显示提示:
"检测到项目阶段错误,已自动回退到订单分配阶段
原因:订单分配阶段未完成: 待组长审批
请完成该阶段的必填项后再推进到下一阶段。"
↓
7. 导航到订单分配页面
↓
8. ✅ 项目现在处于正确的阶段
修复后状态:
项目A:
currentStage: '订单分配' ← 正确
title: "李四的办公室"
projectType: "工装"
demoday: "2025-01-21"
quotation.total: 80000
approvalStatus: 'pending' ← 待组长审批(保持不变)
各端显示:
组长端:
└─ 待审批列表:显示"项目A" ✅ 正确
客服端/设计师端:
├─ 项目列表:显示"订单分配" ✅ 正确
├─ 进入项目:跳转到订单分配页面 ✅ 正确
└─ 状态:待组长审批 ✅ 正确
1. 订单分配阶段
├─ 填写项目名称 ✓
├─ 选择项目类型 ✓
├─ 选择小图日期 ✓
├─ 配置报价明细 ✓
├─ 分配设计师 ✓
└─ 点击"确认订单"按钮 ← 触发推进
↓
2. 验证必填项
├─ 检查所有必填项 ✓
└─ 验证通过
↓
3. 提交组长审批
├─ approvalStatus = 'pending'
└─ 等待组长审批...
↓
4. 组长审批
├─ 组长点击"通过"
├─ approvalStatus = 'approved'
└─ currentStage = '确认需求' ← 自动推进
↓
5. ✅ 项目进入确认需求阶段
1. 用户在订单分配阶段
↓
2. 点击导航栏"确认需求"(灰色,未开始)
↓
3. switchStage('requirements')
├─ this.currentStage = 'requirements' ← 仅改变视图
├─ 路由跳转到 /project/xxx/requirements
└─ project.currentStage 仍然是 '订单分配' ✅ 不改变
↓
4. 显示确认需求页面(可能为空)
├─ 控制台提示:"正在查看未开始的阶段"
└─ 导航栏状态不变(订单分配仍然是红色)
↓
5. 刷新页面
└─ 自动跳转回订单分配页面 ✅
| 文件 | 修改内容 | 行数 |
|---|---|---|
project-detail.component.ts |
修改 switchStage 方法:查看模式 |
503-542 |
project-detail.component.ts |
添加自动回退检查 | 462-548 |
project-detail.component.html |
移除禁用逻辑 | 4-11 |
project-detail.component.scss |
调整pending样式 | 204-227 |
scripts/repair-project-stages.ts |
修复TypeScript错误 | 81 |
您描述的问题已经完全解决:
project.currentStage现在,您可以正常使用系统了!所有错误的项目都会在打开时自动修复!🎊