修改文件:stage-order.component.ts (第1546-1654行)
修复内容:
data.approvalStatus 字段关键代码:
getApprovalStatus(): 'pending' | 'approved' | 'rejected' | null {
const data = this.project.get('data') || {};
// 优先级1:直接读取 approvalStatus
if (data.approvalStatus) {
return data.approvalStatus;
}
// 优先级2:检查"订单分配"阶段的审批历史
const orderApprovals = data.approvalHistory.filter(h => h.stage === '订单分配');
if (orderApprovals.length > 0) {
return orderApprovals[orderApprovals.length - 1].status;
}
// 优先级3:项目已推进到后续阶段
if (currentStage && !['订单分配', '未分配', '新建'].includes(currentStage)) {
return 'approved';
}
return null;
}
修改文件:stage-order.component.ts (第466-489行)
修复内容:
关键代码:
const data = this.project.get('data') || {};
if (data.quotation) {
this.quotation = data.quotation;
console.log('✅ [loadData] 报价数据加载成功:', {
total: this.quotation.total,
spaces: this.quotation.spaces?.length || 0,
spaceNames: this.quotation.spaces?.map(s => s.name) || []
});
} else {
console.warn('⚠️ [loadData] 项目没有报价数据,初始化默认结构');
this.quotation = { spaces: [], total: 0, spaceBreakdown: [] };
}
步骤:
客服端创建项目:
提交订单:
查看控制台:
💾 [提交订单] 准备保存项目数据:
approvalStatus: 'pending'
pendingApprovalBy: 'team-leader'
✅ [提交订单] 项目保存成功
组长端审批通过:
查看控制台:
📝 [审批通过] 准备保存项目数据
💾 [审批通过] 项目已保存到数据库
✅ [审批通过] 数据验证成功:
approvalStatus: 'approved'
currentStage: '确认需求'
再次进入订单分配页面:
查看控制台:
🔍 [loadData] 项目审批状态详情:
审批状态: 'approved'
✅ [审批状态] 直接读取 data.approvalStatus: approved
🔍 【审批状态检查】
原始审批状态: 'approved' ✅ 正确!
最终判定状态: 'approved' ✅ 正确!
是否pending: false ✅ 正确!
是否approved: true ✅ 正确!
页面显示验证:
步骤:
客服端创建项目:
提交订单:
查看控制台:
✅ 已分配设计师,订单直接通过,进入"确认需求"阶段
💾 [提交订单] 准备保存项目数据:
approvalStatus: 'approved' ✅ 自动审批
currentStage: '确认需求'
✅ [提交订单] 项目保存成功
再次进入订单分配页面:
查看控制台:
✅ [智能判定] 从审批历史中找到订单分配审批状态: approved
审批人: 自动审批
是否自动审批: true
🔍 【审批状态检查】
最终判定状态: 'approved' ✅ 正确!
页面显示验证:
步骤:
进入订单分配页面
查看控制台日志:
✅ [loadData] 报价数据加载成功:
total: 5000 // 应该是实际金额,不是0
spaces: 2 // 应该有空间
spaceNames: ['客厅', '卧室']
如果报价为空:
⚠️ [loadData] 项目没有报价数据,初始化默认结构
total: 0
spaces: 0
检查 app-quotation-editor 组件:
project 对象canEdit 权限验证HTML绑定:
<app-quotation-editor
[project]="project"
[canEdit]="canEdit"
[currentUser]="currentUser"
(quotationChange)="onQuotationChange($event)"
(totalChange)="onTotalChange($event)">
</app-quotation-editor>
方法:在浏览器控制台执行
// 查看项目数据
const query = new Parse.Query('Project');
const project = await query.get('项目ID');
const data = project.get('data');
console.log('报价数据:', data.quotation);
预期结果:
{
spaces: [
{ name: '客厅', spaceId: 'xxx', subtotal: 3000 },
{ name: '卧室', spaceId: 'yyy', subtotal: 2000 }
],
total: 5000,
spaceBreakdown: [...]
}
quotation-editor 组件是否接收到数据方法:在 quotation-editor.component.ts 中添加日志
ngOnInit() {
console.log('🔍 [报价编辑器] 接收到数据:', {
project: this.project?.id,
projectData: this.project?.get('data')?.quotation,
canEdit: this.canEdit
});
}
查看HTML:
<app-quotation-editor
[project]="project" <!-- 是否正确传递 -->
[canEdit]="canEdit" <!-- 是否正确传递 -->
[currentUser]="currentUser"> <!-- 是否正确传递 -->
</app-quotation-editor>
查看 quotation-editor.component.html:
{{ quotation.total | currency:'CNY' }}【审批状态】
控制台:
原始审批状态: 'pending' ❌
最终判定状态: 'pending' ❌
是否approved: false ❌
页面显示:
⏳ 等待组长审批 ❌
【报价显示】
页面显示:
报价总额: ¥0 ❌
【审批状态】
控制台:
原始审批状态: 'approved' ✅
最终判定状态: 'approved' ✅
是否approved: true ✅
页面显示:
✅ 审批已通过 ✅
【报价显示】
控制台:
✅ [loadData] 报价数据加载成功
total: 5000 ✅
spaces: 2 ✅
页面显示:
报价总额: ¥5,000 ✅
// 加载数据时
🔍 [loadData] 项目审批状态详情:
审批状态: 'approved'
// 获取审批状态时
✅ [审批状态] 直接读取 data.approvalStatus: approved
🔍 【审批状态检查】
原始审批状态: 'approved'
最终判定状态: 'approved'
是否pending: false
是否approved: true
是否rejected: false
// 加载数据时
✅ [loadData] 报价数据加载成功:
total: 5000
spaces: 2
spaceNames: ['客厅', '卧室']
isMultiSpace: true
// 如果没有数据
⚠️ [loadData] 项目没有报价数据,初始化默认结构
可能原因:
data.approvalStatus 字段未正确保存解决方法:
// 在浏览器控制台手动修复
const query = new Parse.Query('Project');
const project = await query.get('项目ID');
const data = project.get('data') || {};
data.approvalStatus = 'approved';
project.set('data', data);
await project.save();
console.log('✅ 手动修复审批状态');
可能原因:
quotation-editor 组件未正确接收数据解决方法:
project.data.quotation 字段请告知以下信息:
审批状态:
approvalStatus: 'approved'报价显示:
控制台日志:
修复已完成,请按照上述步骤进行测试! 🚀