用户要求:
既然是进入到需求确认阶段的项目,那么他们上一个环节的审批状态就应该是审批通过的,请你正确标记,不管是点击导航订单分配查看还是怎么样,数据应该是持久化保存的。
问题描述:
data.approvalStatus 字段未正确保存为 'approved'文件:stage-order.component.ts
方法:loadData() (第499-546行)
// 检查:如果项目已在"确认需求"、"交付执行"、"售后归档"等后续阶段
if (currentStage && !['订单分配', '未分配', '新建'].includes(currentStage)) {
// 检查审批状态是否正确
if (data.approvalStatus !== 'approved') {
// 🔥 步骤1:设置审批状态为已通过
data.approvalStatus = 'approved';
// 🔥 步骤2:添加审批历史记录(如果不存在)
const approvalHistory = data.approvalHistory || [];
const hasOrderApproval = approvalHistory.some(h =>
h.stage === '订单分配' && h.status === 'approved'
);
if (!hasOrderApproval) {
approvalHistory.push({
stage: '订单分配',
status: 'approved',
autoFixed: true, // 标记为自动修复
fixTime: new Date(),
reason: '项目已推进到后续阶段,自动修复订单分配审批状态'
});
data.approvalHistory = approvalHistory;
}
// 🔥 步骤3:持久化保存到数据库
this.project.set('data', data);
await this.project.save();
console.log('✅ [自动修复] 审批状态已持久化保存到数据库');
}
}
else if (currentStage === '订单分配' && data.approvalStatus === undefined) {
data.approvalStatus = null; // 未提交状态
data.approvalHistory = data.approvalHistory || [];
// 不保存到数据库,等用户提交订单时再保存
}
项目推进到"确认需求"
↓
data.approvalStatus = undefined 或 'pending' ❌
↓
用户点击"订单分配"导航
↓
getApprovalStatus() 智能判定返回 'approved' (临时)
↓
刷新页面后,又回到 'pending' ❌
项目推进到"确认需求"
↓
loadData() 检测到阶段不匹配
↓
自动修复:data.approvalStatus = 'approved'
↓
持久化保存到数据库 ✅
↓
用户点击"订单分配"导航
↓
直接读取 data.approvalStatus = 'approved' ✅
↓
刷新页面后,状态仍为 'approved' ✅
🔧 [自动修复] 项目已在 "确认需求" 阶段,但审批状态为: pending → 自动修复为 approved
✅ [自动修复] 已添加审批历史记录
✅ [自动修复] 审批状态已持久化保存到数据库
✅ [数据检查] 项目在 "确认需求" 阶段,审批状态正确: approved
🔧 [初始化] 订单分配阶段但无审批状态,初始化为null(未提交)
修复前:
修复后:
修复前:
🔍 【审批状态检查】
原始审批状态: 'pending' ❌
最终判定状态: 'approved' ⚠️ 临时判定
修复后:
🔍 【审批状态检查】
原始审批状态: 'approved' ✅
最终判定状态: 'approved' ✅
修复前:
data.approvalHistory: [] // 空数组或缺少订单分配记录
修复后:
data.approvalHistory: [
{
stage: '订单分配',
status: 'approved',
autoFixed: true,
fixTime: '2024-11-17T16:47:00.000Z',
reason: '项目已推进到后续阶段,自动修复订单分配审批状态'
}
]
准备数据:
操作:
预期结果:
// 控制台输出
🔧 [自动修复] 项目已在 "确认需求" 阶段,但审批状态为: pending → 自动修复为 approved
✅ [自动修复] 审批状态已持久化保存到数据库
// 页面显示
✅ 审批已通过(绿色横幅)
验证持久化:
准备数据:
操作:
预期结果:
// 控制台输出
🔧 [初始化] 订单分配阶段但无审批状态,初始化为null(未提交)
// 页面显示
正常显示报价表单和"确认订单"按钮
准备数据:
操作:
预期结果:
// 控制台输出
✅ [数据检查] 项目在 "确认需求" 阶段,审批状态正确: approved
// 页面显示
✅ 审批已通过(绿色横幅)
触发条件:
ngOnInit → loadData())currentStage 已超过"订单分配"data.approvalStatus 不是 'approved'执行逻辑:
data.approvalStatus = 'approved'project.save() 持久化保存优势:
劣势:
| 特性 | 智能判定 (getApprovalStatus) | 自动修复 (loadData) |
|---|---|---|
| 数据持久化 | ❌ 临时判定,不保存 | ✅ 保存到数据库 |
| 跨页面一致 | ❌ 每次都需要重新判定 | ✅ 加载即可直接读取 |
| 审批历史 | ❌ 不添加记录 | ✅ 自动补充记录 |
| 性能 | ✅ 轻量级判定 | ⚠️ 需要保存操作 |
| 适用场景 | 显示层逻辑 | 数据层修复 |
loadData() 中添加自动修复逻辑data.approvalStatus = 'approved'修复已完成,数据已持久化保存! 🚀
请刷新页面并测试以下场景:
如有任何问题,请提供控制台日志!