|
@@ -196,6 +196,52 @@ export class Dashboard implements OnInit {
|
|
|
}
|
|
|
];
|
|
|
|
|
|
+ // ===== 追加生成示例数据:保证总量达到100条 =====
|
|
|
+ const stageIds = this.projectStages.map(s => s.id);
|
|
|
+ const designers = ['张三','李四','王五','赵六','钱七','孙八','周九','吴十','郑一','冯二','陈三','褚四'];
|
|
|
+ const statusMap: Record<string, string> = {
|
|
|
+ pendingApproval: '待确认',
|
|
|
+ pendingAssignment: '待分配',
|
|
|
+ requirement: '进行中',
|
|
|
+ planning: '进行中',
|
|
|
+ modeling: '进行中',
|
|
|
+ rendering: '进行中',
|
|
|
+ postProduction: '进行中',
|
|
|
+ review: '进行中',
|
|
|
+ revision: '进行中',
|
|
|
+ delivery: '已完成'
|
|
|
+ };
|
|
|
+
|
|
|
+ for (let i = 8; i <= 100; i++) {
|
|
|
+ const stageIndex = (i - 1) % stageIds.length;
|
|
|
+ const currentStage = stageIds[stageIndex];
|
|
|
+ const type: 'soft' | 'hard' = i % 2 === 0 ? 'soft' : 'hard';
|
|
|
+ const urgency: 'high' | 'medium' | 'low' = i % 5 === 0 ? 'high' : (i % 3 === 0 ? 'medium' : 'low');
|
|
|
+ const isOverdue = ['planning','modeling','rendering','postProduction','review','revision','delivery'].includes(currentStage) ? i % 7 === 0 : false;
|
|
|
+ const overdueDays = isOverdue ? (i % 10) + 1 : 0;
|
|
|
+ const hasDesigner = !['pendingApproval', 'pendingAssignment'].includes(currentStage);
|
|
|
+ const designerName = hasDesigner ? designers[i % designers.length] : '';
|
|
|
+ const status = statusMap[currentStage] || '进行中';
|
|
|
+ const expectedEndDate = new Date();
|
|
|
+ const daysOffset = isOverdue ? - (overdueDays + (i % 5)) : ((i % 20) + 3);
|
|
|
+ expectedEndDate.setDate(expectedEndDate.getDate() + daysOffset);
|
|
|
+
|
|
|
+ this.projects.push({
|
|
|
+ id: `proj-${String(i).padStart(3, '0')}`,
|
|
|
+ name: `${type === 'soft' ? '软装' : '硬装'}示例项目 ${i}`,
|
|
|
+ type,
|
|
|
+ designerName,
|
|
|
+ status,
|
|
|
+ expectedEndDate,
|
|
|
+ isOverdue,
|
|
|
+ overdueDays,
|
|
|
+ urgency,
|
|
|
+ currentStage,
|
|
|
+ phases: []
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // ===== 示例数据生成结束 =====
|
|
|
+
|
|
|
// 筛选超期项目
|
|
|
this.overdueProjects = this.projects.filter(project => project.isOverdue);
|
|
|
this.filteredProjects = [...this.projects];
|