根据用户反馈和截图,存在以下两个核心问题:
现象:
🔍 【审批状态检查】 {
原始审批状态: 'pending', // ❌ 应该是 'approved'
最终判定状态: 'pending', // ❌ 应该是 'approved'
是否pending: true, // ❌ 应该是 false
是否approved: false, // ❌ 应该是 true
是否rejected: false
}
业务逻辑:
现象:
getApprovalStatus() 智能判定失效当前逻辑(stage-order.component.ts 第1546-1598行):
getApprovalStatus(): 'pending' | 'approved' | 'rejected' | null {
const data = this.project.get('data') || {};
let status = data.approvalStatus || null;
const currentStage = this.project.get('currentStage');
// ⭐ 问题:即使项目已推进到"确认需求",但如果用户再次进入"订单分配"页面
// currentStage 可能仍然读取到旧的 '订单分配',导致判定失败
if (!status && currentStage !== '订单分配') {
status = 'approved';
}
// ⭐ 问题:审批历史检查依赖 approvalHistory 数组,但可能没有正确保存
if (!status && currentStage === '订单分配' && data.approvalHistory?.length > 0) {
const latestApproval = data.approvalHistory[data.approvalHistory.length - 1];
if (latestApproval?.status === 'approved') {
status = 'approved';
}
}
return status;
}
问题:
data.approvalStatus 字段在审批通过后没有被持久化保存currentStage 被更新为 "确认需求"/order可能原因:
quotation-editor 组件未正确接收 project 对象project.data.quotation 字段为空或未正确初始化@Input() 绑定失效文件:stage-order.component.ts 第579-629行
问题:虽然已经添加了保存验证,但可能存在以下问题:
approvalStatus 写回本地组件状态getApprovalStatus() 仍然读取的是旧的 data.approvalStatus修复代码:
async approveOrder(): Promise<void> {
// ... 前面的代码保持不变 ...
// ✅ 验证保存成功后,立即更新本地状态
if (savedData.approvalStatus === 'approved' && savedStage === '确认需求') {
console.log('✅ [审批通过] 数据验证成功,更新本地状态');
// 🔥 关键:更新本地 project 对象的引用
// 确保 getApprovalStatus() 读取的是最新数据
this.project = await query.get(this.project.id);
// 🔥 强制刷新视图
this.cdr.detectChanges();
}
}
文件:stage-order.component.ts 第1546-1598行
问题:
approvalHistory 的最后一条记录approvalHistory 中有多个阶段的记录,可能取错修复代码:
getApprovalStatus(): 'pending' | 'approved' | 'rejected' | null {
if (!this.project) return null;
const data = this.project.get('data') || {};
let status = data.approvalStatus || null;
const currentStage = this.project.get('currentStage');
// ✅ 修复1:明确检查 approvalStatus 字段
if (data.approvalStatus) {
console.log('✅ [审批状态] 直接读取 approvalStatus:', data.approvalStatus);
return data.approvalStatus;
}
// ✅ 修复2:检查审批历史中"订单分配"阶段的记录
if (data.approvalHistory && data.approvalHistory.length > 0) {
// 🔥 关键:筛选出"订单分配"阶段的审批记录
const orderApprovals = data.approvalHistory.filter(
(h: any) => h.stage === '订单分配'
);
if (orderApprovals.length > 0) {
const latestOrderApproval = orderApprovals[orderApprovals.length - 1];
status = latestOrderApproval.status;
console.log('✅ [智能判定] 从审批历史中找到订单分配审批状态:', status);
return status;
}
}
// ✅ 修复3:如果项目已推进到后续阶段,必定已审批
if (currentStage && !['订单分配', '未分配', '新建'].includes(currentStage)) {
status = 'approved';
console.log('✅ [智能判定] 项目已推进到 "' + currentStage + '" 阶段,订单分配必定已通过');
return status;
}
// 默认返回 null(未提交)
return null;
}
问题诊断:
quotation 对象是否正确初始化quotation-editor 组件是否正确接收数据修复代码(stage-order.component.ts):
async loadData() {
// ... 前面的代码 ...
if (this.project) {
const data = this.project.get('data') || {};
// ✅ 修复:确保 quotation 对象被正确初始化
if (data.quotation) {
this.quotation = data.quotation;
console.log('✅ [加载数据] 报价数据加载成功:', {
total: this.quotation.total,
spaces: this.quotation.spaces?.length || 0,
spaceNames: this.quotation.spaces?.map((s: any) => s.name) || []
});
} else {
// 🔥 如果没有报价数据,初始化默认结构
console.warn('⚠️ [加载数据] 项目没有报价数据,初始化默认结构');
this.quotation = {
spaces: [],
total: 0,
spaceBreakdown: []
};
data.quotation = this.quotation;
this.project.set('data', data);
}
// ... 后续代码 ...
}
}
submitForOrder() 审批流程优化当前问题:
approvalStatus = 'approved'approvalStatus = 'pending'验证代码(stage-order.component.ts 第1345-1351行):
await this.project.save();
console.log('✅ [提交订单] 项目保存成功,验证数据:', {
approvalStatus: this.project.get('data')?.approvalStatus, // 应该是 'approved' 或 'pending'
currentStage: this.project.get('currentStage') // 应该是 '确认需求' 或 '订单分配'
});
如果验证失败,添加额外检查:
// 🔥 关键:验证保存是否成功
const savedData = this.project.get('data') || {};
if (hasAssignedDesigners && savedData.approvalStatus !== 'approved') {
console.error('❌ [提交订单] 审批状态未正确保存!');
throw new Error('订单提交失败,请重试');
}
| 文件 | 修改内容 | 优先级 |
|---|---|---|
stage-order.component.ts |
增强 getApprovalStatus() 智能判定 |
🔴 高 |
stage-order.component.ts |
修复 approveOrder() 状态同步 |
🔴 高 |
stage-order.component.ts |
修复 loadData() 报价数据加载 |
🟡 中 |
stage-order.component.ts |
增强 submitForOrder() 验证 |
🟡 中 |
提交订单:
🔍 控制台应显示:
approvalStatus: 'pending'
pendingApprovalBy: 'team-leader'
组长端:审批通过
🔍 控制台应显示:
✅ [审批通过] 数据验证成功
approvalStatus: 'approved'
currentStage: '确认需求'
再次进入订单分配页面:
🔍 控制台应显示:
🔍 【审批状态检查】
原始审批状态: 'approved' ✅ 正确
最终判定状态: 'approved' ✅ 正确
是否approved: true ✅ 正确
页面应显示:"审批已通过" 横幅
查看控制台:
✅ [加载数据] 报价数据加载成功:
total: 5000 // 应该是实际金额,不是0
spaces: 2 // 应该有空间
页面应显示:
组长审批通过
↓
项目进入确认需求
↓
再次查看订单分配
↓
approvalStatus: 'pending' ❌ 错误
显示:等待组长审批 ❌ 错误
报价显示:¥0 ❌ 错误
组长审批通过
↓
项目进入确认需求
↓
再次查看订单分配
↓
approvalStatus: 'approved' ✅ 正确
显示:审批已通过 ✅ 正确
报价显示:¥5000 ✅ 正确
现在让我实施这些修复...