blob: 39b34bcdbc69ffd3922213767e2fcf50d2fde476 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
// types/evaluation-form.ts
export interface AttachmentInfo {
id: number
originalFileName: string
storedFileName: string
publicPath: string
fileSize: number
mimeType?: string
fileExtension?: string
description?: string
uploadedBy: number
uploadedByName?: string
createdAt: Date
updatedAt: Date
}
export interface EvaluationQuestionItem {
criteriaId: number
category: string
category2: string
item: string
classification: string
range: string
scoreType: 'fixed' | 'variable'
remarks: string | null
availableOptions: {
detailId: number
detail: string
score: number
orderIndex: number
}[]
// 현재 응답 정보
responseId: number | null
selectedDetailId: number | null
currentScore: string | null
currentComment: string | null
// 📎 첨부파일 정보 추가
attachments: AttachmentInfo[]
attachmentCount: number
attachmentTotalSize: number
}
export interface EvaluationFormData {
evaluationInfo: {
id: number
periodicEvaluationId: number
evaluationTargetReviewerId: number
isCompleted: boolean
departmentCode: string
division: string
materialType: string
vendorName: string
vendorCode: string
reviewerType: string
}
questions: EvaluationQuestionItem[]
// 📎 전체 첨부파일 통계
attachmentStats: {
totalFiles: number
totalSize: number
questionsWithAttachments: number
filesByCategory: Record<string, number>
}
}
// types/evaluation-detail.ts
export interface AttachmentDetail {
id: number
originalFileName: string
storedFileName: string
publicPath: string
fileSize: number
mimeType?: string
fileExtension?: string
description?: string
uploadedBy: number
uploadedByName?: string
createdAt: Date
}
export interface EvaluationDetailItem {
criteriaId: number
category: string
category2: string
item: string
classification: string
range?: string
remarks?: string
scoreType: string
selectedDetailId?: number | null
selectedDetail?: string | null
score: number | null
comment?: string | null
// 📎 첨부파일 정보 추가
attachments: AttachmentDetail[]
attachmentCount: number
attachmentTotalSize: number
}
export interface EvaluationDetailData {
reviewerEvaluationId: number
reviewerName: string
reviewerEmail: string
departmentCode: string
departmentName: string
isCompleted: boolean
completedAt?: Date | null
reviewerComment?: string | null
evaluationItems: EvaluationDetailItem[]
// 📎 리뷰어별 첨부파일 통계
totalAttachments: number
totalAttachmentSize: number
questionsWithAttachments: number
}
export interface EvaluationDetailResponse {
evaluationInfo: {
id: number
vendorName: string
vendorCode: string
evaluationYear: number
division: string
status: string
}
reviewerDetails: EvaluationDetailData[]
// 📎 전체 첨부파일 통계
attachmentStats: {
totalFiles: number
totalSize: number
reviewersWithAttachments: number
questionsWithAttachments: number
}
// 🔄 조선/해양 취합 정보 (동시 평가인 경우)
consolidatedInfo?: {
shipbuildingScore: number | null
shipbuildingGrade: string | null
offshoreScore: number | null
offshoreGrade: string | null
consolidatedScore: number | null // 50% 반영 취합 점수
consolidatedGrade: string | null // 취합 등급
}
}
|