⚠️
{{ overdueProjects.length }}
已延期项目
{{ dueSoonProjects.length }}
临期项目(3天内)
📋
{{ pendingApprovalProjects.length }}
待组长确认项目
🎯
{{ pendingAssignmentProjects.length }}
待分配方案项目
🔥
{{ overloadedDesignersCount }}
超负荷设计师
📊
{{ averageWorkloadRate.toFixed(0) }}%
平均负载率

项目监控大盘

@if (selectedStatus !== 'all') { }

工作量负载概览

设计师每日工作状态一目了然

空闲 忙碌 超负荷 请假
@if (showGanttView) { } @if (!showGanttView) {
@for (core of corePhases; track core.id) {

{{ core.name }}

{{ getProjectCountByCorePhase(core.id) }}
}
@for (core of corePhases; track core.id) {
@for (project of getProjectsByCorePhase(core.id); track project.id) {
@if (isPendingApproval(project)) {
📋 待审批
}

{{ project.name }}

{{ project.memberType === 'vip' ? 'VIP' : '普通' }} {{ getUrgencyLabel(project.urgency) }}

负责人: {{ project.designerName || '未分配' }}

{{ project.isOverdue ? '超期' + project.overdueDays + '天' : (project.dueSoon ? '临期: ' + (project.deadline | date:'MM-dd') : '截止: ' + (project.deadline | date:'MM-dd')) }}

} @if (getProjectsByCorePhase(core.id).length === 0) {
📦

暂无项目

}
}
}

待办事项

待办问题 @if (todoTasksFromIssues.length > 0) { ({{ todoTasksFromIssues.length }}) }

来自项目问题板块
@if (loadingTodoTasks) {

加载待办任务中...

} @if (!loadingTodoTasks && todoTaskError) {

{{ todoTaskError }}

} @if (!loadingTodoTasks && !todoTaskError && todoTasksFromIssues.length === 0) {

暂无待办任务

所有项目问题都已处理完毕 🎉

} @if (!loadingTodoTasks && !todoTaskError && todoTasksFromIssues.length > 0) {
@for (task of todoTasksFromIssues; track task.id) {
{{ task.title }}
{{ getPriorityConfig(task.priority).label }} {{ getIssueTypeLabel(task.type) }}
项目: {{ task.projectName }} @if (task.relatedSpace) { | {{ task.relatedSpace }} } @if (task.relatedStage) { | {{ task.relatedStage }} }
}
}

紧急事件 @if (urgentEvents.length > 0) { ({{ urgentEvents.length }}) }

自动计算的截止事件
@if (!loadingUrgentEvents && urgentEvents.length > 0) {
} @if (loadingUrgentEvents) {

计算紧急事件中...

} @if (!loadingUrgentEvents && urgentEvents.length === 0) {

暂无紧急事件

所有项目时间节点正常 ✅

} @if (!loadingUrgentEvents && urgentEvents.length > 0 && filteredUrgentEvents.length === 0) {

该筛选条件下暂无事件

尝试切换其他标签

} @if (!loadingUrgentEvents && filteredUrgentEvents.length > 0) {
@for (event of filteredUrgentEvents; track event.id) {
{{ event.title }}
@if (event.urgencyLevel === 'critical') { 🔴 紧急 } @else if (event.urgencyLevel === 'high') { 🟠 重要 } @else { 🟡 注意 } @if (event.eventType === 'review') { 对图 } @else if (event.eventType === 'delivery') { 交付 } @else if (event.eventType === 'phase_deadline') { {{ event.phaseName }} }
{{ event.description }}
项目: {{ event.projectName }} @if (event.designerName) { 设计师: {{ event.designerName }} }
}
}
@if (showAlert && overdueProjects.length > 0) {

⚠️ 超期项目提醒

    @for (project of overdueProjects.slice(0, 3); track $index) {
  • {{ project.name }} ({{ project.designerName }} 负责) - 超期{{ project.overdueDays }}天
  • }
} @if (urgentPinnedProjects && urgentPinnedProjects.length > 0) {
紧急任务固定区(超期 + 高紧急)
@for (p of urgentPinnedProjects.slice(0, 3); track $index) {
{{ p.name }} {{ p.designerName || '未分配' }} · 超期{{ p.overdueDays }}天
} @if (urgentPinnedProjects.length > 3) { }
}
@if (showEmployeeDetailPanel && selectedEmployeeDetail) {

{{ selectedEmployeeDetail.name }} 详情

负载概况

当前负责项目数: {{ selectedEmployeeDetail.currentProjects }} 个
@if (selectedEmployeeDetail.projectData.length > 0) {
核心项目:
@for (project of selectedEmployeeDetail.projectData; track project.id) { {{ project.name }} } @if (selectedEmployeeDetail.currentProjects > selectedEmployeeDetail.projectData.length) { +{{ selectedEmployeeDetail.currentProjects - selectedEmployeeDetail.projectData.length }} }
}

负载详细日历

@if (selectedEmployeeDetail.calendarData) {
{{ selectedEmployeeDetail.calendarData.currentMonth | date:'yyyy年M月' }}
@for (day of selectedEmployeeDetail.calendarData.days; track day.date.getTime()) {
{{ day.date.getDate() }}
@if (day.projectCount > 0) {
{{ day.projectCount }}个项目
}
}
今天
有项目
高负载
}

请假明细(未来7天)

@if (selectedEmployeeDetail.leaveRecords.length > 0) { @for (record of selectedEmployeeDetail.leaveRecords; track record.id) { }
日期 状态 备注
{{ record.date | date:'M月d日' }} {{ record.isLeave ? '请假' : '正常' }} {{ record.isLeave ? getLeaveTypeText(record.leaveType) : '-' }}
} @else {

未来7天无请假安排

}

红色标记说明

{{ selectedEmployeeDetail.redMarkExplanation }}

能力问卷

@if (selectedEmployeeDetail.surveyCompleted && selectedEmployeeDetail.surveyData) {
已完成问卷 {{ selectedEmployeeDetail.surveyData.createdAt | date:'yyyy-MM-dd HH:mm' }}
@if (!showFullSurvey) {
您的能力画像
@if (getCapabilitySummary(selectedEmployeeDetail.surveyData.answers); as summary) {
擅长风格: {{ summary.styles }}
擅长空间: {{ summary.spaces }}
技术优势: {{ summary.advantages }}
项目难度: {{ summary.difficulty }}
周承接量: {{ summary.capacity }}
紧急订单: {{ summary.urgent }} @if (summary.urgentLimit) { (每月不超过{{summary.urgentLimit}}次) }
进度同步: {{ summary.feedback }}
沟通方式: {{ summary.communication }}
}
} @if (showFullSurvey) {
完整问卷答案(共 {{ selectedEmployeeDetail.surveyData.answers.length }} 道题):
@for (answer of selectedEmployeeDetail.surveyData.answers; track $index) {
Q{{$index + 1}}: {{ answer.question }}
@if (!answer.answer) { 未填写(选填) } @else if (answer.type === 'single' || answer.type === 'text' || answer.type === 'textarea' || answer.type === 'number') { {{ answer.answer }} } @else if (answer.type === 'multiple') { @if (Array.isArray(answer.answer)) { @for (opt of answer.answer; track opt) { {{ opt }} } } @else { {{ answer.answer }} } } @else if (answer.type === 'scale') {
{{ answer.answer }} / 10
} @else { {{ answer.answer }} }
}
}
} @else {

该员工尚未完成能力问卷

}
} @if (showCalendarProjectList) {
} --> @if (showSmartMatch) {
}