@dssp/supervision 1.0.0-alpha.25 → 1.0.0-alpha.27

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 (82) hide show
  1. package/dist-client/graphql/building-inspection.js +17 -0
  2. package/dist-client/graphql/building-inspection.js.map +1 -1
  3. package/dist-client/pages/action-plan/action-plan-importer.d.ts +1 -1
  4. package/dist-client/pages/action-plan/action-plan-list-page.d.ts +1 -1
  5. package/dist-client/pages/building-inspection/building-inspection-detail-camera.d.ts +1 -1
  6. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +6 -1
  7. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +86 -9
  8. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -1
  9. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.d.ts +1 -1
  10. package/dist-client/pages/building-inspection/building-inspection-list.d.ts +7 -0
  11. package/dist-client/pages/building-inspection/building-inspection-list.js +90 -15
  12. package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -1
  13. package/dist-client/pages/building-inspection/component/daily-worklog-popup.d.ts +17 -0
  14. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js +354 -0
  15. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js.map +1 -0
  16. package/dist-client/pages/building-inspection/component/image-preview-popup.d.ts +1 -1
  17. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +3 -4
  18. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js +135 -176
  19. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js.map +1 -1
  20. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +30 -0
  21. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js +479 -0
  22. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js.map +1 -0
  23. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.d.ts +1 -1
  24. package/dist-client/pages/building-inspection/inspection-create-popup.js +17 -5
  25. package/dist-client/pages/building-inspection/inspection-create-popup.js.map +1 -1
  26. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +3 -2
  27. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js +46 -3
  28. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js.map +1 -1
  29. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js +2 -1
  30. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js.map +1 -1
  31. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.d.ts +1 -1
  32. package/dist-client/pages/checklist/attachment-list-popup.js +1 -7
  33. package/dist-client/pages/checklist/attachment-list-popup.js.map +1 -1
  34. package/dist-client/pages/checklist/checklist-view.js +52 -18
  35. package/dist-client/pages/checklist/checklist-view.js.map +1 -1
  36. package/dist-client/pages/checklist/inspection-info-popup.d.ts +1 -1
  37. package/dist-client/pages/checklist/inspection-tab-popup.d.ts +1 -1
  38. package/dist-client/pages/checklist-template/checklist-template-list.d.ts +1 -1
  39. package/dist-client/pages/checklist-template/checklist-template-list.js +1 -1
  40. package/dist-client/pages/checklist-template/checklist-template-list.js.map +1 -1
  41. package/dist-client/pages/checklist-template/checklist-type-management.d.ts +1 -1
  42. package/dist-client/pages/issue/issue-importer.d.ts +1 -1
  43. package/dist-client/pages/issue/issue-list-page.d.ts +1 -1
  44. package/dist-client/pages/project-report/project-report-importer.d.ts +1 -1
  45. package/dist-client/pages/project-report/project-report-list-page.d.ts +1 -1
  46. package/dist-client/pages/supervisor/supervisor-importer.d.ts +1 -1
  47. package/dist-client/pages/supervisor/supervisor-list-page.d.ts +1 -1
  48. package/dist-client/tsconfig.tsbuildinfo +1 -1
  49. package/dist-server/service/building-inspection/building-inspection-mutation.js +45 -19
  50. package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -1
  51. package/dist-server/service/building-inspection/building-inspection-query.js +7 -1
  52. package/dist-server/service/building-inspection/building-inspection-query.js.map +1 -1
  53. package/dist-server/service/building-inspection/building-inspection-type.d.ts +7 -0
  54. package/dist-server/service/building-inspection/building-inspection-type.js +25 -0
  55. package/dist-server/service/building-inspection/building-inspection-type.js.map +1 -1
  56. package/dist-server/service/building-inspection/index.d.ts +1 -1
  57. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.d.ts +8 -0
  58. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js +98 -0
  59. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js.map +1 -0
  60. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.d.ts +12 -0
  61. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js +85 -0
  62. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js.map +1 -0
  63. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.d.ts +12 -0
  64. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js +47 -0
  65. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js.map +1 -0
  66. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.d.ts +25 -0
  67. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js +98 -0
  68. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js.map +1 -0
  69. package/dist-server/service/building-inspection-daily-worklog/index.d.ts +5 -0
  70. package/dist-server/service/building-inspection-daily-worklog/index.js +9 -0
  71. package/dist-server/service/building-inspection-daily-worklog/index.js.map +1 -0
  72. package/dist-server/service/checklist/checklist-query.d.ts +2 -0
  73. package/dist-server/service/checklist/checklist-query.js +11 -0
  74. package/dist-server/service/checklist/checklist-query.js.map +1 -1
  75. package/dist-server/service/checklist/checklist.d.ts +23 -0
  76. package/dist-server/service/checklist/checklist.js +73 -1
  77. package/dist-server/service/checklist/checklist.js.map +1 -1
  78. package/dist-server/service/index.d.ts +2 -1
  79. package/dist-server/service/index.js +6 -2
  80. package/dist-server/service/index.js.map +1 -1
  81. package/dist-server/tsconfig.tsbuildinfo +1 -1
  82. package/package.json +4 -3
@@ -1,10 +1,10 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import '@material/web/button/elevated-button.js';
3
3
  import '@material/web/icon/icon.js';
4
+ import '@material/web/button/outlined-button.js';
4
5
  import { css, html, LitElement } from 'lit';
5
6
  import { customElement, property } from 'lit/decorators.js';
6
7
  import { ScrollbarStyles } from '@operato/styles';
7
- import { openPopup } from '@operato/layout';
8
8
  import './photo-album-popup';
9
9
  export var InspectionMode;
10
10
  (function (InspectionMode) {
@@ -19,29 +19,30 @@ let InspectionRequestDocument = class InspectionRequestDocument extends LitEleme
19
19
  this.mode = InspectionMode.VIEW;
20
20
  }
21
21
  render() {
22
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
23
- const today = this._formatDate(new Date());
22
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
23
+ const headerDate = this._formatDate(new Date(((_a = this.checklist) === null || _a === void 0 ? void 0 : _a.inspectionRequestUpdatedAt) || Date.now()));
24
24
  const requestDate = this._formatDate(new Date(this.buildingInspection.requestDate));
25
+ const attachmentCount = (_d = (_c = (_b = this.buildingInspection) === null || _b === void 0 ? void 0 : _b.checklist) === null || _c === void 0 ? void 0 : _c.checklistItems) === null || _d === void 0 ? void 0 : _d.reduce((acc, item) => {
26
+ return acc + item.checklistItemAttachmentCount;
27
+ }, 0);
25
28
  return html `
26
- <div class="document-main-title">검측요청결과 통보내용</div>
27
-
28
29
  <div class="document-container">
29
30
  <div class="document-header">
30
31
  <div class="document-title">검측요청서</div>
31
32
  </div>
32
33
 
33
34
  <div class="document-body">
34
- <div class="date-section">${today}</div>
35
+ <div class="date-section">${headerDate}</div>
35
36
 
36
37
  <div class="request-info">
37
38
  <div class="recipient-section">
38
39
  <div class="recipient-item">
39
- <span class="recipient-label">번호:</span>
40
- <span>${((_a = this.checklist) === null || _a === void 0 ? void 0 : _a.documentNo) || ''}</span>
40
+ <span class="recipient-label">문서 번호:</span>
41
+ <span>${((_e = this.checklist) === null || _e === void 0 ? void 0 : _e.inspectionRequestDocumentNo) || ''}</span>
41
42
  </div>
42
43
  <div class="recipient-item">
43
- <span class="recipient-label">받음:</span>
44
- <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.supervisoryCompany}</span>
44
+ <span class="recipient-label">수신:</span>
45
+ <span>${(_j = (_h = (_g = (_f = this.buildingInspection) === null || _f === void 0 ? void 0 : _f.buildingLevel) === null || _g === void 0 ? void 0 : _g.building) === null || _h === void 0 ? void 0 : _h.buildingComplex) === null || _j === void 0 ? void 0 : _j.supervisoryCompany}</span>
45
46
  </div>
46
47
  </div>
47
48
 
@@ -50,11 +51,11 @@ let InspectionRequestDocument = class InspectionRequestDocument extends LitEleme
50
51
  <table class="request-table">
51
52
  <tr>
52
53
  <th>위치 및 공종</th>
53
- <td>${(((_f = this.checklist) === null || _f === void 0 ? void 0 : _f.location) || '') + ' - ' + (((_g = this.checklist) === null || _g === void 0 ? void 0 : _g.constructionType) || '')}</td>
54
+ <td>${(((_k = this.checklist) === null || _k === void 0 ? void 0 : _k.location) || '') + ' - ' + (((_l = this.checklist) === null || _l === void 0 ? void 0 : _l.constructionType) || '')}</td>
54
55
  </tr>
55
56
  <tr>
56
57
  <th>검측 부위</th>
57
- <td>${((_j = (_h = this.checklist) === null || _h === void 0 ? void 0 : _h.inspectionParts) === null || _j === void 0 ? void 0 : _j.join(', ')) || ''}</td>
58
+ <td>${((_o = (_m = this.checklist) === null || _m === void 0 ? void 0 : _m.inspectionParts) === null || _o === void 0 ? void 0 : _o.join(', ')) || ''}</td>
58
59
  </tr>
59
60
  <tr>
60
61
  <th>검측 요구일시</th>
@@ -63,69 +64,72 @@ let InspectionRequestDocument = class InspectionRequestDocument extends LitEleme
63
64
  <tr>
64
65
  <th>검측 사항</th>
65
66
  <td>
66
- ${this.mode === InspectionMode.EDIT
67
- ? html `
68
- <input
69
- type="text"
70
- name="memo"
71
- class="inspection-memo-input"
72
- .value=${((_k = this.buildingInspection) === null || _k === void 0 ? void 0 : _k.memo) || ''}
73
- @input=${this._onInspectionMemoChange}
74
- placeholder="검측사항을 입력하세요."
75
- />
76
- `
77
- : html ` <div class="inspection-memo-text">${(_l = this.buildingInspection) === null || _l === void 0 ? void 0 : _l.memo}</div> `}
67
+ <input
68
+ type="text"
69
+ class="inspection-memo-input"
70
+ .value=${((_p = this.checklist) === null || _p === void 0 ? void 0 : _p.inspectionRequestMemo) || ''}
71
+ @input=${this._onInspectionMemoChange}
72
+ ?disabled=${this.mode === InspectionMode.VIEW}
73
+ placeholder="검측사항을 입력하세요."
74
+ />
78
75
  </td>
79
76
  </tr>
80
77
  </table>
81
78
  </div>
82
79
 
83
- <div class="attachment-section">
84
- <div class="attachment-title">
85
- <md-icon class="attachment-icon">attach_file</md-icon>
86
- 첨부자료
87
- </div>
88
- <div class="attachment-list">
89
- <div
90
- class="attachment-item ${this.mode === InspectionMode.EDIT ? 'disabled' : ''}"
91
- @click=${this.mode === InspectionMode.VIEW ? this._onChecklistClick : null}
92
- >
93
- <md-icon class="attachment-icon">assignment</md-icon>
94
- 시공자 검측 체크리스트
95
- </div>
96
- <div class="attachment-item" @click=${this._onPhotoAlbumClick}>
97
- <md-icon class="attachment-icon">photo_library</md-icon>
98
- 사진대지
99
- </div>
100
- <div class="attachment-item" @click=${this._onParticipantListClick}>
101
- <md-icon class="attachment-icon">people</md-icon>
102
- 공사 참여자 실명부
80
+ <div class="document-footer">
81
+ <div class="attachment-section">
82
+ <div class="attachment-title">첨부 파일</div>
83
+ <div class="attachment-list">
84
+ <div class="attachment-item">시공자의 검측 체크리스트</div>
85
+ ${this.mode === InspectionMode.EDIT
86
+ ? html `
87
+ <div class="attachment-item upload">
88
+ 실명부
89
+ <md-outlined-button @click=${this._onNameListUpload.bind(this)}>
90
+ ${((_q = this.checklist) === null || _q === void 0 ? void 0 : _q.nameListAttachment) ? '다시 업로드' : '업로드'}
91
+ </md-outlined-button>
92
+ ${((_r = this.checklist) === null || _r === void 0 ? void 0 : _r.nameListAttachment) ? html `<span>(업로드 완료)</span>` : ''}
93
+ </div>
94
+ `
95
+ : ((_s = this.checklist) === null || _s === void 0 ? void 0 : _s.nameListAttachment)
96
+ ? html `<div class="attachment-item">실명부</div>`
97
+ : ''}
98
+ ${attachmentCount > 0 ? html `<div class="attachment-item">첨부 사진 ${attachmentCount}개</div>` : ''}
103
99
  </div>
104
100
  </div>
105
- </div>
106
101
 
107
- <div class="signature-section">
108
- <div class="signature-box">
109
- <div class="signature-title">공종별 시공 관리자</div>
110
- <div class="signature-name">${((_o = (_m = this.checklist) === null || _m === void 0 ? void 0 : _m.taskConstructor) === null || _o === void 0 ? void 0 : _o.name) || ''}</div>
111
- <div class="signature-container">
112
- <img class="signature-image" src="${((_p = this.checklist) === null || _p === void 0 ? void 0 : _p.taskConstructorSignature) || ''}" alt="서명" />
102
+ <div class="signature-section">
103
+ <div class="signature-box">
104
+ <div class="signature-title">공종별 시공 관리자</div>
105
+ <div class="signature-name">${(_u = (_t = this.checklist) === null || _t === void 0 ? void 0 : _t.taskConstructor) === null || _u === void 0 ? void 0 : _u.name}</div>
106
+ <div class="signature-container">
107
+ ${((_v = this.checklist) === null || _v === void 0 ? void 0 : _v.taskConstructorSignature)
108
+ ? html `<img class="signature-image" src="${this.checklist.taskConstructorSignature}" alt="서명" />`
109
+ : ''}
110
+ </div>
113
111
  </div>
114
- </div>
115
- <div class="signature-box">
116
- <div class="signature-title">총괄 시공 책임자</div>
117
- <div class="signature-name">${((_r = (_q = this.checklist) === null || _q === void 0 ? void 0 : _q.overallConstructor) === null || _r === void 0 ? void 0 : _r.name) || ''}</div>
118
- <div class="signature-container">
119
- <img class="signature-image" src="${((_s = this.checklist) === null || _s === void 0 ? void 0 : _s.overallConstructorSignature) || ''}" alt="서명" />
112
+ <div class="signature-box">
113
+ <div class="signature-title">총괄 시공 책임자</div>
114
+ <div class="signature-name">${(_x = (_w = this.checklist) === null || _w === void 0 ? void 0 : _w.overallConstructor) === null || _x === void 0 ? void 0 : _x.name}</div>
115
+ <div class="signature-container">
116
+ ${((_y = this.checklist) === null || _y === void 0 ? void 0 : _y.overallConstructorSignature)
117
+ ? html `<img class="signature-image" src="${this.checklist.overallConstructorSignature}" alt="서명" />`
118
+ : ''}
119
+ </div>
120
120
  </div>
121
121
  </div>
122
122
  </div>
123
-
124
- <div class="button-container">
125
- <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>
126
- </div>
127
123
  </div>
128
124
  </div>
125
+
126
+ ${this.mode === InspectionMode.EDIT
127
+ ? html `
128
+ <div class="button-container">
129
+ <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>
130
+ </div>
131
+ `
132
+ : ''}
129
133
  `;
130
134
  }
131
135
  _formatDate(date) {
@@ -133,31 +137,29 @@ let InspectionRequestDocument = class InspectionRequestDocument extends LitEleme
133
137
  }
134
138
  _onInspectionMemoChange(e) {
135
139
  const target = e.target;
136
- this.buildingInspection = Object.assign(Object.assign({}, this.buildingInspection), { memo: target.value });
140
+ this.checklist = Object.assign(Object.assign({}, this.checklist), { inspectionRequestMemo: target.value });
137
141
  // 부모 컴포넌트에 변경사항 전달
138
142
  this.dispatchEvent(new CustomEvent('inspection-memo-change', {
139
- detail: { memo: target.value },
143
+ detail: { inspectionRequestMemo: target.value },
140
144
  bubbles: true
141
145
  }));
142
146
  }
143
- // 체크리스트 팝업 열기
144
- _onChecklistClick() {
145
- // TODO: 체크리스트 팝업 구현
146
- console.log('체크리스트 클릭');
147
- }
148
- // 사진대지 팝업 열기
149
- _onPhotoAlbumClick() {
150
- var _a;
151
- openPopup(html ` <photo-album-popup .checklistId=${((_a = this.checklist) === null || _a === void 0 ? void 0 : _a.id) || ''}></photo-album-popup> `, {
152
- backdrop: true,
153
- size: 'large',
154
- title: '사진대지'
155
- });
156
- }
157
- // 참여자 실명부 팝업 열기
158
- _onParticipantListClick() {
159
- // TODO: 참여자 실명부 팝업 구현
160
- console.log('참여자 실명부 클릭');
147
+ // 실명부 업로드
148
+ _onNameListUpload() {
149
+ const input = document.createElement('input');
150
+ input.type = 'file';
151
+ input.accept = '.pdf,.doc,.docx,.jpg,.jpeg,.png';
152
+ input.onchange = (e) => {
153
+ const file = e.target.files[0];
154
+ if (file) {
155
+ // checklist 파일과 업로드 플래그 저장
156
+ this.checklist = Object.assign(Object.assign({}, this.checklist), { nameListAttachment: file, isNameListAttachmentUploaded: true });
157
+ // 부모 컴포넌트에 변경사항 알림
158
+ this.dispatchEvent(new CustomEvent('name-list-file-selected', { detail: { file } }));
159
+ this.requestUpdate();
160
+ }
161
+ };
162
+ input.click();
161
163
  }
162
164
  // 확인 버튼
163
165
  _onConfirm() {
@@ -195,16 +197,6 @@ InspectionRequestDocument.styles = [
195
197
  margin-bottom: 10px;
196
198
  }
197
199
 
198
- .document-main-title {
199
- font-size: 20px;
200
- font-weight: bold;
201
- text-align: center;
202
- margin-bottom: 20px;
203
- background-color: var(--md-sys-color-primary);
204
- color: white;
205
- padding: 10px;
206
- }
207
-
208
200
  .document-body {
209
201
  padding: 20px;
210
202
  }
@@ -247,55 +239,50 @@ InspectionRequestDocument.styles = [
247
239
 
248
240
  .signature-section {
249
241
  display: flex;
250
- justify-content: space-around;
251
- margin-top: 30px;
252
- padding: 20px;
253
- background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
254
- border-radius: 10px;
255
- border: 2px solid #e1e8ed;
242
+ flex-direction: column;
243
+ align-items: flex-end;
244
+ gap: 15px;
256
245
  }
257
246
 
258
247
  .signature-box {
259
- text-align: center;
260
- width: 220px;
261
- background: white;
262
- border-radius: 8px;
263
- padding: 20px;
264
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
265
- border: 1px solid #d1d9e6;
248
+ display: flex;
249
+ align-items: center;
250
+ gap: 15px;
251
+ text-align: right;
266
252
  }
267
253
 
268
254
  .signature-title {
255
+ font-size: 14px;
269
256
  font-weight: bold;
270
- margin-bottom: 15px;
271
- color: #2c3e50;
272
- font-size: 16px;
273
- border-bottom: 2px solid #3498db;
274
- padding-bottom: 5px;
257
+ color: #333;
258
+ min-width: 120px;
275
259
  }
276
260
 
277
261
  .signature-name {
278
- font-weight: bold;
279
- margin-bottom: 15px;
280
- color: #34495e;
281
262
  font-size: 14px;
282
- background-color: #ecf0f1;
283
- padding: 8px;
284
- border-radius: 5px;
263
+ color: #333;
285
264
  }
286
265
 
287
266
  .signature-container {
288
267
  position: relative;
289
- border: 2px solid #333;
290
- border-radius: 8px;
291
- padding: 10px;
292
- margin-bottom: 10px;
293
- min-height: 80px;
268
+ min-width: 100px;
269
+ min-height: 60px;
294
270
  display: flex;
295
271
  align-items: center;
296
272
  justify-content: center;
297
273
  }
298
274
 
275
+ .signature-container::after {
276
+ content: '(인)';
277
+ position: absolute;
278
+ bottom: 5px;
279
+ right: 5px;
280
+ font-size: 12px;
281
+ color: #333;
282
+ font-weight: bold;
283
+ z-index: 2;
284
+ }
285
+
299
286
  .signature-image {
300
287
  max-width: 140px;
301
288
  max-height: 60px;
@@ -305,84 +292,50 @@ InspectionRequestDocument.styles = [
305
292
 
306
293
  .attachment-section {
307
294
  margin-top: 30px;
308
- padding: 20px;
309
- background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
310
- border: 1px solid #dee2e6;
311
- border-radius: 8px;
312
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
295
+ margin-bottom: 30px;
313
296
  }
314
297
 
315
298
  .attachment-title {
316
299
  font-weight: bold;
317
- font-size: 16px;
318
- color: #495057;
319
- margin-bottom: 15px;
300
+ font-size: 14px;
301
+ color: #333;
302
+ margin-bottom: 10px;
320
303
  display: flex;
321
304
  align-items: center;
322
305
  gap: 8px;
323
306
  }
324
307
 
325
308
  .attachment-list {
326
- display: flex;
327
- flex-direction: column;
328
- gap: 12px;
309
+ margin-left: 30px;
329
310
  }
330
311
 
331
312
  .attachment-item {
332
- display: inline-flex;
333
- align-items: center;
334
- gap: 8px;
335
- padding: 12px 16px;
336
- background-color: white;
337
- border: 1px solid #dee2e6;
338
- border-radius: 6px;
339
- cursor: pointer;
340
- color: #495057;
341
- text-decoration: none;
342
- transition: all 0.2s ease;
343
- font-weight: 500;
344
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
345
- }
346
-
347
- .attachment-item:hover {
348
- background-color: #e3f2fd;
349
- border-color: #2196f3;
350
- color: #1976d2;
351
- transform: translateY(-1px);
352
- box-shadow: 0 2px 8px rgba(33, 150, 243, 0.15);
313
+ margin-bottom: 5px;
314
+ color: #2196f3;
315
+ font-size: 14px;
316
+ line-height: 1.5;
353
317
  }
354
318
 
355
- .attachment-item:active {
356
- transform: translateY(0);
357
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
319
+ .attachment-item.upload {
320
+ display: flex;
321
+ align-items: center;
322
+ gap: 10px;
358
323
  }
359
324
 
360
- .attachment-item.disabled {
361
- cursor: not-allowed;
362
- background-color: #f8f9fa;
363
- color: #6c757d;
364
- border-color: #e9ecef;
325
+ .attachment-item.upload md-outlined-button {
326
+ --md-outlined-button-container-height: 24px;
327
+ --md-outlined-button-label-text-size: 12px;
328
+ --md-outlined-button-outline-color: #666;
329
+ --md-outlined-button-label-text-color: #666;
365
330
  }
366
331
 
367
- .attachment-item.disabled:hover {
368
- background-color: #f8f9fa;
369
- border-color: #e9ecef;
370
- color: #6c757d;
371
- transform: none;
372
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
332
+ .attachment-item.upload span {
333
+ color: #666;
334
+ font-size: 12px;
373
335
  }
374
336
 
375
337
  .attachment-icon {
376
- --md-icon-size: 18px;
377
- color: #6c757d;
378
- }
379
-
380
- .attachment-item:hover .attachment-icon {
381
- color: #1976d2;
382
- }
383
-
384
- .attachment-item.disabled .attachment-icon {
385
- color: #adb5bd;
338
+ display: none;
386
339
  }
387
340
 
388
341
  .date-section {
@@ -452,6 +405,12 @@ InspectionRequestDocument.styles = [
452
405
  font-weight: bold;
453
406
  border-radius: 8px;
454
407
  }
408
+
409
+ .document-footer {
410
+ display: flex;
411
+ justify-content: space-between;
412
+ align-items: center;
413
+ }
455
414
  `
456
415
  ];
457
416
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"inspection-request-document.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/inspection-document/inspection-request-document.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@material/web/icon/icon.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { openPopup } from '@operato/layout'\nimport './photo-album-popup'\n\nexport enum InspectionMode {\n EDIT = 'EDIT',\n VIEW = 'VIEW'\n}\n\n@customElement('inspection-request-document')\nexport class InspectionRequestDocument 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-main-title {\n font-size: 20px;\n font-weight: bold;\n text-align: center;\n margin-bottom: 20px;\n background-color: var(--md-sys-color-primary);\n color: white;\n padding: 10px;\n }\n\n .document-body {\n padding: 20px;\n }\n\n .request-info {\n margin-bottom: 20px;\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 .inspection-items {\n margin: 20px 0;\n }\n\n .inspection-items textarea {\n width: 100%;\n min-height: 100px;\n border: 1px solid #ddd;\n padding: 10px;\n font-family: inherit;\n resize: vertical;\n }\n\n .signature-section {\n display: flex;\n justify-content: space-around;\n margin-top: 30px;\n padding: 20px;\n background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);\n border-radius: 10px;\n border: 2px solid #e1e8ed;\n }\n\n .signature-box {\n text-align: center;\n width: 220px;\n background: white;\n border-radius: 8px;\n padding: 20px;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n border: 1px solid #d1d9e6;\n }\n\n .signature-title {\n font-weight: bold;\n margin-bottom: 15px;\n color: #2c3e50;\n font-size: 16px;\n border-bottom: 2px solid #3498db;\n padding-bottom: 5px;\n }\n\n .signature-name {\n font-weight: bold;\n margin-bottom: 15px;\n color: #34495e;\n font-size: 14px;\n background-color: #ecf0f1;\n padding: 8px;\n border-radius: 5px;\n }\n\n .signature-container {\n position: relative;\n border: 2px solid #333;\n border-radius: 8px;\n padding: 10px;\n margin-bottom: 10px;\n min-height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\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 padding: 20px;\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n border: 1px solid #dee2e6;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n }\n\n .attachment-title {\n font-weight: bold;\n font-size: 16px;\n color: #495057;\n margin-bottom: 15px;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .attachment-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .attachment-item {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background-color: white;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n cursor: pointer;\n color: #495057;\n text-decoration: none;\n transition: all 0.2s ease;\n font-weight: 500;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n\n .attachment-item:hover {\n background-color: #e3f2fd;\n border-color: #2196f3;\n color: #1976d2;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.15);\n }\n\n .attachment-item:active {\n transform: translateY(0);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n\n .attachment-item.disabled {\n cursor: not-allowed;\n background-color: #f8f9fa;\n color: #6c757d;\n border-color: #e9ecef;\n }\n\n .attachment-item.disabled:hover {\n background-color: #f8f9fa;\n border-color: #e9ecef;\n color: #6c757d;\n transform: none;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n }\n\n .attachment-icon {\n --md-icon-size: 18px;\n color: #6c757d;\n }\n\n .attachment-item:hover .attachment-icon {\n color: #1976d2;\n }\n\n .attachment-item.disabled .attachment-icon {\n color: #adb5bd;\n }\n\n .date-section {\n text-align: right;\n margin-bottom: 20px;\n font-size: 14px;\n }\n\n .form-row {\n display: flex;\n align-items: flex-start;\n margin-bottom: 10px;\n }\n\n .form-label {\n font-weight: bold;\n width: 100px;\n margin-right: 10px;\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 .inspection-memo-input {\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 .inspection-memo-text {\n padding: 10px;\n font-size: 15px;\n color: #495057;\n border: 1px solid #e9ecef;\n border-radius: 5px;\n min-height: 20px;\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 ]\n\n @property({ type: Object }) checklist: any = {}\n @property({ type: Object }) buildingInspection: any = {}\n @property({ type: String }) mode: InspectionMode = InspectionMode.VIEW\n\n render() {\n const today = this._formatDate(new Date())\n const requestDate = this._formatDate(new Date(this.buildingInspection.requestDate))\n\n return html`\n <div class=\"document-main-title\">검측요청결과 통보내용</div>\n\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=\"request-info\">\n <div class=\"recipient-section\">\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">번호:</span>\n <span>${this.checklist?.documentNo || ''}</span>\n </div>\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">받음:</span>\n <span>${this.buildingInspection?.buildingLevel?.building?.buildingComplex?.supervisoryCompany}</span>\n </div>\n </div>\n\n <div style=\"margin: 15px 0;\">다음과 같은 세부공종에 대하여 검측요청 하오니 검사 후 승인하여 주시 기 바랍니다.</div>\n\n <table class=\"request-table\">\n <tr>\n <th>위치 및 공종</th>\n <td>${(this.checklist?.location || '') + ' - ' + (this.checklist?.constructionType || '')}</td>\n </tr>\n <tr>\n <th>검측 부위</th>\n <td>${this.checklist?.inspectionParts?.join(', ') || ''}</td>\n </tr>\n <tr>\n <th>검측 요구일시</th>\n <td>${requestDate}</td>\n </tr>\n <tr>\n <th>검측 사항</th>\n <td>\n ${this.mode === InspectionMode.EDIT\n ? html`\n <input\n type=\"text\"\n name=\"memo\"\n class=\"inspection-memo-input\"\n .value=${this.buildingInspection?.memo || ''}\n @input=${this._onInspectionMemoChange}\n placeholder=\"검측사항을 입력하세요.\"\n />\n `\n : html` <div class=\"inspection-memo-text\">${this.buildingInspection?.memo}</div> `}\n </td>\n </tr>\n </table>\n </div>\n\n <div class=\"attachment-section\">\n <div class=\"attachment-title\">\n <md-icon class=\"attachment-icon\">attach_file</md-icon>\n 첨부자료\n </div>\n <div class=\"attachment-list\">\n <div\n class=\"attachment-item ${this.mode === InspectionMode.EDIT ? 'disabled' : ''}\"\n @click=${this.mode === InspectionMode.VIEW ? this._onChecklistClick : null}\n >\n <md-icon class=\"attachment-icon\">assignment</md-icon>\n 시공자 검측 체크리스트\n </div>\n <div class=\"attachment-item\" @click=${this._onPhotoAlbumClick}>\n <md-icon class=\"attachment-icon\">photo_library</md-icon>\n 사진대지\n </div>\n <div class=\"attachment-item\" @click=${this._onParticipantListClick}>\n <md-icon class=\"attachment-icon\">people</md-icon>\n 공사 참여자 실명부\n </div>\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?.taskConstructor?.name || ''}</div>\n <div class=\"signature-container\">\n <img class=\"signature-image\" src=\"${this.checklist?.taskConstructorSignature || ''}\" alt=\"서명\" />\n </div>\n </div>\n <div class=\"signature-box\">\n <div class=\"signature-title\">총괄 시공 책임자</div>\n <div class=\"signature-name\">${this.checklist?.overallConstructor?.name || ''}</div>\n <div class=\"signature-container\">\n <img class=\"signature-image\" src=\"${this.checklist?.overallConstructorSignature || ''}\" alt=\"서명\" />\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 </div>\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 _onInspectionMemoChange(e: Event) {\n const target = e.target as HTMLInputElement\n this.buildingInspection = { ...this.buildingInspection, memo: target.value }\n\n // 부모 컴포넌트에 변경사항 전달\n this.dispatchEvent(\n new CustomEvent('inspection-memo-change', {\n detail: { memo: target.value },\n bubbles: true\n })\n )\n }\n\n // 체크리스트 팝업 열기\n private _onChecklistClick() {\n // TODO: 체크리스트 팝업 구현\n console.log('체크리스트 클릭')\n }\n\n // 사진대지 팝업 열기\n private _onPhotoAlbumClick() {\n openPopup(html` <photo-album-popup .checklistId=${this.checklist?.id || ''}></photo-album-popup> `, {\n backdrop: true,\n size: 'large',\n title: '사진대지'\n })\n }\n\n // 참여자 실명부 팝업 열기\n private _onParticipantListClick() {\n // TODO: 참여자 실명부 팝업 구현\n console.log('참여자 실명부 클릭')\n }\n\n // 확인 버튼\n private _onConfirm() {\n this.dispatchEvent(new CustomEvent('popup-close', { bubbles: true }))\n history.back()\n }\n}\n"]}
1
+ {"version":3,"file":"inspection-request-document.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/inspection-document/inspection-request-document.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@material/web/icon/icon.js'\nimport '@material/web/button/outlined-button.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ScrollbarStyles } from '@operato/styles'\nimport './photo-album-popup'\n\nexport enum InspectionMode {\n EDIT = 'EDIT',\n VIEW = 'VIEW'\n}\n\n@customElement('inspection-request-document')\nexport class InspectionRequestDocument 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 .request-info {\n margin-bottom: 20px;\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 .inspection-items {\n margin: 20px 0;\n }\n\n .inspection-items textarea {\n width: 100%;\n min-height: 100px;\n border: 1px solid #ddd;\n padding: 10px;\n font-family: inherit;\n resize: vertical;\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 .attachment-item.upload {\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .attachment-item.upload md-outlined-button {\n --md-outlined-button-container-height: 24px;\n --md-outlined-button-label-text-size: 12px;\n --md-outlined-button-outline-color: #666;\n --md-outlined-button-label-text-color: #666;\n }\n\n .attachment-item.upload span {\n color: #666;\n font-size: 12px;\n }\n\n .attachment-icon {\n display: none;\n }\n\n .date-section {\n text-align: right;\n margin-bottom: 20px;\n font-size: 14px;\n }\n\n .form-row {\n display: flex;\n align-items: flex-start;\n margin-bottom: 10px;\n }\n\n .form-label {\n font-weight: bold;\n width: 100px;\n margin-right: 10px;\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 .inspection-memo-input {\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 .inspection-memo-text {\n padding: 10px;\n font-size: 15px;\n color: #495057;\n border: 1px solid #e9ecef;\n border-radius: 5px;\n min-height: 20px;\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: String }) mode: InspectionMode = InspectionMode.VIEW\n\n render() {\n const headerDate = this._formatDate(new Date(this.checklist?.inspectionRequestUpdatedAt || Date.now()))\n const requestDate = this._formatDate(new Date(this.buildingInspection.requestDate))\n const attachmentCount = this.buildingInspection?.checklist?.checklistItems?.reduce((acc, item) => {\n return acc + item.checklistItemAttachmentCount\n }, 0)\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\">${headerDate}</div>\n\n <div class=\"request-info\">\n <div class=\"recipient-section\">\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">문서 번호:</span>\n <span>${this.checklist?.inspectionRequestDocumentNo || ''}</span>\n </div>\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">수신:</span>\n <span>${this.buildingInspection?.buildingLevel?.building?.buildingComplex?.supervisoryCompany}</span>\n </div>\n </div>\n\n <div style=\"margin: 15px 0;\">다음과 같은 세부공종에 대하여 검측요청 하오니 검사 후 승인하여 주시 기 바랍니다.</div>\n\n <table class=\"request-table\">\n <tr>\n <th>위치 및 공종</th>\n <td>${(this.checklist?.location || '') + ' - ' + (this.checklist?.constructionType || '')}</td>\n </tr>\n <tr>\n <th>검측 부위</th>\n <td>${this.checklist?.inspectionParts?.join(', ') || ''}</td>\n </tr>\n <tr>\n <th>검측 요구일시</th>\n <td>${requestDate}</td>\n </tr>\n <tr>\n <th>검측 사항</th>\n <td>\n <input\n type=\"text\"\n class=\"inspection-memo-input\"\n .value=${this.checklist?.inspectionRequestMemo || ''}\n @input=${this._onInspectionMemoChange}\n ?disabled=${this.mode === InspectionMode.VIEW}\n placeholder=\"검측사항을 입력하세요.\"\n />\n </td>\n </tr>\n </table>\n </div>\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.mode === InspectionMode.EDIT\n ? html`\n <div class=\"attachment-item upload\">\n 실명부\n <md-outlined-button @click=${this._onNameListUpload.bind(this)}>\n ${this.checklist?.nameListAttachment ? '다시 업로드' : '업로드'}\n </md-outlined-button>\n ${this.checklist?.nameListAttachment ? html`<span>(업로드 완료)</span>` : ''}\n </div>\n `\n : this.checklist?.nameListAttachment\n ? html`<div class=\"attachment-item\">실명부</div>`\n : ''}\n ${attachmentCount > 0 ? html`<div class=\"attachment-item\">첨부 사진 ${attachmentCount}개</div>` : ''}\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?.taskConstructor?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.taskConstructorSignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.taskConstructorSignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n <div class=\"signature-box\">\n <div class=\"signature-title\">총괄 시공 책임자</div>\n <div class=\"signature-name\">${this.checklist?.overallConstructor?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.overallConstructorSignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.overallConstructorSignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n ${this.mode === InspectionMode.EDIT\n ? html`\n <div class=\"button-container\">\n <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>\n </div>\n `\n : ''}\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 _onInspectionMemoChange(e: Event) {\n const target = e.target as HTMLInputElement\n this.checklist = { ...this.checklist, inspectionRequestMemo: target.value }\n\n // 부모 컴포넌트에 변경사항 전달\n this.dispatchEvent(\n new CustomEvent('inspection-memo-change', {\n detail: { inspectionRequestMemo: target.value },\n bubbles: true\n })\n )\n }\n\n // 실명부 업로드\n private _onNameListUpload() {\n const input = document.createElement('input')\n input.type = 'file'\n input.accept = '.pdf,.doc,.docx,.jpg,.jpeg,.png'\n input.onchange = (e: any) => {\n const file = e.target.files[0]\n if (file) {\n // checklist에 파일과 업로드 플래그 저장\n this.checklist = {\n ...this.checklist,\n nameListAttachment: file,\n isNameListAttachmentUploaded: true\n }\n\n // 부모 컴포넌트에 변경사항 알림\n this.dispatchEvent(new CustomEvent('name-list-file-selected', { detail: { file } }))\n this.requestUpdate()\n }\n }\n input.click()\n }\n\n // 확인 버튼\n private _onConfirm() {\n this.dispatchEvent(new CustomEvent('popup-close', { bubbles: true }))\n history.back()\n }\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import '@material/web/button/elevated-button.js';
2
+ import '@material/web/icon/icon.js';
3
+ import '@material/web/radio/radio.js';
4
+ import '@material/web/textfield/outlined-text-field.js';
5
+ import { LitElement } from 'lit';
6
+ import { InspectionMode } from './inspection-request-document';
7
+ export declare enum InspectionResultStatus {
8
+ PASS = "PASS",// 합격
9
+ FAIL = "FAIL"
10
+ }
11
+ export declare enum InspectionResultType {
12
+ GENERAL = "GENERAL",// 일반
13
+ FOCUS = "FOCUS",// 중점
14
+ CONCEALED_WORK = "CONCEALED_WORK"
15
+ }
16
+ export declare class InspectionResultNotification extends LitElement {
17
+ static styles: import("lit").CSSResult[];
18
+ checklist: any;
19
+ buildingInspection: any;
20
+ project: any;
21
+ mode: InspectionMode;
22
+ render(): import("lit").TemplateResult<1>;
23
+ protected updated(): void;
24
+ private _formatDate;
25
+ private _getAttachmentCount;
26
+ private _getOverallResult;
27
+ private _onInspectionTypeChange;
28
+ private _onInstructionsChange;
29
+ private _onConfirm;
30
+ }