将交付执行阶段显示的"白膜"、"软装"、"渲染"、"后期"进度统一映射为"交付执行",修改总管理员端的项目当前阶段,正确映射交付执行阶段字段。
文件:src/app/utils/project-stage-mapper.ts
修改内容 (Line 56-78):
// 3. 交付执行阶段(英文ID + 中文名称)
if (normalizedStage === 'delivery' ||
normalizedStage === 'modeling' ||
normalizedStage === 'rendering' ||
normalizedStage === 'postproduction' ||
normalizedStage === 'review' ||
normalizedStage === 'revision' ||
normalizedStage === '交付执行' ||
normalizedStage === '建模' ||
normalizedStage === '建模阶段' ||
normalizedStage === '渲染' ||
normalizedStage === '渲染阶段' ||
normalizedStage === '后期制作' ||
normalizedStage === '后期处理' ||
normalizedStage === '后期' ||
normalizedStage === '评审' ||
normalizedStage === '方案评审' ||
normalizedStage === '修改' ||
normalizedStage === '方案修改' ||
normalizedStage === '修订' ||
normalizedStage === '软装' ||
normalizedStage === '白膜') { // ✅ 新增
return 'delivery';
}
效果:所有交付执行子阶段都被正确识别为 delivery 核心阶段。
文件:src/modules/project/components/project-bottom-card/project-bottom-card.component.ts
修改内容 (Line 100-112):
getProjectStatus(): string {
const currentStage = this.project?.get('currentStage') || '订单分配';
const corePhase = mapStageToCorePhase(currentStage);
// 🔥 如果是交付执行阶段的子阶段,统一显示"交付执行"
if (corePhase === 'delivery') {
return '交付执行';
}
// 其他阶段显示实际阶段名称
return currentStage;
}
效果:
文件:src/modules/project/pages/project-detail/stages/stage-delivery.component.ts
修改内容 (Line 1727-1748):
if (allStagesApproved) {
// 所有阶段都已通过,推进到尾款结算
this.project.set('currentStage', '尾款结算');
data.deliveryCompletedAt = now;
data.deliveryCompletedBy = this.currentUser.get('name');
delete data.deliverySubStage; // 清除子阶段标记
console.log('✅ 所有交付阶段已完成,推进到尾款结算');
} else {
// 🔥 保持 currentStage 为"交付执行",更新 deliverySubStage 为下一个子阶段
const nextStage = this.getNextStage(currentType);
if (nextStage) {
const nextStageName = stageNameMap[nextStage] || '白模';
data.deliverySubStage = nextStageName;
this.project.set('currentStage', '交付执行'); // 统一为"交付执行"
console.log(`当前阶段审批通过,currentStage保持为"交付执行",deliverySubStage更新为: ${nextStageName}`);
} else {
const currentStageName = stageNameMap[currentType] || '白模';
data.deliverySubStage = currentStageName;
this.project.set('currentStage', '交付执行'); // 统一为"交付执行"
console.log(`当前阶段审批通过,currentStage保持为"交付执行",deliverySubStage保持为: ${currentStageName}`);
}
}
效果:
currentStage 保持为"交付执行"data.deliverySubStage文件:src/modules/project/pages/project-detail/stages/stage-delivery.component.ts
新增方法 (Line 520-537):
async unifyDeliveryStageForOldData(): Promise<void> {
if (!this.project) return;
const currentStage = this.project.get('currentStage');
const validDeliveryStages = ['白膜', '软装', '渲染', '后期'];
if (validDeliveryStages.includes(currentStage)) {
console.log(`统一阶段: "${currentStage}" → "交付执行"`);
const data = this.project.get('data') || {};
data.deliverySubStage = currentStage;
this.project.set('currentStage', '交付执行');
this.project.set('data', data);
try {
await this.project.save();
console.log('阶段已统一为"交付执行"');
} catch (e) {
console.error('统一阶段失败:', e);
}
}
}
调用时机 (Line 436):
await this.unifyDeliveryStageForOldData();
效果:
currentStagedata.deliverySubStage文件:src/app/pages/admin/project-management/project-management.ts
已有修改 (Line 220-244):
// 获取项目阶段(直接使用实际阶段,保持与其他端一致)
const currentStage = json.currentStage || json.stage || '订单分配';
// 🔄 根据阶段自动判断状态(与组长端逻辑保持一致)
const autoStatus = getProjectStatusByStage(currentStage, json.status);
return {
// ...
currentStage: currentStage // 🔥 使用实际阶段名称
};
配合 getProjectStatusByStage() 函数:
export function getProjectStatusByStage(
stageId: string | null | undefined,
currentStatus?: string
): string {
const corePhase = mapStageToCorePhase(stageId);
switch (corePhase) {
case 'order':
return '待分配';
case 'requirements':
case 'delivery': // ✅ 交付执行阶段
return '进行中';
case 'aftercare':
return '已完成';
default:
return '待分配';
}
}
效果:
{
currentStage: "软装", // 子阶段名称
data: {
deliveryStageStatus: {
softdecor: { status: "pending" }
}
}
}
问题:
{
currentStage: "交付执行", // ✅ 统一为交付执行
data: {
deliverySubStage: "软装", // ✅ 子阶段保留
deliveryStageStatus: {
softdecor: { status: "pending" }
}
}
}
效果:
localhost:4200/admin/project-managementcurrentStage 字段deliverySubStage 更新为"软装"currentStage 为"软装"的旧项目统一阶段: "软装" → "交付执行"在浏览器控制台执行:
const Parse = window.Parse;
const query = new Parse.Query('Project');
query.equalTo('objectId', '项目ID');
const project = await query.first();
console.log('currentStage:', project.get('currentStage'));
console.log('deliverySubStage:', project.get('data').deliverySubStage);
预期:
currentStage: "交付执行"deliverySubStage: "白膜" / "软装" / "渲染" / "后期"currentStage 统一为"交付执行"data.deliverySubStage,不丢失所有修复已完成并通过编译! 🎉
现在所有交付执行阶段的项目都会统一显示"交付执行",而不是子阶段名称。