@dssp/supervision 1.0.0-alpha.24 → 1.0.0-alpha.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist-client/graphql/building-inspection.js +28 -0
  2. package/dist-client/graphql/building-inspection.js.map +1 -1
  3. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +9 -0
  4. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +114 -4
  5. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -1
  6. package/dist-client/pages/building-inspection/building-inspection-list.d.ts +6 -0
  7. package/dist-client/pages/building-inspection/building-inspection-list.js +47 -8
  8. package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -1
  9. package/dist-client/pages/building-inspection/component/image-preview-popup.d.ts +15 -0
  10. package/dist-client/pages/building-inspection/component/image-preview-popup.js +351 -0
  11. package/dist-client/pages/building-inspection/component/image-preview-popup.js.map +1 -0
  12. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +20 -0
  13. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js +436 -0
  14. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js.map +1 -0
  15. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +27 -0
  16. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js +453 -0
  17. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js.map +1 -0
  18. package/dist-client/pages/building-inspection/component/inspection-document/name-list-upload-popup.d.ts +21 -0
  19. package/dist-client/pages/building-inspection/component/inspection-document/name-list-upload-popup.js +327 -0
  20. package/dist-client/pages/building-inspection/component/inspection-document/name-list-upload-popup.js.map +1 -0
  21. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.d.ts +27 -0
  22. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js +401 -0
  23. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js.map +1 -0
  24. package/dist-client/pages/building-inspection/component/photo-album-popup.d.ts +41 -0
  25. package/dist-client/pages/building-inspection/component/photo-album-popup.js +406 -0
  26. package/dist-client/pages/building-inspection/component/photo-album-popup.js.map +1 -0
  27. package/dist-client/pages/building-inspection/inspection-create-popup.js +17 -5
  28. package/dist-client/pages/building-inspection/inspection-create-popup.js.map +1 -1
  29. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +1 -0
  30. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js +47 -3
  31. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js.map +1 -1
  32. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js +8 -2
  33. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js.map +1 -1
  34. package/dist-client/pages/checklist/attachment-list-popup.d.ts +1 -0
  35. package/dist-client/pages/checklist/attachment-list-popup.js +244 -68
  36. package/dist-client/pages/checklist/attachment-list-popup.js.map +1 -1
  37. package/dist-client/pages/checklist/checklist-view.d.ts +5 -0
  38. package/dist-client/pages/checklist/checklist-view.js +64 -14
  39. package/dist-client/pages/checklist/checklist-view.js.map +1 -1
  40. package/dist-client/pages/checklist/file-preview-popup.js +0 -1
  41. package/dist-client/pages/checklist/file-preview-popup.js.map +1 -1
  42. package/dist-client/pages/checklist/inspection-tab-popup.js +3 -1
  43. package/dist-client/pages/checklist/inspection-tab-popup.js.map +1 -1
  44. package/dist-client/pages/checklist-template/checklist-template-list.js +1 -1
  45. package/dist-client/pages/checklist-template/checklist-template-list.js.map +1 -1
  46. package/dist-client/route.d.ts +1 -1
  47. package/dist-client/tsconfig.tsbuildinfo +1 -1
  48. package/dist-server/service/building-inspection/building-inspection-history.d.ts +1 -0
  49. package/dist-server/service/building-inspection/building-inspection-history.js +5 -0
  50. package/dist-server/service/building-inspection/building-inspection-history.js.map +1 -1
  51. package/dist-server/service/building-inspection/building-inspection-mutation.js +48 -21
  52. package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -1
  53. package/dist-server/service/building-inspection/building-inspection-type.d.ts +6 -0
  54. package/dist-server/service/building-inspection/building-inspection-type.js +21 -0
  55. package/dist-server/service/building-inspection/building-inspection-type.js.map +1 -1
  56. package/dist-server/service/building-inspection/building-inspection.js +1 -1
  57. package/dist-server/service/building-inspection/building-inspection.js.map +1 -1
  58. package/dist-server/service/building-inspection/index.d.ts +1 -1
  59. package/dist-server/service/checklist/checklist-query.d.ts +6 -0
  60. package/dist-server/service/checklist/checklist-query.js +63 -0
  61. package/dist-server/service/checklist/checklist-query.js.map +1 -1
  62. package/dist-server/service/checklist/checklist.d.ts +20 -0
  63. package/dist-server/service/checklist/checklist.js +62 -1
  64. package/dist-server/service/checklist/checklist.js.map +1 -1
  65. package/dist-server/service/checklist-item/checklist-item-query.d.ts +1 -1
  66. package/dist-server/service/checklist-item/checklist-item-query.js +5 -3
  67. package/dist-server/service/checklist-item/checklist-item-query.js.map +1 -1
  68. package/dist-server/service/index.d.ts +1 -1
  69. package/dist-server/tsconfig.tsbuildinfo +1 -1
  70. package/package.json +2 -2
@@ -0,0 +1,453 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/button/elevated-button.js';
3
+ import '@material/web/icon/icon.js';
4
+ import '@material/web/radio/radio.js';
5
+ import '@material/web/textfield/outlined-text-field.js';
6
+ import { css, html, LitElement } from 'lit';
7
+ import { customElement, property } from 'lit/decorators.js';
8
+ import { ScrollbarStyles } from '@operato/styles';
9
+ export var InspectionResultStatus;
10
+ (function (InspectionResultStatus) {
11
+ InspectionResultStatus["PASS"] = "PASS";
12
+ InspectionResultStatus["FAIL"] = "FAIL"; // 불합격
13
+ })(InspectionResultStatus || (InspectionResultStatus = {}));
14
+ export var InspectionResultType;
15
+ (function (InspectionResultType) {
16
+ InspectionResultType["GENERAL"] = "GENERAL";
17
+ InspectionResultType["FOCUS"] = "FOCUS";
18
+ InspectionResultType["CONCEALED_WORK"] = "CONCEALED_WORK"; // 매몰부위
19
+ })(InspectionResultType || (InspectionResultType = {}));
20
+ let InspectionResultNotification = class InspectionResultNotification extends LitElement {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.checklist = {};
24
+ this.buildingInspection = {};
25
+ this.project = {};
26
+ }
27
+ render() {
28
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
29
+ const today = this._formatDate(new Date());
30
+ return html `
31
+ <div class="document-container">
32
+ <div class="document-header">
33
+ <div class="document-title">검측결과통보</div>
34
+ </div>
35
+
36
+ <div class="document-body">
37
+ <div class="date-section">${today}</div>
38
+
39
+ <div class="recipient-section">
40
+ <div class="recipient-item">
41
+ <span class="recipient-label">문서 번호:</span>
42
+ <span>${((_a = this.checklist) === null || _a === void 0 ? void 0 : _a.inspectionResultDocumentNo) || ''}</span>
43
+ </div>
44
+ <div class="recipient-item">
45
+ <span class="recipient-label">수신:</span>
46
+ <span>${(_e = (_d = (_c = (_b = this.buildingInspection) === null || _b === void 0 ? void 0 : _b.buildingLevel) === null || _c === void 0 ? void 0 : _c.building) === null || _d === void 0 ? void 0 : _d.buildingComplex) === null || _e === void 0 ? void 0 : _e.constructionCompany}</span>
47
+ </div>
48
+ </div>
49
+
50
+ <div class="content-section">
51
+ 문서번호 ${((_f = this.checklist) === null || _f === void 0 ? void 0 : _f.inspectionRequestDocumentNo) || ''} 검측 요청한 건에 대하여
52
+ ${this._formatDate(new Date((_g = this.buildingInspection) === null || _g === void 0 ? void 0 : _g.requestDate))} 검측한 결과를 다음과 같이 통보합니다.
53
+ </div>
54
+
55
+ <table class="request-table">
56
+ <tr>
57
+ <th>검측 결과</th>
58
+ <td>
59
+ <div class="radio-group">
60
+ <div class="radio-item">
61
+ <md-radio
62
+ name="inspectionResultStatus"
63
+ value="PASS"
64
+ ?checked=${this._getOverallResult() === InspectionResultStatus.PASS}
65
+ disabled
66
+ ></md-radio>
67
+ <span>합격</span>
68
+ </div>
69
+ <div class="radio-item">
70
+ <md-radio
71
+ name="inspectionResultStatus"
72
+ value="FAIL"
73
+ ?checked=${this._getOverallResult() === InspectionResultStatus.FAIL}
74
+ disabled
75
+ ></md-radio>
76
+ <span>불합격</span>
77
+ </div>
78
+ </div>
79
+ </td>
80
+ </tr>
81
+ <tr>
82
+ <th>검측 종류</th>
83
+ <td>
84
+ <div class="radio-group">
85
+ <div class="radio-item">
86
+ <md-radio
87
+ name="inspectionResultType"
88
+ value="GENERAL"
89
+ ?checked=${((_h = this.checklist) === null || _h === void 0 ? void 0 : _h.inspectionResultType) === InspectionResultType.GENERAL}
90
+ @change=${this._onInspectionTypeChange}
91
+ ></md-radio>
92
+ <span>일반</span>
93
+ </div>
94
+ <div class="radio-item">
95
+ <md-radio
96
+ name="inspectionResultType"
97
+ value="FOCUS"
98
+ ?checked=${((_j = this.checklist) === null || _j === void 0 ? void 0 : _j.inspectionResultType) === InspectionResultType.FOCUS}
99
+ @change=${this._onInspectionTypeChange}
100
+ ></md-radio>
101
+ <span>중점</span>
102
+ </div>
103
+ <div class="radio-item">
104
+ <md-radio
105
+ name="inspectionResultType"
106
+ value="CONCEALED_WORK"
107
+ ?checked=${((_k = this.checklist) === null || _k === void 0 ? void 0 : _k.inspectionResultType) === InspectionResultType.CONCEALED_WORK}
108
+ @change=${this._onInspectionTypeChange}
109
+ ></md-radio>
110
+ <span>매몰부위</span>
111
+ </div>
112
+ </div>
113
+ </td>
114
+ </tr>
115
+ <tr>
116
+ <th>지시 사항</th>
117
+ <td>
118
+ <input
119
+ type="text"
120
+ class="instructions-field"
121
+ .value=${((_l = this.checklist) === null || _l === void 0 ? void 0 : _l.inspectionResultMemo) || ''}
122
+ @input=${this._onInstructionsChange}
123
+ placeholder="지시 사항을 입력하세요."
124
+ />
125
+ </td>
126
+ </tr>
127
+ </table>
128
+
129
+ <div class="document-footer">
130
+ <div class="attachment-section">
131
+ <div class="attachment-title">첨부 파일</div>
132
+ <div class="attachment-list">
133
+ <div class="attachment-item">시공자의 검측 체크리스트</div>
134
+ ${this._getAttachmentCount() > 0
135
+ ? html `<div class="attachment-item">첨부 사진 ${this._getAttachmentCount()}개</div>`
136
+ : ''}
137
+ </div>
138
+ </div>
139
+
140
+ <div class="signature-section">
141
+ <div class="signature-box">
142
+ <div class="signature-title">공종별 감리 책임자</div>
143
+ <div class="signature-name">${(_o = (_m = this.checklist) === null || _m === void 0 ? void 0 : _m.taskSupervisory) === null || _o === void 0 ? void 0 : _o.name}</div>
144
+ <div class="signature-container">
145
+ ${((_p = this.checklist) === null || _p === void 0 ? void 0 : _p.taskSupervisorySignature)
146
+ ? html `<img class="signature-image" src="${this.checklist.taskSupervisorySignature}" alt="서명" />`
147
+ : ''}
148
+ </div>
149
+ </div>
150
+ <div class="signature-box">
151
+ <div class="signature-title">총괄 감리 책임자</div>
152
+ <div class="signature-name">${(_r = (_q = this.checklist) === null || _q === void 0 ? void 0 : _q.overallSupervisory) === null || _r === void 0 ? void 0 : _r.name}</div>
153
+ <div class="signature-container">
154
+ ${((_s = this.checklist) === null || _s === void 0 ? void 0 : _s.overallSupervisorySignature)
155
+ ? html `<img class="signature-image" src="${this.checklist.overallSupervisorySignature}" alt="서명" />`
156
+ : ''}
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </div>
162
+ </div>
163
+
164
+ <div class="button-container">
165
+ <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>
166
+ </div>
167
+ `;
168
+ }
169
+ _formatDate(date) {
170
+ return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}.`;
171
+ }
172
+ _getAttachmentCount() {
173
+ var _a, _b, _c;
174
+ return (((_c = (_b = (_a = this.buildingInspection) === null || _a === void 0 ? void 0 : _a.checklist) === null || _b === void 0 ? void 0 : _b.checklistItems) === null || _c === void 0 ? void 0 : _c.reduce((acc, item) => {
175
+ return acc + item.checklistItemAttachmentCount;
176
+ }, 0)) || 0);
177
+ }
178
+ _getOverallResult() {
179
+ var _a, _b;
180
+ const hasFailedItems = (_b = (_a = this.checklist) === null || _a === void 0 ? void 0 : _a.checklistItems) === null || _b === void 0 ? void 0 : _b.some(item => item.supervisoryConfirmStatus === 'F');
181
+ return hasFailedItems ? InspectionResultStatus.FAIL : InspectionResultStatus.PASS;
182
+ }
183
+ _onInspectionTypeChange(e) {
184
+ const target = e.target;
185
+ this.checklist = Object.assign(Object.assign({}, this.checklist), { inspectionResultType: target.value });
186
+ this.requestUpdate();
187
+ this.dispatchEvent(new CustomEvent('inspection-type-change', {
188
+ detail: { inspectionResultType: target.value },
189
+ bubbles: true
190
+ }));
191
+ }
192
+ _onInstructionsChange(e) {
193
+ const target = e.target;
194
+ this.checklist = Object.assign(Object.assign({}, this.checklist), { inspectionResultMemo: target.value });
195
+ this.requestUpdate();
196
+ this.dispatchEvent(new CustomEvent('instructions-change', {
197
+ detail: { inspectionResultMemo: target.value },
198
+ bubbles: true
199
+ }));
200
+ }
201
+ _onConfirm() {
202
+ this.dispatchEvent(new CustomEvent('popup-close', { bubbles: true }));
203
+ }
204
+ };
205
+ InspectionResultNotification.styles = [
206
+ ScrollbarStyles,
207
+ css `
208
+ :host {
209
+ display: block;
210
+ padding: 20px;
211
+ font-family: 'Noto Sans KR', sans-serif;
212
+ line-height: 1.4;
213
+ overflow-y: auto;
214
+ }
215
+
216
+ .document-container {
217
+ max-width: 800px;
218
+ margin: 0 auto;
219
+ background: white;
220
+ border: 2px solid #333;
221
+ }
222
+
223
+ .document-header {
224
+ text-align: center;
225
+ padding: 15px;
226
+ border-bottom: 1px solid #333;
227
+ }
228
+
229
+ .document-title {
230
+ font-size: 18px;
231
+ font-weight: bold;
232
+ margin-bottom: 10px;
233
+ }
234
+
235
+ .document-body {
236
+ padding: 20px;
237
+ }
238
+
239
+ .date-section {
240
+ text-align: right;
241
+ margin-bottom: 20px;
242
+ font-size: 14px;
243
+ }
244
+
245
+ .recipient-section {
246
+ margin-bottom: 30px;
247
+ }
248
+
249
+ .recipient-item {
250
+ display: flex;
251
+ margin-bottom: 5px;
252
+ }
253
+
254
+ .recipient-label {
255
+ font-weight: bold;
256
+ margin-right: 18px;
257
+ }
258
+
259
+ .content-section {
260
+ margin-bottom: 20px;
261
+ line-height: 1.6;
262
+ }
263
+
264
+ .request-table {
265
+ width: 100%;
266
+ border-collapse: collapse;
267
+ margin-bottom: 20px;
268
+ }
269
+
270
+ .request-table th,
271
+ .request-table td {
272
+ border: 1px solid #333;
273
+ padding: 8px;
274
+ text-align: left;
275
+ }
276
+
277
+ .request-table th {
278
+ background-color: #f5f5f5;
279
+ font-weight: bold;
280
+ width: 120px;
281
+ }
282
+
283
+ .radio-group {
284
+ display: flex;
285
+ gap: 20px;
286
+ align-items: center;
287
+ }
288
+
289
+ .radio-item {
290
+ display: flex;
291
+ align-items: center;
292
+ gap: 5px;
293
+ }
294
+
295
+ .signature-section {
296
+ display: flex;
297
+ flex-direction: column;
298
+ align-items: flex-end;
299
+ gap: 15px;
300
+ }
301
+
302
+ .signature-box {
303
+ display: flex;
304
+ align-items: center;
305
+ gap: 15px;
306
+ text-align: right;
307
+ }
308
+
309
+ .signature-title {
310
+ font-size: 14px;
311
+ font-weight: bold;
312
+ color: #333;
313
+ min-width: 120px;
314
+ }
315
+
316
+ .signature-name {
317
+ font-size: 14px;
318
+ color: #333;
319
+ }
320
+
321
+ .signature-container {
322
+ position: relative;
323
+ min-width: 100px;
324
+ min-height: 60px;
325
+ display: flex;
326
+ align-items: center;
327
+ justify-content: center;
328
+ }
329
+
330
+ .signature-container::after {
331
+ content: '(인)';
332
+ position: absolute;
333
+ bottom: 5px;
334
+ right: 5px;
335
+ font-size: 12px;
336
+ color: #333;
337
+ font-weight: bold;
338
+ z-index: 2;
339
+ }
340
+
341
+ .signature-image {
342
+ max-width: 140px;
343
+ max-height: 60px;
344
+ width: auto;
345
+ height: auto;
346
+ }
347
+
348
+ .attachment-section {
349
+ margin-top: 30px;
350
+ margin-bottom: 30px;
351
+ }
352
+
353
+ .attachment-title {
354
+ font-weight: bold;
355
+ font-size: 14px;
356
+ color: #333;
357
+ margin-bottom: 10px;
358
+ display: flex;
359
+ align-items: center;
360
+ gap: 8px;
361
+ }
362
+
363
+ .attachment-list {
364
+ margin-left: 30px;
365
+ }
366
+
367
+ .attachment-item {
368
+ margin-bottom: 5px;
369
+ color: #2196f3;
370
+ font-size: 14px;
371
+ line-height: 1.5;
372
+ }
373
+
374
+ .instructions-field {
375
+ width: 100%;
376
+ max-width: -webkit-fill-available;
377
+ height: 40px;
378
+ border: 1px solid #ddd;
379
+ padding: 10px;
380
+ font-size: 15px;
381
+ border-radius: 5px;
382
+ }
383
+
384
+ .document-footer {
385
+ display: flex;
386
+ justify-content: space-between;
387
+ align-items: center;
388
+ }
389
+
390
+ .signature-container::after {
391
+ content: '(인)';
392
+ position: absolute;
393
+ bottom: 5px;
394
+ right: 5px;
395
+ font-size: 12px;
396
+ color: #333;
397
+ font-weight: bold;
398
+ z-index: 2;
399
+ }
400
+
401
+ .signature-line {
402
+ border-bottom: 1px solid #333;
403
+ height: 60px;
404
+ margin-bottom: 5px;
405
+ position: relative;
406
+ min-width: 100px;
407
+ }
408
+
409
+ .signature-label {
410
+ font-size: 12px;
411
+ }
412
+
413
+ .button-container {
414
+ display: flex;
415
+ justify-content: center;
416
+ margin-top: 20px;
417
+ padding: 15px 0;
418
+ border-top: 1px solid #ddd;
419
+ }
420
+
421
+ .button-container md-elevated-button {
422
+ background-color: #3498db;
423
+ color: white;
424
+ padding: 12px 30px;
425
+ font-size: 16px;
426
+ font-weight: bold;
427
+ border-radius: 8px;
428
+ }
429
+
430
+ .document-footer {
431
+ display: flex;
432
+ justify-content: space-between;
433
+ align-items: center;
434
+ }
435
+ `
436
+ ];
437
+ __decorate([
438
+ property({ type: Object }),
439
+ __metadata("design:type", Object)
440
+ ], InspectionResultNotification.prototype, "checklist", void 0);
441
+ __decorate([
442
+ property({ type: Object }),
443
+ __metadata("design:type", Object)
444
+ ], InspectionResultNotification.prototype, "buildingInspection", void 0);
445
+ __decorate([
446
+ property({ type: Object }),
447
+ __metadata("design:type", Object)
448
+ ], InspectionResultNotification.prototype, "project", void 0);
449
+ InspectionResultNotification = __decorate([
450
+ customElement('inspection-result-notification')
451
+ ], InspectionResultNotification);
452
+ export { InspectionResultNotification };
453
+ //# sourceMappingURL=inspection-result-notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection-result-notification.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/inspection-document/inspection-result-notification.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@material/web/icon/icon.js'\nimport '@material/web/radio/radio.js'\nimport '@material/web/textfield/outlined-text-field.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ScrollbarStyles } from '@operato/styles'\n\nexport enum InspectionResultStatus {\n PASS = 'PASS', // 합격\n FAIL = 'FAIL' // 불합격\n}\n\nexport enum InspectionResultType {\n GENERAL = 'GENERAL', // 일반\n FOCUS = 'FOCUS', // 중점\n CONCEALED_WORK = 'CONCEALED_WORK' // 매몰부위\n}\n\n@customElement('inspection-result-notification')\nexport class InspectionResultNotification extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: block;\n padding: 20px;\n font-family: 'Noto Sans KR', sans-serif;\n line-height: 1.4;\n overflow-y: auto;\n }\n\n .document-container {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 2px solid #333;\n }\n\n .document-header {\n text-align: center;\n padding: 15px;\n border-bottom: 1px solid #333;\n }\n\n .document-title {\n font-size: 18px;\n font-weight: bold;\n margin-bottom: 10px;\n }\n\n .document-body {\n padding: 20px;\n }\n\n .date-section {\n text-align: right;\n margin-bottom: 20px;\n font-size: 14px;\n }\n\n .recipient-section {\n margin-bottom: 30px;\n }\n\n .recipient-item {\n display: flex;\n margin-bottom: 5px;\n }\n\n .recipient-label {\n font-weight: bold;\n margin-right: 18px;\n }\n\n .content-section {\n margin-bottom: 20px;\n line-height: 1.6;\n }\n\n .request-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 20px;\n }\n\n .request-table th,\n .request-table td {\n border: 1px solid #333;\n padding: 8px;\n text-align: left;\n }\n\n .request-table th {\n background-color: #f5f5f5;\n font-weight: bold;\n width: 120px;\n }\n\n .radio-group {\n display: flex;\n gap: 20px;\n align-items: center;\n }\n\n .radio-item {\n display: flex;\n align-items: center;\n gap: 5px;\n }\n\n .signature-section {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 15px;\n }\n\n .signature-box {\n display: flex;\n align-items: center;\n gap: 15px;\n text-align: right;\n }\n\n .signature-title {\n font-size: 14px;\n font-weight: bold;\n color: #333;\n min-width: 120px;\n }\n\n .signature-name {\n font-size: 14px;\n color: #333;\n }\n\n .signature-container {\n position: relative;\n min-width: 100px;\n min-height: 60px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .signature-container::after {\n content: '(인)';\n position: absolute;\n bottom: 5px;\n right: 5px;\n font-size: 12px;\n color: #333;\n font-weight: bold;\n z-index: 2;\n }\n\n .signature-image {\n max-width: 140px;\n max-height: 60px;\n width: auto;\n height: auto;\n }\n\n .attachment-section {\n margin-top: 30px;\n margin-bottom: 30px;\n }\n\n .attachment-title {\n font-weight: bold;\n font-size: 14px;\n color: #333;\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .attachment-list {\n margin-left: 30px;\n }\n\n .attachment-item {\n margin-bottom: 5px;\n color: #2196f3;\n font-size: 14px;\n line-height: 1.5;\n }\n\n .instructions-field {\n width: 100%;\n max-width: -webkit-fill-available;\n height: 40px;\n border: 1px solid #ddd;\n padding: 10px;\n font-size: 15px;\n border-radius: 5px;\n }\n\n .document-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .signature-container::after {\n content: '(인)';\n position: absolute;\n bottom: 5px;\n right: 5px;\n font-size: 12px;\n color: #333;\n font-weight: bold;\n z-index: 2;\n }\n\n .signature-line {\n border-bottom: 1px solid #333;\n height: 60px;\n margin-bottom: 5px;\n position: relative;\n min-width: 100px;\n }\n\n .signature-label {\n font-size: 12px;\n }\n\n .button-container {\n display: flex;\n justify-content: center;\n margin-top: 20px;\n padding: 15px 0;\n border-top: 1px solid #ddd;\n }\n\n .button-container md-elevated-button {\n background-color: #3498db;\n color: white;\n padding: 12px 30px;\n font-size: 16px;\n font-weight: bold;\n border-radius: 8px;\n }\n\n .document-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n `\n ]\n\n @property({ type: Object }) checklist: any = {}\n @property({ type: Object }) buildingInspection: any = {}\n @property({ type: Object }) project: any = {}\n\n render() {\n const today = this._formatDate(new Date())\n\n return html`\n <div class=\"document-container\">\n <div class=\"document-header\">\n <div class=\"document-title\">검측결과통보</div>\n </div>\n\n <div class=\"document-body\">\n <div class=\"date-section\">${today}</div>\n\n <div class=\"recipient-section\">\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">문서 번호:</span>\n <span>${this.checklist?.inspectionResultDocumentNo || ''}</span>\n </div>\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">수신:</span>\n <span>${this.buildingInspection?.buildingLevel?.building?.buildingComplex?.constructionCompany}</span>\n </div>\n </div>\n\n <div class=\"content-section\">\n 문서번호 ${this.checklist?.inspectionRequestDocumentNo || ''} 검측 요청한 건에 대하여\n ${this._formatDate(new Date(this.buildingInspection?.requestDate))} 검측한 결과를 다음과 같이 통보합니다.\n </div>\n\n <table class=\"request-table\">\n <tr>\n <th>검측 결과</th>\n <td>\n <div class=\"radio-group\">\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultStatus\"\n value=\"PASS\"\n ?checked=${this._getOverallResult() === InspectionResultStatus.PASS}\n disabled\n ></md-radio>\n <span>합격</span>\n </div>\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultStatus\"\n value=\"FAIL\"\n ?checked=${this._getOverallResult() === InspectionResultStatus.FAIL}\n disabled\n ></md-radio>\n <span>불합격</span>\n </div>\n </div>\n </td>\n </tr>\n <tr>\n <th>검측 종류</th>\n <td>\n <div class=\"radio-group\">\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultType\"\n value=\"GENERAL\"\n ?checked=${this.checklist?.inspectionResultType === InspectionResultType.GENERAL}\n @change=${this._onInspectionTypeChange}\n ></md-radio>\n <span>일반</span>\n </div>\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultType\"\n value=\"FOCUS\"\n ?checked=${this.checklist?.inspectionResultType === InspectionResultType.FOCUS}\n @change=${this._onInspectionTypeChange}\n ></md-radio>\n <span>중점</span>\n </div>\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultType\"\n value=\"CONCEALED_WORK\"\n ?checked=${this.checklist?.inspectionResultType === InspectionResultType.CONCEALED_WORK}\n @change=${this._onInspectionTypeChange}\n ></md-radio>\n <span>매몰부위</span>\n </div>\n </div>\n </td>\n </tr>\n <tr>\n <th>지시 사항</th>\n <td>\n <input\n type=\"text\"\n class=\"instructions-field\"\n .value=${this.checklist?.inspectionResultMemo || ''}\n @input=${this._onInstructionsChange}\n placeholder=\"지시 사항을 입력하세요.\"\n />\n </td>\n </tr>\n </table>\n\n <div class=\"document-footer\">\n <div class=\"attachment-section\">\n <div class=\"attachment-title\">첨부 파일</div>\n <div class=\"attachment-list\">\n <div class=\"attachment-item\">시공자의 검측 체크리스트</div>\n ${this._getAttachmentCount() > 0\n ? html`<div class=\"attachment-item\">첨부 사진 ${this._getAttachmentCount()}개</div>`\n : ''}\n </div>\n </div>\n\n <div class=\"signature-section\">\n <div class=\"signature-box\">\n <div class=\"signature-title\">공종별 감리 책임자</div>\n <div class=\"signature-name\">${this.checklist?.taskSupervisory?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.taskSupervisorySignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.taskSupervisorySignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n <div class=\"signature-box\">\n <div class=\"signature-title\">총괄 감리 책임자</div>\n <div class=\"signature-name\">${this.checklist?.overallSupervisory?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.overallSupervisorySignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.overallSupervisorySignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"button-container\">\n <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>\n </div>\n `\n }\n\n private _formatDate(date: Date): string {\n return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}.`\n }\n\n private _getAttachmentCount(): number {\n return (\n this.buildingInspection?.checklist?.checklistItems?.reduce((acc, item) => {\n return acc + item.checklistItemAttachmentCount\n }, 0) || 0\n )\n }\n\n private _getOverallResult(): string {\n const hasFailedItems = this.checklist?.checklistItems?.some(item => item.supervisoryConfirmStatus === 'F')\n return hasFailedItems ? InspectionResultStatus.FAIL : InspectionResultStatus.PASS\n }\n\n private _onInspectionTypeChange(e: Event) {\n const target = e.target as any\n this.checklist = {\n ...this.checklist,\n inspectionResultType: target.value\n }\n this.requestUpdate()\n this.dispatchEvent(\n new CustomEvent('inspection-type-change', {\n detail: { inspectionResultType: target.value },\n bubbles: true\n })\n )\n }\n\n private _onInstructionsChange(e: Event) {\n const target = e.target as HTMLInputElement\n this.checklist = {\n ...this.checklist,\n inspectionResultMemo: target.value\n }\n this.requestUpdate()\n this.dispatchEvent(\n new CustomEvent('instructions-change', {\n detail: { inspectionResultMemo: target.value },\n bubbles: true\n })\n )\n }\n\n private _onConfirm() {\n this.dispatchEvent(new CustomEvent('popup-close', { bubbles: true }))\n }\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import '@material/web/icon/icon.js';
2
+ import '@material/web/button/elevated-button.js';
3
+ import '@material/web/button/outlined-button.js';
4
+ import { LitElement } from 'lit';
5
+ export declare class NameListUploadPopup extends LitElement {
6
+ static styles: import("lit").CSSResult[];
7
+ checklistId: string;
8
+ selectedFile: File | null;
9
+ render(): import("lit-html").TemplateResult<1>;
10
+ private _selectFile;
11
+ private _handleFileSelect;
12
+ private _handleDrop;
13
+ private _handleDragOver;
14
+ private _handleDragLeave;
15
+ private _addDragOverClass;
16
+ private _removeDragOverClass;
17
+ private _removeFile;
18
+ private _uploadFile;
19
+ private _formatFileSize;
20
+ private _close;
21
+ }