2025-11-21
将组长端 dashboard.ts 中的大量代码拆分为独立的子组件,提高代码可维护性和可复用性。
| 组件 | 文件路径 | 职责 |
|---|---|---|
DashboardMetricsComponent |
src/app/pages/team-leader/dashboard/components/dashboard-metrics/ |
显示统计指标卡片(6个核心指标) |
DashboardFilterBarComponent |
src/app/pages/team-leader/dashboard/components/dashboard-filter-bar/ |
处理所有筛选条件(搜索、类型、紧急程度、状态等) |
ProjectKanbanComponent |
src/app/pages/team-leader/dashboard/components/project-kanban/ |
显示项目看板(按四大板块分类) |
WorkloadGanttComponent |
src/app/pages/team-leader/dashboard/components/workload-gantt/ |
显示设计师工作负载甘特图(ECharts) |
TodoSectionComponent |
src/app/pages/team-leader/dashboard/components/todo-section/ |
显示待办任务和紧急事件(双栏布局) |
DashboardAlertsComponent |
src/app/pages/team-leader/dashboard/components/dashboard-alerts/ |
显示超期项目提醒和紧急固定区 |
SmartMatchModalComponent |
src/app/pages/team-leader/dashboard/components/smart-match-modal/ |
显示智能推荐设计师弹窗 |
重构前:
dashboard.ts: ~1,895 行dashboard.html: ~1,186 行(包含大量重复和废弃代码)重构后:
dashboard.ts: ~1,330 行(减少 565 行,-30%)dashboard.html: ~149 行(减少 1,037 行,-87%)总计:
<!-- 冗长的统计指标HTML(~50行) -->
<!-- 复杂的筛选条件栏(~80行) -->
<!-- 巨大的项目看板(~70行) -->
<!-- 工作负载甘特图(~20行) -->
<!-- 待办任务双栏布局(~390行) -->
<!-- 超期提醒和固定区(~40行) -->
<!-- 智能推荐弹窗(~57行) -->
<!-- 废弃的员工详情面板代码(~410行,已注释) -->
<app-dashboard-metrics
[overdueCount]="overdueProjects.length"
[dueSoonCount]="dueSoonProjects.length"
...>
</app-dashboard-metrics>
<app-dashboard-filter-bar
[projects]="projects"
[(searchTerm)]="searchTerm"
...>
</app-dashboard-filter-bar>
<app-project-kanban
[corePhases]="corePhases"
[projects]="filteredProjects"
...>
</app-project-kanban>
<!-- 其他组件... -->
overdueProjects, dueSoonProjects 等)// 示例:TodoSectionComponent
@Input() todoTasksFromIssues: TodoTaskFromIssue[] = [];
@Input() urgentEvents: UrgentEvent[] = [];
@Input() loadingTodoTasks: boolean = false;
// 示例:TodoSectionComponent
@Output() refresh = new EventEmitter<void>();
@Output() navigateToIssue = new EventEmitter<TodoTaskFromIssue>();
@Output() confirmEventOnTime = new EventEmitter<UrgentEvent>();
ngOnChanges、ngAfterViewInit、ngOnDestroy 生命周期钩子[(searchTerm)]等)precalculateTagCaches、updateFilteredUrgentEvents、filteredUrgentEventsList 不存在的错误selectedEmployeeDetail、changeEmployeeCalendarMonth、onCalendarDayClick、refreshEmployeeSurvey 方法ProjectKanbanComponent 使用 ChangeDetectionStrategy.OnPushstandalone: true,减少了模块依赖WorkloadGanttComponent 正确实现了 ngOnDestroy,释放ECharts实例@Input 和 @Output 明确定义组件APIDashboardMetricsComponent:可在其他仪表板使用DashboardFilterBarComponent:可应用到其他列表页SmartMatchModalComponent:可在其他需要推荐的场景使用EmployeeDetailPanelComponent 也进行进一步拆分本次重构成功地将一个 1,895 行的巨型组件拆分为 7 个职责清晰的子组件:
这为未来的功能扩展和维护奠定了良好的基础!🎉