@dssp/supervision 1.0.0-alpha.4 → 1.0.0-alpha.7

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 (91) hide show
  1. package/dist-client/pages/building-inspection/building-inspection-list.js +2 -1
  2. package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -1
  3. package/dist-client/pages/building-inspection/component/inspection-event-provider.js +3 -3
  4. package/dist-client/pages/building-inspection/component/inspection-event-provider.js.map +1 -1
  5. package/dist-client/pages/building-inspection/inspection-create-popup.js +5 -4
  6. package/dist-client/pages/building-inspection/inspection-create-popup.js.map +1 -1
  7. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +46 -0
  8. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js +930 -0
  9. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js.map +1 -0
  10. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.d.ts +2 -0
  11. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js +734 -0
  12. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js.map +1 -0
  13. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.d.ts +1 -0
  14. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.js +304 -0
  15. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.js.map +1 -0
  16. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.d.ts +15 -0
  17. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.js +430 -0
  18. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.js.map +1 -0
  19. package/dist-client/pages/checklist/checklist-view.d.ts +2 -0
  20. package/dist-client/pages/checklist/checklist-view.js +286 -185
  21. package/dist-client/pages/checklist/checklist-view.js.map +1 -1
  22. package/dist-client/pages/checklist-template/checklist-template-item.js +8 -3
  23. package/dist-client/pages/checklist-template/checklist-template-item.js.map +1 -1
  24. package/dist-client/pages/checklist-template/checklist-template-list.js +1 -1
  25. package/dist-client/pages/checklist-template/checklist-template-list.js.map +1 -1
  26. package/dist-client/route.d.ts +1 -1
  27. package/dist-client/route.js +3 -0
  28. package/dist-client/route.js.map +1 -1
  29. package/dist-client/stt/speech-to-text.d.ts +36 -0
  30. package/dist-client/stt/speech-to-text.js +89 -0
  31. package/dist-client/stt/speech-to-text.js.map +1 -0
  32. package/dist-client/stt/stt-utils.d.ts +28 -0
  33. package/dist-client/stt/stt-utils.js +146 -0
  34. package/dist-client/stt/stt-utils.js.map +1 -0
  35. package/dist-client/tsconfig.tsbuildinfo +1 -1
  36. package/dist-server/service/action-plan/index.d.ts +0 -1
  37. package/dist-server/service/action-plan/index.js +1 -2
  38. package/dist-server/service/action-plan/index.js.map +1 -1
  39. package/dist-server/service/building-inspection/building-inspection-mutation.d.ts +1 -0
  40. package/dist-server/service/building-inspection/building-inspection-mutation.js +83 -10
  41. package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -1
  42. package/dist-server/service/building-inspection/building-inspection-query.d.ts +2 -1
  43. package/dist-server/service/building-inspection/building-inspection-query.js +31 -2
  44. package/dist-server/service/building-inspection/building-inspection-query.js.map +1 -1
  45. package/dist-server/service/building-inspection/building-inspection-type.d.ts +5 -2
  46. package/dist-server/service/building-inspection/building-inspection-type.js +16 -4
  47. package/dist-server/service/building-inspection/building-inspection-type.js.map +1 -1
  48. package/dist-server/service/building-inspection/building-inspection.d.ts +9 -0
  49. package/dist-server/service/building-inspection/building-inspection.js +40 -2
  50. package/dist-server/service/building-inspection/building-inspection.js.map +1 -1
  51. package/dist-server/service/building-inspection/index.d.ts +2 -4
  52. package/dist-server/service/building-inspection/index.js +2 -4
  53. package/dist-server/service/building-inspection/index.js.map +1 -1
  54. package/dist-server/service/checklist/checklist-history.d.ts +8 -0
  55. package/dist-server/service/checklist/checklist-history.js +36 -0
  56. package/dist-server/service/checklist/checklist-history.js.map +1 -1
  57. package/dist-server/service/checklist/checklist.d.ts +10 -0
  58. package/dist-server/service/checklist/checklist.js +45 -3
  59. package/dist-server/service/checklist/checklist.js.map +1 -1
  60. package/dist-server/service/checklist/index.d.ts +0 -2
  61. package/dist-server/service/checklist/index.js +1 -3
  62. package/dist-server/service/checklist/index.js.map +1 -1
  63. package/dist-server/service/checklist-item-comment/index.d.ts +0 -2
  64. package/dist-server/service/checklist-item-comment/index.js +1 -3
  65. package/dist-server/service/checklist-item-comment/index.js.map +1 -1
  66. package/dist-server/service/checklist-template-item/checklist-template-item.js +2 -4
  67. package/dist-server/service/checklist-template-item/checklist-template-item.js.map +1 -1
  68. package/dist-server/service/index.d.ts +0 -1
  69. package/dist-server/service/index.js +1 -11
  70. package/dist-server/service/index.js.map +1 -1
  71. package/dist-server/service/issue/index.d.ts +0 -1
  72. package/dist-server/service/issue/index.js +1 -2
  73. package/dist-server/service/issue/index.js.map +1 -1
  74. package/dist-server/service/project-report/index.d.ts +0 -1
  75. package/dist-server/service/project-report/index.js +1 -2
  76. package/dist-server/service/project-report/index.js.map +1 -1
  77. package/dist-server/service/supervisor/index.d.ts +0 -1
  78. package/dist-server/service/supervisor/index.js +1 -2
  79. package/dist-server/service/supervisor/index.js.map +1 -1
  80. package/dist-server/tsconfig.tsbuildinfo +1 -1
  81. package/package.json +13 -13
  82. package/things-factory.config.js +3 -1
  83. package/dist-server/service/building-inspection/event-subscriber.d.ts +0 -7
  84. package/dist-server/service/building-inspection/event-subscriber.js +0 -21
  85. package/dist-server/service/building-inspection/event-subscriber.js.map +0 -1
  86. package/dist-server/service/checklist/event-subscriber.d.ts +0 -7
  87. package/dist-server/service/checklist/event-subscriber.js +0 -21
  88. package/dist-server/service/checklist/event-subscriber.js.map +0 -1
  89. package/dist-server/service/checklist-item-comment/event-subscriber.d.ts +0 -7
  90. package/dist-server/service/checklist-item-comment/event-subscriber.js +0 -21
  91. package/dist-server/service/checklist-item-comment/event-subscriber.js.map +0 -1
@@ -0,0 +1,930 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/icon/icon.js';
3
+ import '@material/web/button/elevated-button.js';
4
+ import '@material/web/textfield/outlined-text-field.js';
5
+ import '@material/web/button/outlined-button.js';
6
+ import { PageView } from '@operato/shell';
7
+ import { css, html } from 'lit';
8
+ import { customElement, state, query } from 'lit/decorators.js';
9
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
10
+ import { client } from '@operato/graphql';
11
+ import gql from 'graphql-tag';
12
+ import { notify, openPopup } from '@operato/layout';
13
+ import './component/notice-comment-popup';
14
+ import './component/grid-inspection-create-popup';
15
+ import { BUILDING_INSPECTION_STATUS_DISPLAY, BuildingInspectionStatus } from '../building-inspection/building-inspection-list';
16
+ import { verifyBiometric } from '@things-factory/auth-base/dist-client';
17
+ import { OxPrompt } from '@operato/popup';
18
+ import './component/plan-preview-popup';
19
+ let BuildingInspectionGridDetail = class BuildingInspectionGridDetail extends ScopedElementsMixin(PageView) {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.defaultProject = {
23
+ name: '',
24
+ buildingComplex: {
25
+ buildings: []
26
+ }
27
+ };
28
+ this.project = Object.assign({}, this.defaultProject);
29
+ this.buildingInspections = [];
30
+ this.buildingInspectionSummaryOfProject = {};
31
+ this.buildingInspectionSummaryOfBuildingLevel = {};
32
+ this.selectedBuilding = {};
33
+ this.selectedLevel = {};
34
+ this.selectedInspection = {};
35
+ this.cell = '';
36
+ }
37
+ get context() {
38
+ return {
39
+ title: '층별 시공검측 상세 정보'
40
+ };
41
+ }
42
+ render() {
43
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
44
+ // 그리드 가로, 세로 길이 배열 생성
45
+ const planXScale = Array.from({ length: ((_b = (_a = this.project) === null || _a === void 0 ? void 0 : _a.buildingComplex) === null || _b === void 0 ? void 0 : _b.planXScale) || 0 }, (_, i) => i);
46
+ const planYScale = Array.from({ length: ((_d = (_c = this.project) === null || _c === void 0 ? void 0 : _c.buildingComplex) === null || _d === void 0 ? void 0 : _d.planYScale) || 0 }, (_, i) => i);
47
+ return html `
48
+ <div header>
49
+ <h2>${this.project.name} ${(_e = this.selectedBuilding) === null || _e === void 0 ? void 0 : _e.name} ${(_f = this.selectedLevel) === null || _f === void 0 ? void 0 : _f.floorDisplayName}층</h2>
50
+ <div button-container>
51
+ <md-elevated-button href=${`project-update/${this.project.id}`}>
52
+ <md-icon slot="icon">assignment</md-icon>프로젝트 정보 수정
53
+ </md-elevated-button>
54
+ <md-elevated-button href=${`project-plan-management/${this.project.id}`}>
55
+ <md-icon slot="icon">description</md-icon>도면 관리
56
+ </md-elevated-button>
57
+ <md-elevated-button @click=${this._openPlanPreviewPopup}>
58
+ <md-icon slot="icon">folder_eye</md-icon>추가 도면 보기
59
+ </md-elevated-button>
60
+ </div>
61
+ </div>
62
+
63
+ <div body>
64
+ <div left>
65
+ <div select>
66
+ <div>
67
+ <md-filled-select building @change=${this._onSelectBuilding}>
68
+ ${(_j = (_h = (_g = this.project) === null || _g === void 0 ? void 0 : _g.buildingComplex) === null || _h === void 0 ? void 0 : _h.buildings) === null || _j === void 0 ? void 0 : _j.map(building => {
69
+ var _a;
70
+ const selected = building.id === ((_a = this.selectedBuilding) === null || _a === void 0 ? void 0 : _a.id);
71
+ return html ` <md-select-option ?selected=${selected} .value=${building.id}>
72
+ <div slot="headline">${building.name}</div>
73
+ </md-select-option>`;
74
+ })}
75
+ </md-filled-select>
76
+
77
+ <md-filled-select level @change=${this._onSelectBuildingLevel}>
78
+ ${(_l = (_k = this.selectedBuilding) === null || _k === void 0 ? void 0 : _k.buildingLevels) === null || _l === void 0 ? void 0 : _l.map(level => {
79
+ const selected = level.id === this.selectedLevel.id;
80
+ return html `<md-select-option ?selected=${selected} .value=${level.id}>
81
+ <div slot="headline">${level.floor}</div>
82
+ </md-select-option>`;
83
+ })}
84
+ </md-filled-select>
85
+ </div>
86
+
87
+ <div state>
88
+ <span>
89
+ <md-icon request slot="icon">frame_inspect</md-icon> 검측대기
90
+ <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.WAIT.toLowerCase()]}</span>
91
+ </span>
92
+ <span>
93
+ <md-icon request slot="icon">exclamation</md-icon> 검측요청
94
+ <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.REQUEST.toLowerCase()]}</span>
95
+ </span>
96
+ <span>
97
+ <md-icon pass slot="icon">check</md-icon> 합격
98
+ <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.PASS.toLowerCase()]}</span>
99
+ </span>
100
+ <span>
101
+ <md-icon fail slot="icon">close</md-icon> 불합격
102
+ <span bold>${this.buildingInspectionSummaryOfProject[BuildingInspectionStatus.FAIL.toLowerCase()]}</span>
103
+ </span>
104
+ </div>
105
+ </div>
106
+
107
+ <div drawing>
108
+ <img src=${((_m = this.selectedLevel) === null || _m === void 0 ? void 0 : _m.mainDrawingImage) || '/assets/images/img-drawing-default.png'} />
109
+
110
+ <div grid>
111
+ ${planXScale.map(v => html ` <div row=${v}>
112
+ ${planYScale.map(vv => {
113
+ const buildingInspection = this.buildingInspections.find(i => i.cellX === v && i.cellY === vv);
114
+ const status = (buildingInspection === null || buildingInspection === void 0 ? void 0 : buildingInspection.status) || '';
115
+ return html `<div
116
+ column=${vv}
117
+ cell=${`${v},${vv}`}
118
+ buildingInspectionId=${buildingInspection === null || buildingInspection === void 0 ? void 0 : buildingInspection.id}
119
+ status=${status}
120
+ @click=${this._onClickGrid}
121
+ >
122
+ ${this._getIconHtmlByStatus(status)}
123
+ </div>`;
124
+ })}
125
+ </div>`)}
126
+ </div>
127
+ </div>
128
+ </div>
129
+
130
+ <div right>
131
+ <div top bold>
132
+ <div>신규 등록 현황</div>
133
+ <div content>
134
+ <span>
135
+ <md-icon request slot="icon">frame_inspect</md-icon>
136
+ ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.WAIT.toLowerCase()]}
137
+ </span>
138
+ <span>
139
+ <md-icon request slot="icon">exclamation</md-icon>
140
+ ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.REQUEST.toLowerCase()]}
141
+ </span>
142
+ <span>
143
+ <md-icon pass slot="icon">check</md-icon>
144
+ ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.PASS.toLowerCase()]}
145
+ </span>
146
+ <span>
147
+ <md-icon fail slot="icon">close</md-icon>
148
+ ${this.buildingInspectionSummaryOfBuildingLevel[BuildingInspectionStatus.FAIL.toLowerCase()]}
149
+ </span>
150
+ </div>
151
+ </div>
152
+
153
+ <div bottom>
154
+ <div name bold>층별 공지사항</div>
155
+ <md-elevated-button @click=${e => this._onClicPopupNotice()}>
156
+ 공지사항 확인하기(${((_o = this.selectedLevel) === null || _o === void 0 ? void 0 : _o.noticeCount) || 0})
157
+ </md-elevated-button>
158
+
159
+ <div name bold>시공검측 세부사항</div>
160
+ ${html `
161
+ <div view>
162
+ <div status>
163
+ ${this._getIconHtmlByStatus(this.selectedInspection.status)}
164
+ <span bold> ${BUILDING_INSPECTION_STATUS_DISPLAY[this.selectedInspection.status]}</span>
165
+ </div>
166
+
167
+ <div>
168
+ <div date>공종 : ${((_q = (_p = this.selectedInspection) === null || _p === void 0 ? void 0 : _p.checklist) === null || _q === void 0 ? void 0 : _q.constructionType) || ''}</div>
169
+ </div>
170
+
171
+ <hr />
172
+
173
+ <div>
174
+ <div date>세부 공종 : ${((_s = (_r = this.selectedInspection) === null || _r === void 0 ? void 0 : _r.checklist) === null || _s === void 0 ? void 0 : _s.constructionDetailType) || ''}</div>
175
+ </div>
176
+
177
+ <hr />
178
+ <div>
179
+ <div date>검측일 : ${this.selectedInspection.requestDate}</div>
180
+ </div>
181
+
182
+ <hr />
183
+
184
+ <div manager>
185
+ 담당자 : ${(_u = (_t = this.selectedInspection) === null || _t === void 0 ? void 0 : _t.manager) === null || _u === void 0 ? void 0 : _u.name} <br />
186
+ ${(_w = (_v = this.selectedInspection) === null || _v === void 0 ? void 0 : _v.manager) === null || _w === void 0 ? void 0 : _w.phone}
187
+ </div>
188
+ <hr />
189
+ </div>
190
+
191
+ <!-- 전층 동일 적용 버튼 -->
192
+ ${this.selectedInspection.status
193
+ ? html `<md-filled-button apply-to-all @click=${() => this._onClickApplyToAll()}>전층 동일 적용</md-filled-button>`
194
+ : html ``}
195
+
196
+ <!-- 검측 정보 등록, 수정 버튼 -->
197
+ ${!this.cell || this.selectedInspection.status == BuildingInspectionStatus.PASS
198
+ ? html ``
199
+ : !this.selectedInspection.status
200
+ ? html `<md-outlined-button @click=${() => this._onClickCreateInspection()}>검측 정보 등록 </md-outlined-button>`
201
+ : html `<md-filled-button update @click=${() => this._onClickUpdateInspection()}
202
+ >검측 정보 수정
203
+ </md-filled-button> `}
204
+ `}
205
+ </div>
206
+ </div>
207
+ </div>
208
+ `;
209
+ }
210
+ async pageInitialized(lifecycle) { }
211
+ async pageUpdated(changes, lifecycle) {
212
+ if (this.active) {
213
+ const params = lifecycle.params;
214
+ await this.initProject(lifecycle.resourceId, params.buildingId, params.levelId);
215
+ }
216
+ }
217
+ async initProject(projectId = '', buildingId = '', levelId = '') {
218
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
219
+ const response = await client.query({
220
+ query: gql `
221
+ query Project(
222
+ $id: String!
223
+ $projectId: String!
224
+ $buildingLevelId: String!
225
+ $params: BuildingInspectionsOfBuildingLevel!
226
+ ) {
227
+ project(id: $id) {
228
+ id
229
+ name
230
+ buildingComplex {
231
+ id
232
+ planXScale
233
+ planYScale
234
+ overallConstructorEmails
235
+ taskConstructorEmails
236
+ overallSupervisoryEmails
237
+ taskSupervisoryEmails
238
+
239
+ buildings {
240
+ id
241
+ name
242
+ }
243
+ }
244
+ }
245
+
246
+ buildingInspectionSummaryOfProject(projectId: $projectId) {
247
+ wait
248
+ request
249
+ pass
250
+ fail
251
+ }
252
+
253
+ buildingInspectionSummaryOfBuildingLevel(buildingLevelId: $buildingLevelId) {
254
+ wait
255
+ request
256
+ pass
257
+ fail
258
+ }
259
+
260
+ buildingInspectionsOfBuildingLevel(params: $params) {
261
+ items {
262
+ id
263
+ cellX
264
+ cellY
265
+ status
266
+ requestDate
267
+ creator {
268
+ id
269
+ name
270
+ }
271
+ }
272
+ }
273
+ }
274
+ `,
275
+ variables: {
276
+ id: projectId,
277
+ projectId: projectId,
278
+ buildingLevelId: levelId,
279
+ params: { buildingLevelId: levelId }
280
+ }
281
+ });
282
+ if (response.errors)
283
+ return;
284
+ this.project = (_a = response.data) === null || _a === void 0 ? void 0 : _a.project;
285
+ this.buildingInspections = (_c = (_b = response.data) === null || _b === void 0 ? void 0 : _b.buildingInspectionsOfBuildingLevel) === null || _c === void 0 ? void 0 : _c.items;
286
+ this.buildingInspectionSummaryOfProject = (_d = response.data) === null || _d === void 0 ? void 0 : _d.buildingInspectionSummaryOfProject;
287
+ this.buildingInspectionSummaryOfBuildingLevel = (_e = response.data) === null || _e === void 0 ? void 0 : _e.buildingInspectionSummaryOfBuildingLevel;
288
+ // buildingId 파라미터가 있으면 선택된 빌딩, 없으면 첫번째 빌딩 선택
289
+ this.selectedBuilding = buildingId
290
+ ? (_h = (_g = (_f = this.project) === null || _f === void 0 ? void 0 : _f.buildingComplex) === null || _g === void 0 ? void 0 : _g.buildings) === null || _h === void 0 ? void 0 : _h.filter(v => v.id === buildingId)[0]
291
+ : (_l = (_k = (_j = this.project) === null || _j === void 0 ? void 0 : _j.buildingComplex) === null || _k === void 0 ? void 0 : _k.buildings) === null || _l === void 0 ? void 0 : _l[0];
292
+ // 선택된 동의 층 리스트 가져오기
293
+ this.selectedBuilding = await this._getBuilding(this.selectedBuilding.id);
294
+ // levelId 파라미터가 있으면 선택된 층, 없으면 첫번째 층 선택
295
+ this.selectedLevel = levelId
296
+ ? (_o = (_m = this.selectedBuilding) === null || _m === void 0 ? void 0 : _m.buildingLevels) === null || _o === void 0 ? void 0 : _o.filter(v => v.id === levelId)[0]
297
+ : (_q = (_p = this.selectedBuilding) === null || _p === void 0 ? void 0 : _p.buildingLevels) === null || _q === void 0 ? void 0 : _q[0];
298
+ // 동, 층이 랜더링 된 후에 select를 위해 이 시점에서 랜더링
299
+ this.selectedBuilding = await Object.assign({}, this.selectedBuilding);
300
+ // 기본 값 셋팅 select
301
+ await this.htmlSelectBuilding.select(this.selectedBuilding.id);
302
+ await this.htmlSelectLevel.select(this.selectedLevel.id);
303
+ }
304
+ async _getBuilding(buildingId = '') {
305
+ var _a;
306
+ const response = await client.query({
307
+ query: gql `
308
+ query Building($id: String!) {
309
+ building(id: $id) {
310
+ id
311
+ name
312
+ buildingLevels {
313
+ id
314
+ floor
315
+ floorDisplayName
316
+ noticeCount
317
+ mainDrawing {
318
+ id
319
+ name
320
+ fullpath
321
+ }
322
+ mainDrawingImage
323
+ }
324
+ }
325
+ }
326
+ `,
327
+ variables: {
328
+ id: buildingId
329
+ }
330
+ });
331
+ if (response.errors)
332
+ return;
333
+ return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.building) || {};
334
+ }
335
+ async _getBuildingInspection(buildingInspectionId = '') {
336
+ var _a;
337
+ const response = await client.query({
338
+ query: gql `
339
+ query BuildingInspection($id: String!) {
340
+ buildingInspection(id: $id) {
341
+ id
342
+ cellX
343
+ cellY
344
+ status
345
+ requestDate
346
+
347
+ checklist {
348
+ id
349
+ name
350
+ constructionType
351
+ constructionDetailType
352
+ location
353
+ inspectionParts
354
+ documentNo
355
+ constructionInspectionDate
356
+ supervisorInspectionDate
357
+ overallConstructorSignature
358
+ taskConstructorSignature
359
+ overallSupervisorySignature
360
+ taskSupervisorySignature
361
+
362
+ checklistItems {
363
+ id
364
+ name
365
+ sequence
366
+ mainType
367
+ detailType
368
+ inspctionCriteria
369
+ constructionConfirmStatus
370
+ supervisoryConfirmStatus
371
+ checklistItemCommentCount
372
+ checklistItemAttachmentCount
373
+ }
374
+ }
375
+
376
+ manager {
377
+ userId
378
+ name
379
+ }
380
+ }
381
+ }
382
+ `,
383
+ variables: {
384
+ id: buildingInspectionId
385
+ }
386
+ });
387
+ if (response.errors)
388
+ return;
389
+ return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.buildingInspection) || {};
390
+ }
391
+ async _onSelectBuilding(e) {
392
+ var _a, _b;
393
+ const buildingId = e.target.value;
394
+ this.selectedBuilding = await this._getBuilding(buildingId);
395
+ this.selectedLevel = Object.assign({}, (_b = (_a = this.selectedBuilding) === null || _a === void 0 ? void 0 : _a.buildingLevels) === null || _b === void 0 ? void 0 : _b[0]);
396
+ this.refresh();
397
+ }
398
+ _onSelectBuildingLevel(e) {
399
+ var _a, _b, _c;
400
+ // SELECT event는 target, 팝업 Close는 detail
401
+ const buildingLevelId = ((_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.value) || e.detail.buildingLevelId;
402
+ this.selectedLevel = Object.assign({}, (((_c = (_b = this.selectedBuilding) === null || _b === void 0 ? void 0 : _b.buildingLevels) === null || _c === void 0 ? void 0 : _c.find(v => v.id == buildingLevelId)) || {}));
403
+ this.refresh();
404
+ }
405
+ async _onClickGrid(e) {
406
+ var _a;
407
+ const target = e.currentTarget;
408
+ const buildingInspectionId = target.getAttribute('buildingInspectionId');
409
+ const cell = target.getAttribute('cell');
410
+ // active 속성 모두 제거후 클릭한 셀만 active로 변경
411
+ (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('div[cell][active]').forEach(e => e.removeAttribute('active'));
412
+ target.setAttribute('active', true);
413
+ const [cellX, cellY] = cell.split(',');
414
+ this.selectedInspection = buildingInspectionId ? await this._getBuildingInspection(buildingInspectionId) : { cellX, cellY };
415
+ this.cell = cell;
416
+ }
417
+ _onClicPopupNotice() {
418
+ var _a, _b;
419
+ openPopup(html `<notice-comment-popup
420
+ .buildingLevelId=${this.selectedLevel.id}
421
+ .title=${`${(_a = this.selectedBuilding) === null || _a === void 0 ? void 0 : _a.name} ${(_b = this.selectedLevel) === null || _b === void 0 ? void 0 : _b.floor}층 공지사항`}
422
+ @change-comment=${(e) => {
423
+ if (e.detail.type === 'create') {
424
+ this.selectedLevel.noticeCount++; // 코멘트 카운트 + 1
425
+ }
426
+ else if (e.detail.type === 'delete') {
427
+ this.selectedLevel.noticeCount--; // 코멘트 카운트 - 1
428
+ }
429
+ this.requestUpdate();
430
+ }}
431
+ ></notice-comment-popup>`, { backdrop: true, size: 'medium', title: '층별 공지사항' });
432
+ }
433
+ _onClickCreateInspection() {
434
+ if (!this.cell) {
435
+ notify({ message: '셀을 선택해주세요.' });
436
+ return;
437
+ }
438
+ openPopup(html `
439
+ <grid-inspection-create-popup
440
+ .projectId=${this.project.id}
441
+ .selectedBuildingId=${this.selectedBuilding.id}
442
+ .selectedBuildingLevelId=${this.selectedLevel.id}
443
+ .cell=${this.cell}
444
+ @requestRefresh=${async (e) => {
445
+ await this.refresh(e.detail.buildingInspectionId);
446
+ }}
447
+ ></grid-inspection-create-popup>
448
+ `, { backdrop: true, size: 'large', title: '검측 요청서 등록' });
449
+ }
450
+ _onClickUpdateInspection() {
451
+ var _a;
452
+ openPopup(html `
453
+ <div style="overflow-y: auto; height: 100%;">
454
+ <checklist-view
455
+ .mode=${"EDITOR" /* ChecklistMode.EDITOR */}
456
+ .status=${this.selectedInspection.status}
457
+ .checklist=${this.selectedInspection.checklist || {}}
458
+ .buildingComplex=${((_a = this.project) === null || _a === void 0 ? void 0 : _a.buildingComplex) || {}}
459
+ ></checklist-view>
460
+
461
+ <div style="text-align: right; margin-right: 20px; margin-bottom: 15px">
462
+ <md-elevated-button
463
+ ?disabled=${this.selectedInspection.status == BuildingInspectionStatus.PASS}
464
+ @click=${this._onClickModifyChecklist.bind(this)}
465
+ >
466
+ <md-icon slot="icon">assignment</md-icon>등록
467
+ </md-elevated-button>
468
+ </div>
469
+ </div>
470
+ `, { backdrop: true, size: 'large', title: '검측 요청서 수정' });
471
+ }
472
+ async refresh(buildingInspectionId = '') {
473
+ // 그리드, 서머리 정보 갱신
474
+ await this.initProject(this.project.id, this.selectedBuilding.id, this.selectedLevel.id);
475
+ // 선택된 검측 정보 갱신
476
+ this.selectedInspection = buildingInspectionId ? await this._getBuildingInspection(buildingInspectionId) : {};
477
+ }
478
+ _getIconHtmlByStatus(status) {
479
+ if (!status)
480
+ return '';
481
+ if (status == BuildingInspectionStatus.WAIT || status == BuildingInspectionStatus.OVERALL_WAIT) {
482
+ return html `<md-icon request slot="icon">frame_inspect</md-icon>`;
483
+ }
484
+ if (status == BuildingInspectionStatus.REQUEST || status == BuildingInspectionStatus.OVERALL_REQUEST) {
485
+ return html `<md-icon request slot="icon">exclamation</md-icon>`;
486
+ }
487
+ if (status == BuildingInspectionStatus.PASS) {
488
+ return html `<md-icon pass slot="icon">check</md-icon>`;
489
+ }
490
+ return html `<md-icon fail slot="icon">close</md-icon>`;
491
+ }
492
+ _onClickModifyChecklist() {
493
+ this.validateChecklist(this.selectedInspection.checklist);
494
+ }
495
+ async validateChecklist(checklist) {
496
+ var _a, _b;
497
+ try {
498
+ const result = await verifyBiometric();
499
+ if (result.verified) {
500
+ console.log('Verification successful. Proceeding with sensitive action.');
501
+ }
502
+ else {
503
+ notify({ message: 'Verification failed:' + result.message });
504
+ return;
505
+ }
506
+ }
507
+ catch (error) {
508
+ notify({ message: 'Error during biometric verification:' + error });
509
+ return;
510
+ }
511
+ const response = await client.mutate({
512
+ mutation: gql `
513
+ mutation UpdateBuildingInspectionChecklist($buildingInspection: UpdateBuildingInspectionSubmitType!) {
514
+ updateBuildingInspectionChecklist(buildingInspection: $buildingInspection)
515
+ }
516
+ `,
517
+ variables: {
518
+ buildingInspection: {
519
+ id: this.selectedInspection.id,
520
+ checklist: {
521
+ id: checklist.id,
522
+ overallConstructorSignature: checklist.overallConstructorSignature,
523
+ taskConstructorSignature: checklist.taskConstructorSignature,
524
+ overallSupervisorySignature: checklist.overallSupervisorySignature,
525
+ taskSupervisorySignature: checklist.taskSupervisorySignature
526
+ },
527
+ checklistItem: checklist.checklistItems.map(item => ({
528
+ id: item.id,
529
+ constructionConfirmStatus: item.constructionConfirmStatus,
530
+ supervisoryConfirmStatus: item.supervisoryConfirmStatus
531
+ }))
532
+ }
533
+ }
534
+ });
535
+ if (!response.errors) {
536
+ notify({ message: '검측 요청서를 등록하였습니다.' });
537
+ this.refresh(this.selectedInspection.id);
538
+ history.back();
539
+ }
540
+ else {
541
+ notify({ message: ((_b = (_a = response.errors) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) || '검측 요청서 등록에 실패하였습니다.', level: 'error' });
542
+ }
543
+ }
544
+ async _onClickApplyToAll() {
545
+ var _a, _b;
546
+ if ((await OxPrompt.open({
547
+ title: '전층 동일 적용',
548
+ text: '해당 검측을 전층에 동일하게 적용 하시겠습니까?',
549
+ confirmButton: { text: '확인' },
550
+ cancelButton: { text: '취소' }
551
+ })) === false) {
552
+ return;
553
+ }
554
+ const response = await client.mutate({
555
+ mutation: gql `
556
+ mutation ApplyToAllBuildingInspection($buildingInspectionId: String!) {
557
+ applyToAllBuildingInspection(buildingInspectionId: $buildingInspectionId)
558
+ }
559
+ `,
560
+ variables: {
561
+ buildingInspectionId: this.selectedInspection.id
562
+ }
563
+ });
564
+ if (!response.errors) {
565
+ notify({ message: '전층 동일 적용 완료' });
566
+ this.refresh(this.selectedInspection.id);
567
+ }
568
+ else {
569
+ notify({ message: ((_b = (_a = response.errors) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) || '전층 동일 적용에 실패하였습니다.', level: 'error' });
570
+ }
571
+ }
572
+ _openPlanPreviewPopup() {
573
+ openPopup(html `<plan-preview-popup .buildingLevelId=${this.selectedLevel.id}></plan-preview-popup>`, {
574
+ backdrop: true,
575
+ size: 'large',
576
+ title: '추가 도면 보기'
577
+ });
578
+ }
579
+ };
580
+ BuildingInspectionGridDetail.styles = [
581
+ css `
582
+ :host {
583
+ display: grid;
584
+ grid-template-rows: 75px auto;
585
+ color: #4e5055;
586
+
587
+ width: 100%;
588
+ background-color: #f7f7f7;
589
+ overflow-y: auto;
590
+
591
+ --grid-record-emphasized-background-color: red;
592
+ --grid-record-emphasized-color: yellow;
593
+ }
594
+
595
+ md-filled-button {
596
+ --md-filled-button-container-color: #0595e5;
597
+ --md-filled-button-container-height: 30px;
598
+ --md-filled-button-trailing-space: 15px;
599
+ --md-filled-button-leading-space: 15px;
600
+ }
601
+ md-filled-button[update] {
602
+ --md-filled-button-container-color: #42b382;
603
+ }
604
+ md-filled-button[apply-to-all] {
605
+ --md-filled-button-container-color: #aaa;
606
+ }
607
+ md-outlined-button {
608
+ color: #586878;
609
+ font-weight: bold;
610
+ --md-outlined-button-label-text-size: 13px;
611
+ --md-outlined-button-container-height: 30px;
612
+ --md-outlined-button-trailing-space: 15px;
613
+ --md-outlined-button-leading-space: 15px;
614
+ }
615
+ md-filled-select {
616
+ width: auto;
617
+ min-width: 150px;
618
+ --md-filled-select-text-field-container-color: transparent;
619
+ --md-filled-select-text-field-active-indicator-color: #999;
620
+ --md-filled-select-text-field-input-text-size: 14px;
621
+ --md-filled-select-text-field-input-text-weight: bold;
622
+ --md-filled-select-text-field-input-text-line-height: 6px;
623
+ }
624
+ md-filled-select[level] {
625
+ min-width: 110px;
626
+ margin-left: 20px;
627
+ }
628
+
629
+ md-icon[request],
630
+ md-icon[pass],
631
+ md-icon[fail] {
632
+ width: 20px;
633
+ height: 20px;
634
+ margin-right: 4px;
635
+ border-radius: 5px;
636
+ font-size: 21px;
637
+ font-weight: 700;
638
+ color: #fff;
639
+ }
640
+ md-icon[request] {
641
+ background-color: #4e5055;
642
+ }
643
+ md-icon[pass] {
644
+ background-color: #4bbb4a;
645
+ }
646
+ md-icon[fail] {
647
+ background-color: #ff4444;
648
+ }
649
+
650
+ *[bold] {
651
+ font-weight: bold;
652
+ }
653
+
654
+ div[header] {
655
+ display: flex;
656
+ margin: 0px 20px;
657
+
658
+ h2 {
659
+ flex: 0.5;
660
+ color: #3f71a0;
661
+ }
662
+
663
+ div[button-container] {
664
+ display: flex;
665
+ align-items: center;
666
+ justify-content: end;
667
+ flex: 0.5;
668
+
669
+ md-elevated-button {
670
+ margin: 0px 3px;
671
+
672
+ --md-elevated-button-container-height: 35px;
673
+ --md-elevated-button-label-text-size: 16px;
674
+ --md-elevated-button-container-color: #0595e5;
675
+
676
+ --md-elevated-button-label-text-color: #fff;
677
+ --md-elevated-button-hover-label-text-color: #fff;
678
+ --md-elevated-button-pressed-label-text-color: #fff;
679
+ --md-elevated-button-focus-label-text-color: #fff;
680
+ --md-elevated-button-icon-color: #fff;
681
+ --md-elevated-button-hover-icon-color: #fff;
682
+ --md-elevated-button-pressed-icon-color: #fff;
683
+ --md-elevated-button-focus-icon-color: #fff;
684
+ }
685
+ }
686
+ }
687
+
688
+ div[body] {
689
+ display: grid;
690
+ grid-template-columns: 1fr 200px;
691
+ margin: 0px 25px 25px 25px;
692
+ gap: 10px;
693
+ min-height: fit-content;
694
+
695
+ h3 {
696
+ color: #2e79be;
697
+ font-size: 18px;
698
+ margin: 0px;
699
+ }
700
+
701
+ & > div {
702
+ display: flex;
703
+ gap: 10px;
704
+ border-radius: 5px;
705
+ }
706
+
707
+ div[left] {
708
+ flex-direction: column;
709
+
710
+ div[select] {
711
+ display: flex;
712
+ align-items: center;
713
+ justify-content: space-between;
714
+ background-color: #2ea4df1a;
715
+ border: 1px solid #2ea4df33;
716
+ font-size: 18px;
717
+ padding: 7px 10px;
718
+ border-radius: 5px;
719
+ gap: 12px;
720
+
721
+ & > div[state] {
722
+ display: flex;
723
+ font-size: 15px;
724
+ margin-right: 12px;
725
+ gap: 10px;
726
+
727
+ & > span {
728
+ display: flex;
729
+ align-items: center;
730
+ margin-left: 15px;
731
+ gap: 2px;
732
+ }
733
+ }
734
+ }
735
+
736
+ div[drawing] {
737
+ width: 100%;
738
+ background-color: #ffffff;
739
+ border: 1px solid #cccccc;
740
+ border-radius: 5px;
741
+ position: relative;
742
+ }
743
+
744
+ img {
745
+ width: 100%;
746
+ background-size: contain;
747
+ }
748
+
749
+ div[grid] {
750
+ display: flex;
751
+ position: absolute;
752
+ width: 100%;
753
+ height: 100%;
754
+ top: 0;
755
+ left: 0;
756
+ border: 1px #ccc solid;
757
+ justify-content: space-between;
758
+
759
+ & > div[row] {
760
+ display: flex;
761
+ flex-direction: column;
762
+ justify-content: space-between;
763
+ flex: 1;
764
+
765
+ & > div[column] {
766
+ flex: 1;
767
+ border: dashed 1px #2ea4df99;
768
+ display: flex;
769
+ justify-content: center;
770
+ align-items: center;
771
+ }
772
+ }
773
+
774
+ div[row='1'] div[column] {
775
+ border-left: none !important;
776
+ }
777
+ div[row]:last-of-type div[column] {
778
+ border-right: none !important;
779
+ }
780
+ div[column='1'] {
781
+ border-top: none !important;
782
+ }
783
+ div[column]:last-of-type {
784
+ border-bottom: none !important;
785
+ }
786
+
787
+ div[cell] {
788
+ &[status='WAIT'],
789
+ &[status='REQUEST'],
790
+ &[status='OVERALL_WAIT'],
791
+ &[status='OVERALL_REQUEST'],
792
+ &[status='PASS'],
793
+ &[status='FAIL'] {
794
+ background-color: #2ea4df1a;
795
+ }
796
+
797
+ &[active] {
798
+ background-color: #2ea4df99;
799
+ }
800
+ }
801
+ }
802
+ }
803
+
804
+ div[right] {
805
+ flex-direction: column;
806
+ gap: 15px;
807
+
808
+ & > div {
809
+ background-color: #ffffff;
810
+ border: 1px solid #cccccc80;
811
+ padding: 11px 12px 15px 12px;
812
+ border-radius: 5px;
813
+ }
814
+
815
+ div[top] {
816
+ div[content] {
817
+ display: grid;
818
+ grid-template-columns: 1fr 1fr;
819
+ gap: 5px;
820
+ align-items: center;
821
+ margin-top: 8px;
822
+ justify-content: space-between;
823
+
824
+ span {
825
+ display: flex;
826
+ align-items: center;
827
+ min-width: 55px;
828
+ }
829
+ }
830
+ }
831
+
832
+ div[bottom] {
833
+ display: flex;
834
+ flex-direction: column;
835
+ flex: 1;
836
+ gap: 10px;
837
+
838
+ & > div {
839
+ display: flex;
840
+ flex-direction: column;
841
+ gap: 9px;
842
+
843
+ hr {
844
+ border: 1px #cccccc dashed;
845
+ width: 100%;
846
+ margin: 0;
847
+ }
848
+ }
849
+
850
+ div[view] {
851
+ flex: 1;
852
+
853
+ div[status] {
854
+ display: flex;
855
+ align-items: center;
856
+ margin-bottom: 7px;
857
+ }
858
+
859
+ div[date],
860
+ div[manager] {
861
+ font-size: 14px;
862
+ }
863
+ }
864
+
865
+ div[edit] {
866
+ flex: 1;
867
+ }
868
+
869
+ md-elevated-button {
870
+ --md-elevated-button-container-color: #fafafa;
871
+
872
+ --md-elevated-button-label-text-color: #586878;
873
+ --md-elevated-button-hover-label-text-color: #586878;
874
+ --md-elevated-button-pressed-label-text-color: #586878;
875
+ --md-elevated-button-focus-label-text-color: #586878;
876
+ --md-elevated-button-icon-color: #586878;
877
+ --md-elevated-button-hover-icon-color: #586878;
878
+ --md-elevated-button-pressed-icon-color: #586878;
879
+ --md-elevated-button-focus-icon-color: #586878;
880
+ }
881
+ }
882
+ }
883
+ }
884
+ `
885
+ ];
886
+ __decorate([
887
+ state(),
888
+ __metadata("design:type", Object)
889
+ ], BuildingInspectionGridDetail.prototype, "project", void 0);
890
+ __decorate([
891
+ state(),
892
+ __metadata("design:type", Object)
893
+ ], BuildingInspectionGridDetail.prototype, "buildingInspections", void 0);
894
+ __decorate([
895
+ state(),
896
+ __metadata("design:type", Object)
897
+ ], BuildingInspectionGridDetail.prototype, "buildingInspectionSummaryOfProject", void 0);
898
+ __decorate([
899
+ state(),
900
+ __metadata("design:type", Object)
901
+ ], BuildingInspectionGridDetail.prototype, "buildingInspectionSummaryOfBuildingLevel", void 0);
902
+ __decorate([
903
+ state(),
904
+ __metadata("design:type", Object)
905
+ ], BuildingInspectionGridDetail.prototype, "selectedBuilding", void 0);
906
+ __decorate([
907
+ state(),
908
+ __metadata("design:type", Object)
909
+ ], BuildingInspectionGridDetail.prototype, "selectedLevel", void 0);
910
+ __decorate([
911
+ state(),
912
+ __metadata("design:type", Object)
913
+ ], BuildingInspectionGridDetail.prototype, "selectedInspection", void 0);
914
+ __decorate([
915
+ state(),
916
+ __metadata("design:type", String)
917
+ ], BuildingInspectionGridDetail.prototype, "cell", void 0);
918
+ __decorate([
919
+ query('md-filled-select[building]'),
920
+ __metadata("design:type", Object)
921
+ ], BuildingInspectionGridDetail.prototype, "htmlSelectBuilding", void 0);
922
+ __decorate([
923
+ query('md-filled-select[level]'),
924
+ __metadata("design:type", Object)
925
+ ], BuildingInspectionGridDetail.prototype, "htmlSelectLevel", void 0);
926
+ BuildingInspectionGridDetail = __decorate([
927
+ customElement('building-inspection-grid-detail')
928
+ ], BuildingInspectionGridDetail);
929
+ export { BuildingInspectionGridDetail };
930
+ //# sourceMappingURL=building-inspection-grid-detail.js.map