import { Component, Input, Output, EventEmitter } from '@angular/core'; import { CommonModule } from '@angular/common'; /** * 紧急事件接口 */ export interface UrgentEvent { id: string; title: string; description: string; eventType: 'review' | 'delivery' | 'phase_deadline' | 'custom'; deadline: Date; projectId: string; projectName: string; designerName?: string; urgencyLevel: 'critical' | 'high' | 'medium'; overdueDays?: number; phaseName?: string; } /** * 紧急事件面板组件(可复用) * * 功能: * 1. 显示紧急事件列表 * 2. 支持加载状态、空状态、错误状态 * 3. 支持点击查看项目详情 * 4. 自动计算逾期天数 */ @Component({ selector: 'app-urgent-events-panel', standalone: true, imports: [CommonModule], template: `

{{ title }} @if (events.length > 0) { ({{ events.length }}) }

{{ subtitle }}
@if (loading) {

{{ loadingText }}

} @if (!loading && events.length === 0) {

{{ emptyText }}

{{ emptyHint }}

} @if (!loading && events.length > 0) {
@for (event of events; 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 }} } @else { {{ event.eventType }} }
{{ event.description }}
项目: {{ event.projectName }} @if (event.designerName) { 设计师: {{ event.designerName }} }
}
}
`, styles: [` /* 组件样式继承父组件的样式类 */ :host { display: block; width: 100%; height: 100%; } `] }) export class UrgentEventsPanelComponent { // 输入属性 @Input() events: UrgentEvent[] = []; @Input() loading: boolean = false; @Input() title: string = '紧急事件'; @Input() subtitle: string = '自动计算的截止事件'; @Input() loadingText: string = '计算紧急事件中...'; @Input() emptyText: string = '暂无紧急事件'; @Input() emptyHint: string = '所有项目时间节点正常 ✅'; // 输出事件 @Output() viewProject = new EventEmitter(); /** * 查看项目详情 */ onViewProject(projectId: string): void { this.viewProject.emit(projectId); } }