@dssp/supervision 1.0.0-alpha.25 → 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.
- package/dist-client/graphql/building-inspection.js +11 -0
- package/dist-client/graphql/building-inspection.js.map +1 -1
- package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +5 -0
- package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +68 -5
- package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -1
- package/dist-client/pages/building-inspection/building-inspection-list.d.ts +2 -0
- package/dist-client/pages/building-inspection/building-inspection-list.js +26 -7
- package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -1
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +2 -3
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js +125 -162
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js.map +1 -1
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +27 -0
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js +453 -0
- package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js.map +1 -0
- package/dist-client/pages/building-inspection/component/inspection-document/name-list-upload-popup.d.ts +21 -0
- package/dist-client/pages/building-inspection/component/inspection-document/name-list-upload-popup.js +327 -0
- package/dist-client/pages/building-inspection/component/inspection-document/name-list-upload-popup.js.map +1 -0
- package/dist-client/pages/building-inspection/component/photo-album-popup.d.ts +41 -0
- package/dist-client/pages/building-inspection/component/photo-album-popup.js +406 -0
- package/dist-client/pages/building-inspection/component/photo-album-popup.js.map +1 -0
- package/dist-client/pages/building-inspection/inspection-create-popup.js +17 -5
- package/dist-client/pages/building-inspection/inspection-create-popup.js.map +1 -1
- package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +1 -0
- package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js +46 -3
- package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js.map +1 -1
- package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js +2 -1
- package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js.map +1 -1
- package/dist-client/pages/checklist/attachment-list-popup.js +1 -7
- package/dist-client/pages/checklist/attachment-list-popup.js.map +1 -1
- package/dist-client/pages/checklist/checklist-view.js +24 -15
- package/dist-client/pages/checklist/checklist-view.js.map +1 -1
- package/dist-client/pages/checklist-template/checklist-template-list.js +1 -1
- package/dist-client/pages/checklist-template/checklist-template-list.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/building-inspection/building-inspection-mutation.js +40 -19
- package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -1
- package/dist-server/service/building-inspection/building-inspection-type.d.ts +5 -0
- package/dist-server/service/building-inspection/building-inspection-type.js +17 -0
- package/dist-server/service/building-inspection/building-inspection-type.js.map +1 -1
- package/dist-server/service/checklist/checklist-query.d.ts +2 -0
- package/dist-server/service/checklist/checklist-query.js +11 -0
- package/dist-server/service/checklist/checklist-query.js.map +1 -1
- package/dist-server/service/checklist/checklist.d.ts +20 -0
- package/dist-server/service/checklist/checklist.js +62 -1
- package/dist-server/service/checklist/checklist.js.map +1 -1
- package/dist-server/service/index.d.ts +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -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,12 +19,13 @@ 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;
|
|
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
23
|
const today = this._formatDate(new Date());
|
|
24
24
|
const requestDate = this._formatDate(new Date(this.buildingInspection.requestDate));
|
|
25
|
+
const attachmentCount = (_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) => {
|
|
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>
|
|
@@ -36,12 +37,12 @@ let InspectionRequestDocument = class InspectionRequestDocument extends LitEleme
|
|
|
36
37
|
<div class="request-info">
|
|
37
38
|
<div class="recipient-section">
|
|
38
39
|
<div class="recipient-item">
|
|
39
|
-
<span class="recipient-label"
|
|
40
|
-
<span>${((
|
|
40
|
+
<span class="recipient-label">문서 번호:</span>
|
|
41
|
+
<span>${((_d = this.checklist) === null || _d === void 0 ? void 0 : _d.inspectionRequestDocumentNo) || ''}</span>
|
|
41
42
|
</div>
|
|
42
43
|
<div class="recipient-item">
|
|
43
|
-
<span class="recipient-label"
|
|
44
|
-
<span>${(
|
|
44
|
+
<span class="recipient-label">수신:</span>
|
|
45
|
+
<span>${(_h = (_g = (_f = (_e = this.buildingInspection) === null || _e === void 0 ? void 0 : _e.buildingLevel) === null || _f === void 0 ? void 0 : _f.building) === null || _g === void 0 ? void 0 : _g.buildingComplex) === null || _h === void 0 ? void 0 : _h.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>${(((
|
|
54
|
+
<td>${(((_j = this.checklist) === null || _j === void 0 ? void 0 : _j.location) || '') + ' - ' + (((_k = this.checklist) === null || _k === void 0 ? void 0 : _k.constructionType) || '')}</td>
|
|
54
55
|
</tr>
|
|
55
56
|
<tr>
|
|
56
57
|
<th>검측 부위</th>
|
|
57
|
-
<td>${((
|
|
58
|
+
<td>${((_m = (_l = this.checklist) === null || _l === void 0 ? void 0 : _l.inspectionParts) === null || _m === void 0 ? void 0 : _m.join(', ')) || ''}</td>
|
|
58
59
|
</tr>
|
|
59
60
|
<tr>
|
|
60
61
|
<th>검측 요구일시</th>
|
|
@@ -69,63 +70,70 @@ let InspectionRequestDocument = class InspectionRequestDocument extends LitEleme
|
|
|
69
70
|
type="text"
|
|
70
71
|
name="memo"
|
|
71
72
|
class="inspection-memo-input"
|
|
72
|
-
.value=${((
|
|
73
|
+
.value=${((_o = this.buildingInspection) === null || _o === void 0 ? void 0 : _o.memo) || ''}
|
|
73
74
|
@input=${this._onInspectionMemoChange}
|
|
74
75
|
placeholder="검측사항을 입력하세요."
|
|
75
76
|
/>
|
|
76
77
|
`
|
|
77
|
-
: html ` <div class="inspection-memo-text">${(
|
|
78
|
+
: html ` <div class="inspection-memo-text">${(_p = this.buildingInspection) === null || _p === void 0 ? void 0 : _p.memo}</div> `}
|
|
78
79
|
</td>
|
|
79
80
|
</tr>
|
|
80
81
|
</table>
|
|
81
82
|
</div>
|
|
82
83
|
|
|
83
|
-
<div class="
|
|
84
|
-
<div class="attachment-
|
|
85
|
-
<
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
공사 참여자 실명부
|
|
84
|
+
<div class="document-footer">
|
|
85
|
+
<div class="attachment-section">
|
|
86
|
+
<div class="attachment-title">첨부 파일</div>
|
|
87
|
+
<div class="attachment-list">
|
|
88
|
+
<div class="attachment-item">시공자의 검측 체크리스트</div>
|
|
89
|
+
${this.mode === InspectionMode.EDIT
|
|
90
|
+
? html `
|
|
91
|
+
<div class="attachment-item upload">
|
|
92
|
+
실명부
|
|
93
|
+
<md-outlined-button @click=${this._onNameListUpload.bind(this)}>
|
|
94
|
+
${((_q = this.checklist) === null || _q === void 0 ? void 0 : _q.nameListAttachment) ? '다시 업로드' : '업로드'}
|
|
95
|
+
</md-outlined-button>
|
|
96
|
+
${((_r = this.checklist) === null || _r === void 0 ? void 0 : _r.nameListAttachment) ? html `<span>(업로드 완료)</span>` : ''}
|
|
97
|
+
</div>
|
|
98
|
+
`
|
|
99
|
+
: ((_s = this.checklist) === null || _s === void 0 ? void 0 : _s.nameListAttachment)
|
|
100
|
+
? html `<div class="attachment-item">실명부</div>`
|
|
101
|
+
: ''}
|
|
102
|
+
${attachmentCount > 0 ? html `<div class="attachment-item">첨부 사진 ${attachmentCount}개</div>` : ''}
|
|
103
103
|
</div>
|
|
104
104
|
</div>
|
|
105
|
-
</div>
|
|
106
105
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
106
|
+
<div class="signature-section">
|
|
107
|
+
<div class="signature-box">
|
|
108
|
+
<div class="signature-title">공종별 시공 관리자</div>
|
|
109
|
+
<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>
|
|
110
|
+
<div class="signature-container">
|
|
111
|
+
${((_v = this.checklist) === null || _v === void 0 ? void 0 : _v.taskConstructorSignature)
|
|
112
|
+
? html `<img class="signature-image" src="${this.checklist.taskConstructorSignature}" alt="서명" />`
|
|
113
|
+
: ''}
|
|
114
|
+
</div>
|
|
113
115
|
</div>
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
116
|
+
<div class="signature-box">
|
|
117
|
+
<div class="signature-title">총괄 시공 책임자</div>
|
|
118
|
+
<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>
|
|
119
|
+
<div class="signature-container">
|
|
120
|
+
${((_y = this.checklist) === null || _y === void 0 ? void 0 : _y.overallConstructorSignature)
|
|
121
|
+
? html `<img class="signature-image" src="${this.checklist.overallConstructorSignature}" alt="서명" />`
|
|
122
|
+
: ''}
|
|
123
|
+
</div>
|
|
120
124
|
</div>
|
|
121
125
|
</div>
|
|
122
126
|
</div>
|
|
123
|
-
|
|
124
|
-
<div class="button-container">
|
|
125
|
-
<md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>
|
|
126
|
-
</div>
|
|
127
127
|
</div>
|
|
128
128
|
</div>
|
|
129
|
+
|
|
130
|
+
${this.mode === InspectionMode.EDIT
|
|
131
|
+
? html `
|
|
132
|
+
<div class="button-container">
|
|
133
|
+
<md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>
|
|
134
|
+
</div>
|
|
135
|
+
`
|
|
136
|
+
: ''}
|
|
129
137
|
`;
|
|
130
138
|
}
|
|
131
139
|
_formatDate(date) {
|
|
@@ -140,24 +148,22 @@ let InspectionRequestDocument = class InspectionRequestDocument extends LitEleme
|
|
|
140
148
|
bubbles: true
|
|
141
149
|
}));
|
|
142
150
|
}
|
|
143
|
-
//
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
// TODO: 참여자 실명부 팝업 구현
|
|
160
|
-
console.log('참여자 실명부 클릭');
|
|
151
|
+
// 실명부 업로드
|
|
152
|
+
_onNameListUpload() {
|
|
153
|
+
const input = document.createElement('input');
|
|
154
|
+
input.type = 'file';
|
|
155
|
+
input.accept = '.pdf,.doc,.docx,.jpg,.jpeg,.png';
|
|
156
|
+
input.onchange = (e) => {
|
|
157
|
+
const file = e.target.files[0];
|
|
158
|
+
if (file) {
|
|
159
|
+
// checklist에 파일과 업로드 플래그 저장
|
|
160
|
+
this.checklist = Object.assign(Object.assign({}, this.checklist), { nameListAttachment: file, isNameListAttachmentUploaded: true });
|
|
161
|
+
// 부모 컴포넌트에 변경사항 알림
|
|
162
|
+
this.dispatchEvent(new CustomEvent('name-list-file-selected', { detail: { file } }));
|
|
163
|
+
this.requestUpdate();
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
input.click();
|
|
161
167
|
}
|
|
162
168
|
// 확인 버튼
|
|
163
169
|
_onConfirm() {
|
|
@@ -195,16 +201,6 @@ InspectionRequestDocument.styles = [
|
|
|
195
201
|
margin-bottom: 10px;
|
|
196
202
|
}
|
|
197
203
|
|
|
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
204
|
.document-body {
|
|
209
205
|
padding: 20px;
|
|
210
206
|
}
|
|
@@ -247,55 +243,50 @@ InspectionRequestDocument.styles = [
|
|
|
247
243
|
|
|
248
244
|
.signature-section {
|
|
249
245
|
display: flex;
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
|
254
|
-
border-radius: 10px;
|
|
255
|
-
border: 2px solid #e1e8ed;
|
|
246
|
+
flex-direction: column;
|
|
247
|
+
align-items: flex-end;
|
|
248
|
+
gap: 15px;
|
|
256
249
|
}
|
|
257
250
|
|
|
258
251
|
.signature-box {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
padding: 20px;
|
|
264
|
-
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
|
265
|
-
border: 1px solid #d1d9e6;
|
|
252
|
+
display: flex;
|
|
253
|
+
align-items: center;
|
|
254
|
+
gap: 15px;
|
|
255
|
+
text-align: right;
|
|
266
256
|
}
|
|
267
257
|
|
|
268
258
|
.signature-title {
|
|
259
|
+
font-size: 14px;
|
|
269
260
|
font-weight: bold;
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
font-size: 16px;
|
|
273
|
-
border-bottom: 2px solid #3498db;
|
|
274
|
-
padding-bottom: 5px;
|
|
261
|
+
color: #333;
|
|
262
|
+
min-width: 120px;
|
|
275
263
|
}
|
|
276
264
|
|
|
277
265
|
.signature-name {
|
|
278
|
-
font-weight: bold;
|
|
279
|
-
margin-bottom: 15px;
|
|
280
|
-
color: #34495e;
|
|
281
266
|
font-size: 14px;
|
|
282
|
-
|
|
283
|
-
padding: 8px;
|
|
284
|
-
border-radius: 5px;
|
|
267
|
+
color: #333;
|
|
285
268
|
}
|
|
286
269
|
|
|
287
270
|
.signature-container {
|
|
288
271
|
position: relative;
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
padding: 10px;
|
|
292
|
-
margin-bottom: 10px;
|
|
293
|
-
min-height: 80px;
|
|
272
|
+
min-width: 100px;
|
|
273
|
+
min-height: 60px;
|
|
294
274
|
display: flex;
|
|
295
275
|
align-items: center;
|
|
296
276
|
justify-content: center;
|
|
297
277
|
}
|
|
298
278
|
|
|
279
|
+
.signature-container::after {
|
|
280
|
+
content: '(인)';
|
|
281
|
+
position: absolute;
|
|
282
|
+
bottom: 5px;
|
|
283
|
+
right: 5px;
|
|
284
|
+
font-size: 12px;
|
|
285
|
+
color: #333;
|
|
286
|
+
font-weight: bold;
|
|
287
|
+
z-index: 2;
|
|
288
|
+
}
|
|
289
|
+
|
|
299
290
|
.signature-image {
|
|
300
291
|
max-width: 140px;
|
|
301
292
|
max-height: 60px;
|
|
@@ -305,84 +296,50 @@ InspectionRequestDocument.styles = [
|
|
|
305
296
|
|
|
306
297
|
.attachment-section {
|
|
307
298
|
margin-top: 30px;
|
|
308
|
-
|
|
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);
|
|
299
|
+
margin-bottom: 30px;
|
|
313
300
|
}
|
|
314
301
|
|
|
315
302
|
.attachment-title {
|
|
316
303
|
font-weight: bold;
|
|
317
|
-
font-size:
|
|
318
|
-
color: #
|
|
319
|
-
margin-bottom:
|
|
304
|
+
font-size: 14px;
|
|
305
|
+
color: #333;
|
|
306
|
+
margin-bottom: 10px;
|
|
320
307
|
display: flex;
|
|
321
308
|
align-items: center;
|
|
322
309
|
gap: 8px;
|
|
323
310
|
}
|
|
324
311
|
|
|
325
312
|
.attachment-list {
|
|
326
|
-
|
|
327
|
-
flex-direction: column;
|
|
328
|
-
gap: 12px;
|
|
313
|
+
margin-left: 30px;
|
|
329
314
|
}
|
|
330
315
|
|
|
331
316
|
.attachment-item {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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);
|
|
317
|
+
margin-bottom: 5px;
|
|
318
|
+
color: #2196f3;
|
|
319
|
+
font-size: 14px;
|
|
320
|
+
line-height: 1.5;
|
|
353
321
|
}
|
|
354
322
|
|
|
355
|
-
.attachment-item
|
|
356
|
-
|
|
357
|
-
|
|
323
|
+
.attachment-item.upload {
|
|
324
|
+
display: flex;
|
|
325
|
+
align-items: center;
|
|
326
|
+
gap: 10px;
|
|
358
327
|
}
|
|
359
328
|
|
|
360
|
-
.attachment-item.
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
color: #
|
|
364
|
-
|
|
329
|
+
.attachment-item.upload md-outlined-button {
|
|
330
|
+
--md-outlined-button-container-height: 24px;
|
|
331
|
+
--md-outlined-button-label-text-size: 12px;
|
|
332
|
+
--md-outlined-button-outline-color: #666;
|
|
333
|
+
--md-outlined-button-label-text-color: #666;
|
|
365
334
|
}
|
|
366
335
|
|
|
367
|
-
.attachment-item.
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
color: #6c757d;
|
|
371
|
-
transform: none;
|
|
372
|
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
336
|
+
.attachment-item.upload span {
|
|
337
|
+
color: #666;
|
|
338
|
+
font-size: 12px;
|
|
373
339
|
}
|
|
374
340
|
|
|
375
341
|
.attachment-icon {
|
|
376
|
-
|
|
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;
|
|
342
|
+
display: none;
|
|
386
343
|
}
|
|
387
344
|
|
|
388
345
|
.date-section {
|
|
@@ -452,6 +409,12 @@ InspectionRequestDocument.styles = [
|
|
|
452
409
|
font-weight: bold;
|
|
453
410
|
border-radius: 8px;
|
|
454
411
|
}
|
|
412
|
+
|
|
413
|
+
.document-footer {
|
|
414
|
+
display: flex;
|
|
415
|
+
justify-content: space-between;
|
|
416
|
+
align-items: center;
|
|
417
|
+
}
|
|
455
418
|
`
|
|
456
419
|
];
|
|
457
420
|
__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":";AAAA,OAAO,yCAAyC,CAAA;AAChD,OAAO,4BAA4B,CAAA;AACnC,OAAO,yCAAyC,CAAA;AAEhD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAIjD,OAAO,qBAAqB,CAAA;AAE5B,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,+BAAa,CAAA;AACf,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAGM,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,UAAU;IAAlD;;QAwPuB,cAAS,GAAQ,EAAE,CAAA;QACnB,uBAAkB,GAAQ,EAAE,CAAA;QAC5B,SAAI,GAAmB,cAAc,CAAC,IAAI,CAAA;IAsKxE,CAAC;IApKC,MAAM;;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAA;QACnF,MAAM,eAAe,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,SAAS,0CAAE,cAAc,0CAAE,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAC/F,OAAO,GAAG,GAAG,IAAI,CAAC,4BAA4B,CAAA;QAChD,CAAC,EAAE,CAAC,CAAC,CAAA;QAEL,OAAO,IAAI,CAAA;;;;;;;sCAOuB,KAAK;;;;;;wBAMnB,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,2BAA2B,KAAI,EAAE;;;;wBAIjD,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,aAAa,0CAAE,QAAQ,0CAAE,eAAe,0CAAE,kBAAkB;;;;;;;;;sBASvF,CAAC,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,QAAQ,KAAI,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,gBAAgB,KAAI,EAAE,CAAC;;;;sBAInF,CAAA,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,eAAe,0CAAE,IAAI,CAAC,IAAI,CAAC,KAAI,EAAE;;;;sBAIjD,WAAW;;;;;oBAKb,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI;YACjC,CAAC,CAAC,IAAI,CAAA;;;;;mCAKS,CAAA,MAAA,IAAI,CAAC,kBAAkB,0CAAE,IAAI,KAAI,EAAE;mCACnC,IAAI,CAAC,uBAAuB;;;uBAGxC;YACH,CAAC,CAAC,IAAI,CAAA,sCAAsC,MAAA,IAAI,CAAC,kBAAkB,0CAAE,IAAI,SAAS;;;;;;;;;;;kBAWpF,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI;YACjC,CAAC,CAAC,IAAI,CAAA;;;qDAG6B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC1D,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,kBAAkB,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;;0BAEvD,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,kBAAkB,EAAC,CAAC,CAAC,IAAI,CAAA,uBAAuB,CAAC,CAAC,CAAC,EAAE;;qBAE1E;YACH,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,kBAAkB;gBAClC,CAAC,CAAC,IAAI,CAAA,wCAAwC;gBAC9C,CAAC,CAAC,EAAE;kBACN,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA,sCAAsC,eAAe,SAAS,CAAC,CAAC,CAAC,EAAE;;;;;;;8CAOjE,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,eAAe,0CAAE,IAAI;;oBAE/D,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,wBAAwB;YACxC,CAAC,CAAC,IAAI,CAAA,qCAAqC,IAAI,CAAC,SAAS,CAAC,wBAAwB,eAAe;YACjG,CAAC,CAAC,EAAE;;;;;8CAKsB,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,kBAAkB,0CAAE,IAAI;;oBAElE,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,2BAA2B;YAC3C,CAAC,CAAC,IAAI,CAAA,qCAAqC,IAAI,CAAC,SAAS,CAAC,2BAA2B,eAAe;YACpG,CAAC,CAAC,EAAE;;;;;;;;QAQhB,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI;YACjC,CAAC,CAAC,IAAI,CAAA;;2CAE6B,IAAI,CAAC,UAAU;;WAE/C;YACH,CAAC,CAAC,EAAE;KACP,CAAA;IACH,CAAC;IAEO,WAAW,CAAC,IAAU;QAC5B,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAA;IAC9H,CAAC;IAEO,uBAAuB,CAAC,CAAQ;QACtC,MAAM,MAAM,GAAG,CAAC,CAAC,MAA0B,CAAA;QAC3C,IAAI,CAAC,kBAAkB,mCAAQ,IAAI,CAAC,kBAAkB,KAAE,IAAI,EAAE,MAAM,CAAC,KAAK,GAAE,CAAA;QAE5E,mBAAmB;QACnB,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,wBAAwB,EAAE;YACxC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE;YAC9B,OAAO,EAAE,IAAI;SACd,CAAC,CACH,CAAA;IACH,CAAC;IAED,UAAU;IACF,iBAAiB;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC7C,KAAK,CAAC,IAAI,GAAG,MAAM,CAAA;QACnB,KAAK,CAAC,MAAM,GAAG,iCAAiC,CAAA;QAChD,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAM,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC9B,IAAI,IAAI,EAAE,CAAC;gBACT,4BAA4B;gBAC5B,IAAI,CAAC,SAAS,mCACT,IAAI,CAAC,SAAS,KACjB,kBAAkB,EAAE,IAAI,EACxB,4BAA4B,EAAE,IAAI,GACnC,CAAA;gBAED,mBAAmB;gBACnB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;gBACpF,IAAI,CAAC,aAAa,EAAE,CAAA;YACtB,CAAC;QACH,CAAC,CAAA;QACD,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC;IAED,QAAQ;IACA,UAAU;QAChB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACrE,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;;AA9ZM,gCAAM,GAAG;IACd,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkPF;CACF,AArPY,CAqPZ;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;4DAAoB;AACnB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;qEAA6B;AAC5B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;uDAA2C;AA1P3D,yBAAyB;IADrC,aAAa,CAAC,6BAA6B,CAAC;GAChC,yBAAyB,CAgarC","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 { openPopup } from '@operato/layout'\nimport { client } from '@operato/graphql'\nimport gql from 'graphql-tag'\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 today = this._formatDate(new Date())\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\">${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?.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 ${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=\"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.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 _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,27 @@
|
|
|
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
|
+
export declare enum InspectionResultStatus {
|
|
7
|
+
PASS = "PASS",// 합격
|
|
8
|
+
FAIL = "FAIL"
|
|
9
|
+
}
|
|
10
|
+
export declare enum InspectionResultType {
|
|
11
|
+
GENERAL = "GENERAL",// 일반
|
|
12
|
+
FOCUS = "FOCUS",// 중점
|
|
13
|
+
CONCEALED_WORK = "CONCEALED_WORK"
|
|
14
|
+
}
|
|
15
|
+
export declare class InspectionResultNotification extends LitElement {
|
|
16
|
+
static styles: import("lit").CSSResult[];
|
|
17
|
+
checklist: any;
|
|
18
|
+
buildingInspection: any;
|
|
19
|
+
project: any;
|
|
20
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
21
|
+
private _formatDate;
|
|
22
|
+
private _getAttachmentCount;
|
|
23
|
+
private _getOverallResult;
|
|
24
|
+
private _onInspectionTypeChange;
|
|
25
|
+
private _onInstructionsChange;
|
|
26
|
+
private _onConfirm;
|
|
27
|
+
}
|