diff --git a/src/types/report.ts b/src/types/report.ts index 03789c7..f2bc79e 100644 --- a/src/types/report.ts +++ b/src/types/report.ts @@ -1,7 +1,7 @@ // 报告基础类型 export type ReportType = 'weekly' | 'monthly' export type ReportFormat = 'pdf' | 'docx' -export type ReportStatus = 'pending' | 'generating' | 'completed' | 'failed' +export type ReportStatus = 'pending' | 'ready' | 'generating' | 'completed' | 'failed' export interface ReportCreateInput { report_type: ReportType @@ -39,6 +39,7 @@ export interface ClassifiedTicket { close_time: string duration_minutes: number availability: number | null + isOngoing?: boolean } // 第一章:每日在线节点统计 @@ -54,7 +55,8 @@ export interface DailyOnlineStats { export interface Chapter2FaultItem { ip: string fault_subcategory: string - recoveryDays: number // 0=当日, 1=次日, ≥2=N日后 + recoveryDays: number // 0=当日, 1=次日, ≥2=N日后(仅已结单有效,进行中时为 0) + isOngoing?: boolean } export interface Chapter2Entry { @@ -72,6 +74,7 @@ export interface Chapter3FaultEntry { faultCause: string // "更换" + parts_replaced 或 "-" durationMinutes: number countedInSla: '是' | '否' + isOngoing?: boolean } // 第三章:其他工单表行(7列,表头不同) @@ -83,6 +86,7 @@ export interface Chapter3OtherEntry { ticketConclusion: string // conclusion durationMinutes: number countedInSla: '是' | '否' + isOngoing?: boolean } // 第四章:每IP服务可用性 @@ -91,6 +95,7 @@ export interface Chapter4Entry { totalDurationMinutes: number monthDays: number availabilityPercent: number // e.g. 97.28 + hasOngoing?: boolean } // 月报顶层聚合数据 @@ -125,6 +130,38 @@ export interface MonthlyReportPreview { avgAvailability: number | null } +// 预览页完整 metadata 结构(新格式) +export interface ReportPreviewData { + // 原有字段 + gpuCount: number + storageCount: number + totalTickets: number + gpuFaultCount: number + storageFaultCount: number + otherTicketCount: number + avgAvailability: number + // 新增字段 + resolvedCount: number + avgDurationMinutes: number + ongoingCount: number + faultTicketCount: number + affectedDeviceCount: number + faultFreeDays: number | null // 周报为 null + availabilityDetails: AvailabilityDetail[] | null // 周报为 null + reportLabel: string + // 旧格式兼容 + summary?: { total_tickets: number; resolved_tickets: number; avg_duration: number; sla_rate: number } + categories?: Array<{ fault_category: string; count: number }> +} + +export interface AvailabilityDetail { + ip: string + deviceType: 'gpu' | 'storage' | 'other' + durationMinutes: number + availabilityPercent: number + isOngoing: boolean +} + // ===== 周报类型 ===== export interface WeeklyDailyStats { @@ -157,6 +194,7 @@ export interface WeeklyTicketEntry { currentStatus: string // 'resolved' | 'closed' | 'in_progress' | 'open' isResolved: boolean steps: TicketStepRaw[] + availability: number | null } export interface WeeklyReportData { @@ -175,3 +213,17 @@ export interface WeeklyReportData { resolvedCount: number pendingCount: number } + +// 自然周范围(用于月报嵌入周报) +export interface WeekRange { + index: number // 第几周 (1, 2, 3, ...) + start: string // "2026-04-01" + end: string // "2026-04-05" + label: string // "第1周(04/01-04/05)" +} + +// 周报附件(嵌入用) +export interface WeeklyAttachment { + label: string + buffer: Buffer +}