feat: 新增 ReportPreviewData 接口和 ready 状态类型
This commit is contained in:
parent
6a6d0f309d
commit
80d81836a1
|
|
@ -1,7 +1,7 @@
|
||||||
// 报告基础类型
|
// 报告基础类型
|
||||||
export type ReportType = 'weekly' | 'monthly'
|
export type ReportType = 'weekly' | 'monthly'
|
||||||
export type ReportFormat = 'pdf' | 'docx'
|
export type ReportFormat = 'pdf' | 'docx'
|
||||||
export type ReportStatus = 'pending' | 'generating' | 'completed' | 'failed'
|
export type ReportStatus = 'pending' | 'ready' | 'generating' | 'completed' | 'failed'
|
||||||
|
|
||||||
export interface ReportCreateInput {
|
export interface ReportCreateInput {
|
||||||
report_type: ReportType
|
report_type: ReportType
|
||||||
|
|
@ -39,6 +39,7 @@ export interface ClassifiedTicket {
|
||||||
close_time: string
|
close_time: string
|
||||||
duration_minutes: number
|
duration_minutes: number
|
||||||
availability: number | null
|
availability: number | null
|
||||||
|
isOngoing?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第一章:每日在线节点统计
|
// 第一章:每日在线节点统计
|
||||||
|
|
@ -54,7 +55,8 @@ export interface DailyOnlineStats {
|
||||||
export interface Chapter2FaultItem {
|
export interface Chapter2FaultItem {
|
||||||
ip: string
|
ip: string
|
||||||
fault_subcategory: string
|
fault_subcategory: string
|
||||||
recoveryDays: number // 0=当日, 1=次日, ≥2=N日后
|
recoveryDays: number // 0=当日, 1=次日, ≥2=N日后(仅已结单有效,进行中时为 0)
|
||||||
|
isOngoing?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Chapter2Entry {
|
export interface Chapter2Entry {
|
||||||
|
|
@ -72,6 +74,7 @@ export interface Chapter3FaultEntry {
|
||||||
faultCause: string // "更换" + parts_replaced 或 "-"
|
faultCause: string // "更换" + parts_replaced 或 "-"
|
||||||
durationMinutes: number
|
durationMinutes: number
|
||||||
countedInSla: '是' | '否'
|
countedInSla: '是' | '否'
|
||||||
|
isOngoing?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第三章:其他工单表行(7列,表头不同)
|
// 第三章:其他工单表行(7列,表头不同)
|
||||||
|
|
@ -83,6 +86,7 @@ export interface Chapter3OtherEntry {
|
||||||
ticketConclusion: string // conclusion
|
ticketConclusion: string // conclusion
|
||||||
durationMinutes: number
|
durationMinutes: number
|
||||||
countedInSla: '是' | '否'
|
countedInSla: '是' | '否'
|
||||||
|
isOngoing?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第四章:每IP服务可用性
|
// 第四章:每IP服务可用性
|
||||||
|
|
@ -91,6 +95,7 @@ export interface Chapter4Entry {
|
||||||
totalDurationMinutes: number
|
totalDurationMinutes: number
|
||||||
monthDays: number
|
monthDays: number
|
||||||
availabilityPercent: number // e.g. 97.28
|
availabilityPercent: number // e.g. 97.28
|
||||||
|
hasOngoing?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
// 月报顶层聚合数据
|
// 月报顶层聚合数据
|
||||||
|
|
@ -125,6 +130,38 @@ export interface MonthlyReportPreview {
|
||||||
avgAvailability: number | null
|
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 {
|
export interface WeeklyDailyStats {
|
||||||
|
|
@ -157,6 +194,7 @@ export interface WeeklyTicketEntry {
|
||||||
currentStatus: string // 'resolved' | 'closed' | 'in_progress' | 'open'
|
currentStatus: string // 'resolved' | 'closed' | 'in_progress' | 'open'
|
||||||
isResolved: boolean
|
isResolved: boolean
|
||||||
steps: TicketStepRaw[]
|
steps: TicketStepRaw[]
|
||||||
|
availability: number | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface WeeklyReportData {
|
export interface WeeklyReportData {
|
||||||
|
|
@ -175,3 +213,17 @@ export interface WeeklyReportData {
|
||||||
resolvedCount: number
|
resolvedCount: number
|
||||||
pendingCount: 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
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue