2025-10-28
已完成 - 所有功能已实现并集成到真实数据库
实现组长端对客服提交的订单分配进行审批的完整流程,包括审批入口、审批操作、状态流转和历史记录。
路径: src/app/shared/components/order-approval-panel/
文件:
order-approval-panel.component.ts (185行)order-approval-panel.component.html (165行)order-approval-panel.component.scss (386行)功能:
文件: src/app/pages/designer/project-detail/project-detail.ts (新增100行)
新增属性:
showApprovalPanel: boolean = false;
companyId: string = '';
新增方法:
checkApprovalStatus() - 检查是否需要显示审批面板onApprovalCompleted() - 处理审批完成事件(通过/驳回)集成位置:
src/app/pages/designer/project-detail/project-detail.html
逻辑:
文件: src/modules/project/pages/project-detail/stages/stage-order.component.ts
修改的方法: submitForOrder()
变更内容:
// ❌ 旧逻辑:直接推进到"确认需求"
this.project.set('currentStage', '确认需求');
// ✅ 新逻辑:保持在"订单分配",标记为待审批
// 不修改 currentStage
data.approvalStatus = 'pending';
data.pendingApprovalBy = 'team-leader';
审批历史记录:
approvalHistory.push({
stage: '订单分配',
submitter: { id, name, role },
submitTime: new Date(),
status: 'pending', // 待审批
quotationTotal: this.quotation.total,
teams: teamSnapshot
});
文件:
src/app/pages/team-leader/dashboard/dashboard.tssrc/app/pages/team-leader/dashboard/dashboard.htmlsrc/app/pages/team-leader/dashboard/dashboard.scss新增方法:
isPendingApproval(project: Project): boolean {
const stage = project.currentStage?.trim();
const data = (project as any).data || {};
return stage === '订单分配' && data.approvalStatus === 'pending';
}
优化的 getter:
get pendingApprovalProjects(): Project[] {
return this.projects.filter(p => {
const stage = p.currentStage?.trim();
const data = (p as any).data || {};
return (stage === '订单分配' && data.approvalStatus === 'pending') ||
stage === '待审批' || stage === '待确认';
});
}
视觉增强:
文件:
src/modules/project/pages/project-detail/stages/stage-order.component.tssrc/modules/project/pages/project-detail/stages/stage-order.component.htmlsrc/modules/project/pages/project-detail/stages/stage-order.component.scss新增方法:
getApprovalStatus(): 'pending' | 'approved' | 'rejected' | null
getRejectionReason(): string
prepareResubmit(): void
审批状态横幅:
Project {
currentStage: string, // '订单分配' | '确认需求' | ...
data: {
// 新增字段
approvalStatus?: 'pending' | 'approved' | 'rejected',
approvalHistory: ApprovalRecord[],
pendingApprovalBy?: 'team-leader',
lastRejectionReason?: string
}
}
interface ApprovalRecord {
stage: string; // '订单分配'
submitter: { // 提交人
id: string;
name: string;
role: string;
};
submitTime: Date; // 提交时间
status: 'pending' | 'approved' | 'rejected';
approver?: { // 审批人(审批后填写)
id: string;
name: string;
role: string;
};
approvalTime?: Date; // 审批时间
reason?: string; // 驳回原因
comment?: string; // 审批备注
quotationTotal: number; // 报价总额快照
teams: TeamSnapshot[]; // 团队分配快照
}
1. 客服填写订单信息
↓
2. 客服点击"提交订单分配"
↓
3. 项目标记为待审批 (approvalStatus: 'pending')
↓
4. 组长工作台显示待审批项目(橙色高亮)
↓
5. 组长点击项目查看详情
↓
6. 显示审批面板,查看订单信息
↓
7a. 通过审批 7b. 驳回审批
- 项目进入"确认需求"阶段 - 保持"订单分配"阶段
- approvalStatus: 'approved' - approvalStatus: 'rejected'
- 记录审批人和时间 - 记录驳回原因
↓ ↓
8a. 客服看到"审批通过" 8b. 客服看到驳回原因
- 点击"修改并重新提交"
- 修改后重新提交
~1,370行 新增/修改代码
// 直接使用Parse保存项目
const { Parse } = await import('fmode-ng/core');
const Project = Parse.Object.extend('Project');
const projectToSave = Project.createWithoutData(projectId);
projectToSave.set('currentStage', '确认需求');
projectToSave.set('data', data);
await projectToSave.save(null, { useMasterKey: true });
private detectRoleContextFromUrl(): 'customer-service' | 'designer' | 'team-leader' {
const url = this.router.url || '';
if (url.includes('/team-leader/')) return 'team-leader';
// ...
}
private checkApprovalStatus(): void {
const isTeamLeader = this.roleContext === 'team-leader';
const currentStage = this.project.currentStage;
const approvalStatus = this.project.data?.approvalStatus;
this.showApprovalPanel = isTeamLeader &&
currentStage === '订单分配' &&
approvalStatus === 'pending';
}
新建文件:
- src/app/shared/components/order-approval-panel/
- order-approval-panel.component.ts
- order-approval-panel.component.html
- order-approval-panel.component.scss
修改文件:
- src/app/pages/designer/project-detail/project-detail.ts
- src/app/pages/designer/project-detail/project-detail.html
- src/modules/project/pages/project-detail/stages/stage-order.component.ts
- src/modules/project/pages/project-detail/stages/stage-order.component.html
- src/modules/project/pages/project-detail/stages/stage-order.component.scss
- src/app/pages/team-leader/dashboard/dashboard.ts
- src/app/pages/team-leader/dashboard/dashboard.html
- src/app/pages/team-leader/dashboard/dashboard.scss
无需迁移 - 使用现有Project表的data字段存储审批数据
本次实施完成了完整的组长端订单审批功能,实现了:
所有功能已测试通过,可以正式投入使用!🚀
实施人员: Claude
实施日期: 2025-10-28
文档版本: v1.0.0