问题:客服端使用看板列ID(columnId)而不是项目实际阶段(currentStage)进行跳转
修复文件:
project-list.ts (第894-947行)project-list.html (3处调用)修复前:
navigateToProject(project, columnId) {
const stagePath = stagePathMapping[columnId]; // ❌ 错误
this.router.navigate(['/wxwork', cid, 'project', project.id, stagePath]);
}
修复后:
navigateToProject(project: ProjectListItem) {
const stageRouteMap = {
'订单分配': 'order',
'确认需求': 'requirements',
'交付执行': 'delivery',
'售后归档': 'aftercare'
// ... 所有子阶段映射
};
const currentStage = project.currentStage || '订单分配';
const stagePath = stageRouteMap[currentStage] || 'order';
console.log(`🎯 [客服端跳转] 项目"${project.name}"`, {
currentStage, stagePath, projectId: project.id
});
this.router.navigate(['/wxwork', cid, 'project', project.id, stagePath]);
}
问题:过度回退已审批的项目
修复文件:project-detail.component.ts (第482-525行)
关键改进:
// ✅ 智能判断审批状态:检查审批历史
const hasApprovedHistory = data.approvalHistory?.some((h: any) =>
h.stage === '订单分配' && h.status === 'approved'
);
const notApproved = approvalStatus !== 'approved' && !hasApprovedHistory;
// ⚠️ 只有当数据不完整AND未审批时才回退
if (orderStageIncomplete && notApproved) {
// 回退
} else if (orderStageIncomplete && !notApproved) {
// 已审批但数据不完整,不回退,只警告
console.warn('⚠️ 项目数据不完整但已审批,不执行回退');
}
project-management.ts)数据表:Project
阶段字段:
project.currentStage 或 project.stagenormalizeStage(rawStage)getProjectStatusByStage(rawStage, status)跳转逻辑:(管理端不直接跳转,由组件自己决定)
project-list.ts)数据表:Project
阶段字段:
project.currentStage 或 project.stage (第479行)getProjectStatusByStage(rawStage, status) (第494行)跳转逻辑(已修复):
project.currentStage 决定路由dashboard.ts)数据表:Project (通过DesignerService)
阶段字段:
project.currentStage (第428, 520行)跳转逻辑:
project.currentStage 决定路由 (第853行)stageRouteMap 映射阶段 (第856-869行)文件:stage-order.component.ts 第546-602行
流程:
1. 组长点击"审批通过"
↓
2. approveOrder() 方法
├─ 设置 data.approvalStatus = 'approved'
├─ 设置 currentStage = '确认需求'
├─ 保存 approvalHistory
└─ 删除 pendingApprovalBy
↓
3. project.save()
↓
4. 刷新验证
├─ 重新查询项目
└─ 验证 approvalStatus 和 currentStage
↓
5. 派发事件
└─ document.dispatchEvent('stage:completed')
approvalStatus 字段✅ 智能判断:检查 approvalHistory 而不仅仅是 approvalStatus
✅ 避免过度回退:已审批的项目不回退
✅ 详细日志:输出调试信息便于排查
查看控制台:
🎯 [客服端跳转] 项目"xxx"
currentStage: "确认需求"
stagePath: "requirements"
验证URL:应该是 /wxwork/{cid}/project/{id}/requirements
验证页面:应该显示确认需求阶段内容
查看控制台:
📝 [审批通过] 准备保存:
approvalStatus: "approved"
currentStage: "确认需求"
✅ [审批通过] 保存后验证:
approvalStatus: "approved"
currentStage: "确认需求"
刷新客服端:项目应该出现在"确认需求"列
点击项目:应该跳转到确认需求页面
场景A:未审批的不完整项目
currentStage: "确认需求"
approvalStatus: null
approvalHistory: []
结果: ✅ 回退到"订单分配"
场景B:已审批但数据不完整
currentStage: "确认需求"
approvalStatus: "approved"
data.title: null // 缺失字段
结果: ⚠️ 不回退,输出警告
场景C:审批历史显示已通过
currentStage: "确认需求"
approvalStatus: null // 字段丢失
approvalHistory: [{ stage: '订单分配', status: 'approved' }]
结果: ✅ 不回退,认为已审批
| 文件 | 修改内容 | 行数 |
|---|---|---|
project-list.ts |
修复跳转逻辑 | 894-947 |
project-list.html |
移除columnId参数 | 114, 145, 241 |
project-detail.component.ts |
优化回退检查 | 482-525 |
问题1:客服端跳转错误
项目实际阶段:确认需求
看板列:订单分配
跳转到:/project/{id}/order ❌ 错误
问题2:审批后依旧显示待审批
组长审批通过
保存后刷新
但其他端未同步 ❌ 错误
问题3:过度回退
项目已审批
但某字段缺失
被回退到订单分配 ❌ 错误
✅ 客服端跳转正确
项目实际阶段:确认需求
看板列:(任意)
跳转到:/project/{id}/requirements ✅ 正确
✅ 审批状态同步
组长审批通过
保存并验证成功
所有端看到正确状态 ✅ 正确
✅ 智能回退判断
项目已审批
即使字段缺失
不回退,只警告 ✅ 正确
// 在浏览器控制台查看项目数据
window.debugCustomerServiceProjects()
// 输出示例
项目1: "张三的家装项目"
- currentStage: 确认需求
- stage: 确认需求
- status: 进行中
- 看板列: requirements
---
// 查询特定项目
const query = new Parse.Query('Project');
const project = await query.get('项目ID');
// 查看审批信息
console.log({
currentStage: project.get('currentStage'),
approvalStatus: project.get('data')?.approvalStatus,
approvalHistory: project.get('data')?.approvalHistory
});
打开项目后查看控制台:
🔍 [项目详情] 当前项目阶段: 确认需求
🔍 [项目详情] 项目数据: {
title: "xxx",
approvalStatus: "approved",
requirementsAnalysis: true
}
✅ [项目详情] 已在正确阶段,无需导航
所有问题已修复!
✅ 客服端跳转:使用 project.currentStage 而不是 columnId
✅ 审批状态:增强验证和刷新机制
✅ 自动回退:智能判断,不过度回退已审批项目
✅ 调试日志:详细的控制台输出便于排查问题
现在三个页面的数据获取、阶段显示和跳转逻辑都正确了!