import { IssueStatus, IssuePriority, IssueType } from '../../../../modules/project/services/project-issue.service'; export interface ProjectStage { id: string; name: string; order: number; } export interface ProjectPhase { name: string; percentage: number; startPercentage: number; isCompleted: boolean; isCurrent: boolean; } export interface Project { id: string; name: string; type: 'soft' | 'hard'; memberType: 'vip' | 'normal'; designerName: string; status: string; expectedEndDate: Date; deadline: Date; createdAt?: Date; isOverdue: boolean; overdueDays: number; dueSoon: boolean; urgency: 'high' | 'medium' | 'low'; phases: ProjectPhase[]; currentStage: string; qualityRating?: 'excellent' | 'qualified' | 'unqualified' | 'pending'; lastCustomerFeedback?: string; searchIndex?: string; // 可选扩展字段 contact?: any; customer?: string; designerId?: string; space?: string; demoday?: Date; updatedAt?: Date | string; data?: any; } export interface TodoTask { id: string; title: string; description: string; deadline: Date; priority: 'high' | 'medium' | 'low'; type: 'review' | 'assign' | 'performance'; targetId: string; } export interface TodoTaskFromIssue { id: string; title: string; description?: string; priority: IssuePriority; type: IssueType; status: IssueStatus; projectId: string; projectName: string; relatedSpace?: string; relatedStage?: string; assigneeName?: string; creatorName?: string; createdAt: Date; updatedAt: Date; dueDate?: Date; tags?: string[]; } export interface UrgentEvent { id: string; title: string; description: string; eventType: 'review' | 'delivery' | 'phase_deadline' | 'customer_alert'; phaseName?: string; deadline: Date; projectId: string; projectName: string; designerName?: string; urgencyLevel: 'critical' | 'high' | 'medium'; overdueDays?: number; completionRate?: number; category?: 'customer' | 'phase' | 'review' | 'delivery'; statusType?: 'dueSoon' | 'overdue' | 'stagnant'; followUpNeeded?: boolean; allowConfirmOnTime?: boolean; allowMarkHandled?: boolean; allowCreateTodo?: boolean; stagnationDays?: number; customerIssueType?: 'feedback_pending' | 'complaint' | 'idle'; labels?: string[]; isMuted?: boolean; } export interface LeaveRecord { id: string; employeeName: string; date: string; isLeave: boolean; leaveType?: 'sick' | 'personal' | 'annual' | 'other'; reason?: string; } export interface EmployeeDetail { name: string; currentProjects: number; projectNames: string[]; projectData: Array<{ id: string; name: string }>; leaveRecords: LeaveRecord[]; redMarkExplanation: string; calendarData?: EmployeeCalendarData; surveyCompleted?: boolean; surveyData?: any; profileId?: string; } export interface EmployeeCalendarData { currentMonth: Date; days: EmployeeCalendarDay[]; } export interface EmployeeCalendarDay { date: Date; projectCount: number; projects: Array<{ id: string; name: string; deadline?: Date }>; isToday: boolean; isCurrentMonth: boolean; }