@dssp/supervision 1.0.11 → 1.0.13

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.
@@ -9,6 +9,8 @@ import { client } from '@operato/graphql';
9
9
  import { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles';
10
10
  import { notify } from '@operato/layout';
11
11
  import { BuildingInspectionStatus, CHECKLIST_MAIN_TYPE_LIST } from './building-inspection-list';
12
+ import { DrawingBundleModel } from '@dssp/drawing/dist-client/drawing-bundle/drawing-bundle-model.js';
13
+ import { loadDrawingBundle } from '@dssp/drawing/dist-client/drawing-bundle/drawing-bundle-loader.js';
12
14
  import '../checklist/checklist-view';
13
15
  import '../checklist/kcs-criteria-popup';
14
16
  let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopup extends LitElement {
@@ -23,9 +25,8 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
23
25
  this.selectedLevel = {};
24
26
  this.constructionTypes = [];
25
27
  this.allDetailTypes = [];
26
- this.inspectionDrawingTypes = [];
27
- this.selectedInspectionDrawingType = {};
28
- this.selectedInspectionParts = [];
28
+ /** 자동 할당된 검측 도면(패키지 루트 도면 id) */
29
+ this.assignedDrawingId = '';
29
30
  this.projectChecklists = [];
30
31
  this.selectedProjectChecklist = null;
31
32
  this.checklistItems = [];
@@ -35,7 +36,7 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
35
36
  this.siteSpecDetailItem = '';
36
37
  }
37
38
  render() {
38
- var _a, _b, _c, _d, _e, _f, _g, _h;
39
+ var _a, _b, _c, _d, _e;
39
40
  const ctName = this._getConstructionTypeName((_a = this.selectedProjectChecklist) === null || _a === void 0 ? void 0 : _a.constructionTypeId);
40
41
  const cdtName = this._getConstructionDetailTypeName((_b = this.selectedProjectChecklist) === null || _b === void 0 ? void 0 : _b.constructionDetailTypeId);
41
42
  return html `
@@ -89,33 +90,9 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
89
90
  </md-filled-select>
90
91
  </div>
91
92
 
92
- <div data-row>
93
+ <div data-row single>
93
94
  <label>검측 도면</label>
94
- <md-filled-select inspectionDrawingType @change=${this._onSelectInspectionDrawingType}>
95
- ${(_f = this.inspectionDrawingTypes) === null || _f === void 0 ? void 0 : _f.map(inspectionDrawingType => {
96
- return html `<md-select-option .value=${inspectionDrawingType.id}>
97
- <div slot="headline">${inspectionDrawingType.name}</div>
98
- </md-select-option>`;
99
- })}
100
- </md-filled-select>
101
-
102
- <div partition></div>
103
-
104
- <label>검측 부위</label>
105
- <div inspection-parts>
106
- ${(_h = (_g = this.selectedInspectionDrawingType) === null || _g === void 0 ? void 0 : _g.inspectionParts) === null || _h === void 0 ? void 0 : _h.map(inspectionPart => {
107
- return html `
108
- <span>
109
- <md-checkbox
110
- id=${'check_' + inspectionPart.id}
111
- ?checked="${this.isSelected(inspectionPart)}"
112
- @click=${() => this._onSelectInspectionPart(inspectionPart)}
113
- ></md-checkbox>
114
- <label>${inspectionPart.name}</label>
115
- </span>
116
- `;
117
- })}
118
- </div>
95
+ <span info>${this._assignedDrawingLabel()}</span>
119
96
  </div>
120
97
  </div>
121
98
 
@@ -190,7 +167,7 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
190
167
  }
191
168
  }
192
169
  async firstUpdated() {
193
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
170
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
194
171
  const response = await client.query({
195
172
  query: gql `
196
173
  query Project($id: String!, $checklistFilters: [Filter!]) {
@@ -219,13 +196,6 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
219
196
  }
220
197
  }
221
198
 
222
- inspectionDrawingTypes {
223
- items {
224
- name
225
- id
226
- }
227
- }
228
-
229
199
  projectChecklists(filters: $checklistFilters) {
230
200
  items {
231
201
  id
@@ -253,36 +223,32 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
253
223
  return;
254
224
  const project = (_a = response.data) === null || _a === void 0 ? void 0 : _a.project;
255
225
  const constructionTypes = ((_c = (_b = response.data) === null || _b === void 0 ? void 0 : _b.constructionTypes) === null || _c === void 0 ? void 0 : _c.items) || [];
256
- const inspectionDrawingTypes = ((_e = (_d = response.data) === null || _d === void 0 ? void 0 : _d.inspectionDrawingTypes) === null || _e === void 0 ? void 0 : _e.items) || [];
257
- const projectChecklists = ((_g = (_f = response.data) === null || _f === void 0 ? void 0 : _f.projectChecklists) === null || _g === void 0 ? void 0 : _g.items) || [];
226
+ const projectChecklists = ((_e = (_d = response.data) === null || _d === void 0 ? void 0 : _d.projectChecklists) === null || _e === void 0 ? void 0 : _e.items) || [];
258
227
  this.project = project;
259
- this.buildings = [...(((_h = project === null || project === void 0 ? void 0 : project.buildingComplex) === null || _h === void 0 ? void 0 : _h.buildings) || [])];
228
+ this.buildings = [...(((_f = project === null || project === void 0 ? void 0 : project.buildingComplex) === null || _f === void 0 ? void 0 : _f.buildings) || [])];
260
229
  this.constructionTypes = [...constructionTypes];
261
230
  this.allDetailTypes = constructionTypes.flatMap(ct => (ct.constructionDetailTypes || []).map(dt => (Object.assign(Object.assign({}, dt), { constructionTypeId: ct.id }))));
262
- this.inspectionDrawingTypes = [...inspectionDrawingTypes];
263
231
  this.projectChecklists = [...projectChecklists];
264
232
  // selectedBuildingId가 있으면 해당 빌딩 선택, 없으면 첫번째 빌딩 선택
265
233
  this.selectedBuilding = this.selectedBuildingId
266
234
  ? this.buildings.find(building => building.id == this.selectedBuildingId)
267
235
  : this.buildings[0];
268
- this.selectedInspectionDrawingType = inspectionDrawingTypes === null || inspectionDrawingTypes === void 0 ? void 0 : inspectionDrawingTypes[0];
236
+ this.bundleModel = (await loadDrawingBundle(this.projectId)) || undefined;
269
237
  // 선택된 동의 층 리스트 가져오기
270
- this.selectedBuilding = await this._getBuilding((_j = this.selectedBuilding) === null || _j === void 0 ? void 0 : _j.id);
271
- this.selectedInspectionDrawingType = await this._getInspectionDrawingType((_k = this.selectedInspectionDrawingType) === null || _k === void 0 ? void 0 : _k.id);
238
+ this.selectedBuilding = await this._getBuilding((_g = this.selectedBuilding) === null || _g === void 0 ? void 0 : _g.id);
272
239
  // selectedBuildingLevelId가 있으면 선택된 층, 없으면 첫번째 층 선택
273
240
  this.selectedLevel = this.selectedBuildingLevelId
274
- ? (_m = (_l = this.selectedBuilding) === null || _l === void 0 ? void 0 : _l.buildingLevels) === null || _m === void 0 ? void 0 : _m.find(level => level.id == this.selectedBuildingLevelId)
275
- : (_p = (_o = this.selectedBuilding) === null || _o === void 0 ? void 0 : _o.buildingLevels) === null || _p === void 0 ? void 0 : _p[0];
276
- this.selectedInspectionParts = [];
241
+ ? (_j = (_h = this.selectedBuilding) === null || _h === void 0 ? void 0 : _h.buildingLevels) === null || _j === void 0 ? void 0 : _j.find(level => level.id == this.selectedBuildingLevelId)
242
+ : (_l = (_k = this.selectedBuilding) === null || _k === void 0 ? void 0 : _k.buildingLevels) === null || _l === void 0 ? void 0 : _l[0];
277
243
  // 동, 층이 랜더링 된 후에 select를 위해 이 시점에서 랜더링
278
244
  this.selectedBuilding = await Object.assign({}, this.selectedBuilding);
279
245
  // 기본 값 셋팅 select
280
- await ((_q = this.htmlSelectBuilding) === null || _q === void 0 ? void 0 : _q.select((_r = this.selectedBuilding) === null || _r === void 0 ? void 0 : _r.id));
281
- await ((_s = this.htmlSelectLevel) === null || _s === void 0 ? void 0 : _s.select((_t = this.selectedLevel) === null || _t === void 0 ? void 0 : _t.id));
282
- await ((_u = this.htmlSelectInspectionDrawingType) === null || _u === void 0 ? void 0 : _u.select((_v = this.selectedInspectionDrawingType) === null || _v === void 0 ? void 0 : _v.id));
283
- await ((_w = this.htmlSelectProjectChecklist) === null || _w === void 0 ? void 0 : _w.selectIndex(0));
246
+ await ((_m = this.htmlSelectBuilding) === null || _m === void 0 ? void 0 : _m.select((_o = this.selectedBuilding) === null || _o === void 0 ? void 0 : _o.id));
247
+ await ((_p = this.htmlSelectLevel) === null || _p === void 0 ? void 0 : _p.select((_q = this.selectedLevel) === null || _q === void 0 ? void 0 : _q.id));
248
+ this._assignDrawing();
249
+ await ((_r = this.htmlSelectProjectChecklist) === null || _r === void 0 ? void 0 : _r.selectIndex(0));
284
250
  this.checklist = {
285
- location: `${((_x = this.selectedBuilding) === null || _x === void 0 ? void 0 : _x.name) || ''} ${((_y = this.selectedLevel) === null || _y === void 0 ? void 0 : _y.floorDisplayName) || ''}층`,
251
+ location: `${((_s = this.selectedBuilding) === null || _s === void 0 ? void 0 : _s.name) || ''} ${((_t = this.selectedLevel) === null || _t === void 0 ? void 0 : _t.floorDisplayName) || ''}층`,
286
252
  documentNo: `${project.documentNaming} 검측 제01-00000호`,
287
253
  buildingInspection: {
288
254
  status: BuildingInspectionStatus.WAIT
@@ -323,29 +289,6 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
323
289
  return {};
324
290
  return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.building) || {};
325
291
  }
326
- async _getInspectionDrawingType(id = '') {
327
- var _a;
328
- if (!id)
329
- return {};
330
- const response = await client.query({
331
- query: gql `
332
- query InspectionDrawingType($id: String!) {
333
- inspectionDrawingType(id: $id) {
334
- id
335
- name
336
- inspectionParts {
337
- id
338
- name
339
- }
340
- }
341
- }
342
- `,
343
- variables: { id }
344
- });
345
- if (response.errors)
346
- return {};
347
- return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.inspectionDrawingType) || {};
348
- }
349
292
  _getConstructionTypeName(ctId) {
350
293
  var _a;
351
294
  return ((_a = this.constructionTypes.find(ct => ct.id === ctId)) === null || _a === void 0 ? void 0 : _a.name) || '';
@@ -374,32 +317,29 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
374
317
  this.selectedBuilding = await this._getBuilding(buildingId);
375
318
  this.selectedLevel = await Object.assign({}, (_b = (_a = this.selectedBuilding) === null || _a === void 0 ? void 0 : _a.buildingLevels) === null || _b === void 0 ? void 0 : _b[0]);
376
319
  await ((_c = this.htmlSelectLevel) === null || _c === void 0 ? void 0 : _c.selectIndex(0));
377
- this._updateChecklist();
320
+ this._assignDrawing();
378
321
  }
379
322
  _onSelectBuildingLevel(e) {
380
323
  var _a, _b;
381
324
  const buildingLevelId = e.target.value;
382
325
  this.selectedLevel = Object.assign({}, (((_b = (_a = this.selectedBuilding) === null || _a === void 0 ? void 0 : _a.buildingLevels) === null || _b === void 0 ? void 0 : _b.find(v => v.id == buildingLevelId)) || {}));
383
- this._updateChecklist();
326
+ this._assignDrawing();
384
327
  }
385
- async _onSelectInspectionDrawingType(e) {
386
- const inspectionDrawingTypeId = e.target.value;
387
- this.selectedInspectionDrawingType = await this._getInspectionDrawingType(inspectionDrawingTypeId);
388
- this.selectedInspectionParts = [];
389
- this._updateChecklist();
390
- }
391
- _onSelectInspectionPart(part) {
392
- if (this.selectedInspectionParts.includes(part.name)) {
393
- this.selectedInspectionParts = this.selectedInspectionParts.filter(item => item !== part.name);
394
- }
395
- else {
396
- this.selectedInspectionParts.push(part.name);
397
- }
398
- this.selectedInspectionParts = [...this.selectedInspectionParts];
328
+ /**
329
+ * 동·층에 해당하는 도면 패키지를 찾아 검측 도면으로 자동 할당한다.
330
+ * 패키지의 첫 장(건축 층 평면도)이 검측 도면이 되고, 하위 도면은 하이퍼링크로 이어진다.
331
+ */
332
+ _assignDrawing() {
333
+ var _a, _b, _c;
334
+ const pkg = (_a = this.bundleModel) === null || _a === void 0 ? void 0 : _a.packageOfLevel((_b = this.selectedBuilding) === null || _b === void 0 ? void 0 : _b.name, (_c = this.selectedLevel) === null || _c === void 0 ? void 0 : _c.floor);
335
+ this.assignedDrawingId = (pkg === null || pkg === void 0 ? void 0 : pkg.root) || '';
399
336
  this._updateChecklist();
400
337
  }
401
- isSelected(option) {
402
- return this.selectedInspectionParts.includes(option.name);
338
+ _assignedDrawingLabel() {
339
+ var _a, _b;
340
+ if (!this.assignedDrawingId)
341
+ return '해당 동·층에 배정된 도면 패키지가 없습니다.';
342
+ return ((_b = (_a = this.bundleModel) === null || _a === void 0 ? void 0 : _a.drawing(this.assignedDrawingId)) === null || _b === void 0 ? void 0 : _b.drawing_name) || this.assignedDrawingId;
403
343
  }
404
344
  // KCS 기준 JSON 문자열에서 file_label(요약 텍스트) 추출
405
345
  _kcsLabel(kcsCriteria) {
@@ -414,7 +354,7 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
414
354
  }
415
355
  }
416
356
  _updateChecklist() {
417
- var _a, _b, _c, _d, _e, _f;
357
+ var _a, _b, _c, _d, _e;
418
358
  const ctName = this._getConstructionTypeName((_a = this.selectedProjectChecklist) === null || _a === void 0 ? void 0 : _a.constructionTypeId);
419
359
  const cdtName = this._getConstructionDetailTypeName((_b = this.selectedProjectChecklist) === null || _b === void 0 ? void 0 : _b.constructionDetailTypeId);
420
360
  this.checklist = {
@@ -424,8 +364,7 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
424
364
  location: ((_d = this.selectedBuilding) === null || _d === void 0 ? void 0 : _d.name) && ((_e = this.selectedLevel) === null || _e === void 0 ? void 0 : _e.floorDisplayName)
425
365
  ? `${this.selectedBuilding.name} ${this.selectedLevel.floorDisplayName}층`
426
366
  : '',
427
- inspectionDrawingType: ((_f = this.selectedInspectionDrawingType) === null || _f === void 0 ? void 0 : _f.name) || '',
428
- inspectionParts: this.selectedInspectionParts,
367
+ inspectionDrawingType: this.assignedDrawingId,
429
368
  documentNo: `${this.project.documentNaming || ''} 검측 제01-00000호`,
430
369
  buildingInspection: {
431
370
  status: BuildingInspectionStatus.WAIT
@@ -505,7 +444,7 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
505
444
  };
506
445
  }
507
446
  async _createInspection() {
508
- var _a, _b, _c, _d, _e, _f;
447
+ var _a, _b, _c, _d, _e;
509
448
  if (!this.selectedProjectChecklist) {
510
449
  notify({ message: '체크리스트를 선택해주세요.', level: 'warn' });
511
450
  return;
@@ -523,8 +462,7 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
523
462
  constructionType: ctName,
524
463
  constructionDetailType: cdtName,
525
464
  location: `${(_b = this.htmlSelectBuilding) === null || _b === void 0 ? void 0 : _b.displayText} ${(_c = this.htmlSelectLevel) === null || _c === void 0 ? void 0 : _c.displayText}층`,
526
- inspectionDrawingType: (_d = this.selectedInspectionDrawingType) === null || _d === void 0 ? void 0 : _d.name,
527
- inspectionParts: this.selectedInspectionParts
465
+ inspectionDrawingType: this.assignedDrawingId
528
466
  };
529
467
  patch.checklistItem = this.checklistItems.map(item => ({
530
468
  name: item.name,
@@ -551,7 +489,7 @@ let InspectionWithChecklistCreatePopup = class InspectionWithChecklistCreatePopu
551
489
  this._close();
552
490
  }
553
491
  else {
554
- notify({ message: ((_f = (_e = response.errors) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.message) || '검측 등록에 실패하였습니다.', level: 'error' });
492
+ notify({ message: ((_e = (_d = response.errors) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.message) || '검측 등록에 실패하였습니다.', level: 'error' });
555
493
  }
556
494
  }
557
495
  _onGristWheel(e) {
@@ -651,20 +589,6 @@ InspectionWithChecklistCreatePopup.styles = [
651
589
  padding: 4px 0;
652
590
  }
653
591
 
654
- div[inspection-parts] {
655
- display: block;
656
- margin-top: 7px;
657
-
658
- & > span {
659
- display: inline-block;
660
- margin-right: 5px;
661
- margin-bottom: 5px;
662
-
663
- & > md-checkbox {
664
- margin-top: 2px;
665
- }
666
- }
667
- }
668
592
  }
669
593
 
670
594
  div[data-row][single] {
@@ -768,16 +692,14 @@ __decorate([
768
692
  ], InspectionWithChecklistCreatePopup.prototype, "allDetailTypes", void 0);
769
693
  __decorate([
770
694
  state(),
771
- __metadata("design:type", Array)
772
- ], InspectionWithChecklistCreatePopup.prototype, "inspectionDrawingTypes", void 0);
695
+ __metadata("design:type", DrawingBundleModel
696
+ /** 자동 할당된 검측 도면(패키지 루트 도면 id) */
697
+ )
698
+ ], InspectionWithChecklistCreatePopup.prototype, "bundleModel", void 0);
773
699
  __decorate([
774
700
  state(),
775
- __metadata("design:type", Object)
776
- ], InspectionWithChecklistCreatePopup.prototype, "selectedInspectionDrawingType", void 0);
777
- __decorate([
778
- state(),
779
- __metadata("design:type", Array)
780
- ], InspectionWithChecklistCreatePopup.prototype, "selectedInspectionParts", void 0);
701
+ __metadata("design:type", String)
702
+ ], InspectionWithChecklistCreatePopup.prototype, "assignedDrawingId", void 0);
781
703
  __decorate([
782
704
  state(),
783
705
  __metadata("design:type", Array)
@@ -818,10 +740,6 @@ __decorate([
818
740
  query('md-filled-select[level]'),
819
741
  __metadata("design:type", Object)
820
742
  ], InspectionWithChecklistCreatePopup.prototype, "htmlSelectLevel", void 0);
821
- __decorate([
822
- query('md-filled-select[inspectionDrawingType]'),
823
- __metadata("design:type", Object)
824
- ], InspectionWithChecklistCreatePopup.prototype, "htmlSelectInspectionDrawingType", void 0);
825
743
  __decorate([
826
744
  query('md-filled-select[projectChecklist]'),
827
745
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"inspection-with-checklist-create-popup.js","sourceRoot":"","sources":["../../../client/pages/building-inspection/inspection-with-checklist-create-popup.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist/ox-grist.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { DataGrist } from '@operato/data-grist/ox-grist.js'\nimport { client } from '@operato/graphql'\nimport { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles'\nimport { notify } from '@operato/layout'\nimport { BuildingInspectionStatus, CHECKLIST_MAIN_TYPE_LIST } from './building-inspection-list'\nimport '../checklist/checklist-view'\nimport '../checklist/kcs-criteria-popup'\nimport { ChecklistMode } from '../checklist/checklist-view'\n\n@customElement('inspection-with-checklist-create-popup')\nclass InspectionWithChecklistCreatePopup extends LitElement {\n static styles = [\n ButtonContainerStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n padding: 15px 20px;\n\n background-color: var(--md-sys-color-surface);\n }\n\n md-filled-select {\n width: auto;\n min-width: 150px;\n --md-filled-select-text-field-container-color: transparent;\n --md-filled-select-text-field-active-indicator-color: #999;\n --md-filled-select-text-field-input-text-size: 14px;\n --md-filled-select-text-field-input-text-weight: bold;\n --md-filled-select-text-field-input-text-line-height: 6px;\n }\n md-filled-select[level] {\n min-width: 110px;\n margin-left: 20px;\n }\n md-filled-select[projectChecklist] {\n min-width: 300px;\n }\n\n checklist-view {\n pointer-events: none;\n transform-origin: top left;\n }\n\n div[body] {\n height: 100%;\n overflow-y: auto;\n\n div[tab-container][inactive] {\n display: none !important;\n }\n\n div[edit] {\n width: 100%;\n\n div[checklist-select],\n div[checklist-info],\n div[detail] {\n margin-bottom: 30px;\n }\n\n h3 {\n position: relative;\n color: #0595e5;\n font-size: 17px;\n font-weight: 700;\n background-color: var(--md-sys-color-surface);\n margin-top: 0;\n margin-bottom: 5px;\n }\n\n div[data-row] {\n display: grid;\n grid-template-columns: 100px 1fr 0.3fr 100px 1fr;\n gap: 15px;\n margin-bottom: 11px;\n\n & > label {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n font-size: 15px;\n }\n\n & > span[info] {\n display: flex;\n align-items: center;\n font-size: 15px;\n font-weight: bold;\n color: #333;\n padding: 4px 0;\n }\n\n div[inspection-parts] {\n display: block;\n margin-top: 7px;\n\n & > span {\n display: inline-block;\n margin-right: 5px;\n margin-bottom: 5px;\n\n & > md-checkbox {\n margin-top: 2px;\n }\n }\n }\n }\n\n div[data-row][single] {\n grid-template-columns: 100px 1fr;\n }\n }\n\n div[preview] {\n display: flex;\n overflow-y: auto;\n overflow-x: hidden;\n }\n }\n\n div[tabs] {\n display: flex;\n\n button {\n background-color: #fff;\n padding: 6px 14px;\n color: #999;\n border: solid 1px #999;\n border-top: none;\n border-radius: 0px 0px 8px 8px;\n margin-right: -2px;\n cursor: pointer;\n\n &[active] {\n color: var(--button-color, var(--md-sys-color-on-secondary-container));\n font-weight: 600;\n }\n }\n }\n\n div[button-container] {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n\n md-elevated-button[blue] {\n --md-elevated-button-container-color: #0595e5;\n\n --md-elevated-button-label-text-color: #fff;\n --md-elevated-button-hover-label-text-color: #fff;\n --md-elevated-button-pressed-label-text-color: #fff;\n --md-elevated-button-focus-label-text-color: #fff;\n --md-elevated-button-icon-color: #fff;\n --md-elevated-button-hover-icon-color: #fff;\n --md-elevated-button-pressed-icon-color: #fff;\n --md-elevated-button-focus-icon-color: #fff;\n }\n }\n\n div[no-checklist] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n color: #999;\n font-size: 14px;\n border: 1px dashed #ccc;\n border-radius: 8px;\n }\n `\n ]\n\n @property({ type: String }) projectId: string = ''\n @property({ type: String }) selectedBuildingId: string = ''\n @property({ type: String }) selectedBuildingLevelId: string = ''\n\n @state() project: any = {}\n @state() buildings: any[] = []\n @state() selectedBuilding: any = {}\n @state() selectedLevel: any = {}\n\n @state() constructionTypes: any[] = []\n @state() allDetailTypes: any[] = []\n\n @state() inspectionDrawingTypes: any[] = []\n @state() selectedInspectionDrawingType: any = {}\n @state() selectedInspectionParts: string[] = []\n\n @state() projectChecklists: any[] = []\n @state() selectedProjectChecklist: any = null\n @state() checklistItems: any[] = []\n @state() checklist: any = {}\n\n @state() activeTab: 'edit' | 'preview' = 'edit'\n @state() gristConfig: any\n\n @state() siteSpecDetail: string | null = null\n @state() siteSpecDetailItem: string = ''\n\n @query('md-filled-select[building]') htmlSelectBuilding\n @query('md-filled-select[level]') htmlSelectLevel\n @query('md-filled-select[inspectionDrawingType]') htmlSelectInspectionDrawingType\n @query('md-filled-select[projectChecklist]') htmlSelectProjectChecklist\n @query('ox-grist') grist!: DataGrist\n @query('div[preview]') checklistViewContainer!: HTMLDivElement\n @query('checklist-view') checklistView!: HTMLElement\n\n render() {\n const ctName = this._getConstructionTypeName(this.selectedProjectChecklist?.constructionTypeId)\n const cdtName = this._getConstructionDetailTypeName(this.selectedProjectChecklist?.constructionDetailTypeId)\n\n return html`\n <div body>\n <div tab-container ?inactive=${this.activeTab !== 'edit'} edit>\n <!-- 체크리스트 선택 -->\n <div checklist-select>\n <h3>체크리스트 선택</h3>\n <div data-row single>\n <label>체크리스트</label>\n <md-filled-select projectChecklist @change=${this._onSelectProjectChecklist}>\n <md-select-option value=\"\">\n <div slot=\"headline\">선택</div>\n </md-select-option>\n ${this.projectChecklists.map(cl => {\n const clCtName = this._getConstructionTypeName(cl.constructionTypeId)\n const clCdtName = this._getConstructionDetailTypeName(cl.constructionDetailTypeId)\n return html`\n <md-select-option .value=${cl.id}>\n <div slot=\"headline\">${cl.name} (${clCtName} / ${clCdtName})</div>\n </md-select-option>\n `\n })}\n </md-filled-select>\n </div>\n </div>\n\n <!-- 세부 정보 (항상 표시) -->\n <div detail>\n <h3>세부 정보</h3>\n\n <div data-row>\n <label>동</label>\n <md-filled-select building @change=${this._onSelectBuilding}>\n ${this.buildings?.map(building => {\n return html`<md-select-option .value=${building.id}>\n <div slot=\"headline\">${building.name}</div>\n </md-select-option>`\n })}\n </md-filled-select>\n\n <div partition></div>\n\n <label>층</label>\n <md-filled-select level @change=${this._onSelectBuildingLevel}>\n ${this.selectedBuilding?.buildingLevels?.map(level => {\n return html`<md-select-option .value=${level.id}>\n <div slot=\"headline\">${level.floorDisplayName}</div>\n </md-select-option>`\n })}\n </md-filled-select>\n </div>\n\n <div data-row>\n <label>검측 도면</label>\n <md-filled-select inspectionDrawingType @change=${this._onSelectInspectionDrawingType}>\n ${this.inspectionDrawingTypes?.map(inspectionDrawingType => {\n return html`<md-select-option .value=${inspectionDrawingType.id}>\n <div slot=\"headline\">${inspectionDrawingType.name}</div>\n </md-select-option>`\n })}\n </md-filled-select>\n\n <div partition></div>\n\n <label>검측 부위</label>\n <div inspection-parts>\n ${this.selectedInspectionDrawingType?.inspectionParts?.map(inspectionPart => {\n return html`\n <span>\n <md-checkbox\n id=${'check_' + inspectionPart.id}\n ?checked=\"${this.isSelected(inspectionPart)}\"\n @click=${() => this._onSelectInspectionPart(inspectionPart)}\n ></md-checkbox>\n <label>${inspectionPart.name}</label>\n </span>\n `\n })}\n </div>\n </div>\n </div>\n\n ${\n this.selectedProjectChecklist\n ? html`\n <!-- 체크리스트 정보 (읽기 전용) -->\n <div checklist-info>\n <h3>체크리스트 정보</h3>\n <div data-row single>\n <label>이름</label>\n <span info>${this.selectedProjectChecklist.name}</span>\n </div>\n <div data-row>\n <label>공종</label>\n <span info>${ctName}</span>\n\n <div partition></div>\n\n <label>세부공종</label>\n <span info>${cdtName}</span>\n </div>\n </div>\n\n <!-- 검사 항목 그리드 (읽기 전용) -->\n <ox-grist\n .mode=${'GRID'}\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n @wheel=${this._onGristWheel}\n >\n </ox-grist>\n `\n : html` <div no-checklist>체크리스트를 선택하면 검사 항목이 표시됩니다.</div> `\n }\n </div>\n\n <div tab-container ?inactive=${this.activeTab !== 'preview'} preview>\n <checklist-view\n .mode=${ChecklistMode.VIEWER}\n .projectType=${this.project.projectType}\n .checklist=${this.checklist}\n ></checklist-view>\n </div>\n </div>\n\n <div tabs>\n <button ?active=${this.activeTab === 'edit'} @click=${() => (this.activeTab = 'edit')}>검측 요청 정보</button>\n <button ?active=${this.activeTab === 'preview'} @click=${() => (this.activeTab = 'preview')}>미리보기</button>\n </div>\n\n <div button-container>\n <md-elevated-button blue @click=${this._createInspection}>\n <md-icon slot=\"icon\">task</md-icon>검측 등록\n </md-elevated-button>\n <md-elevated-button @click=${this._close}> <md-icon slot=\"icon\">cancel</md-icon>취소</md-elevated-button>\n </div>\n\n ${\n this.siteSpecDetail\n ? html`<kcs-criteria-popup\n .popupTitle=${'현장 시방서 기준'}\n .kcs=${{ text: this.siteSpecDetail }}\n .itemName=${this.siteSpecDetailItem}\n @close=${() => (this.siteSpecDetail = null)}\n ></kcs-criteria-popup>`\n : ''\n }\n `\n }\n\n updated() {\n if (this.checklistViewContainer && this.checklistView) {\n const ratio = Math.round((this.checklistViewContainer?.offsetWidth / this.checklistView?.offsetWidth) * 100) / 100 || 1\n this.checklistView.style.transform = `scale(${ratio})`\n }\n }\n\n async firstUpdated() {\n const response = await client.query({\n query: gql`\n query Project($id: String!, $checklistFilters: [Filter!]) {\n project(id: $id) {\n id\n name\n projectType\n documentNaming\n buildingComplex {\n id\n buildings {\n id\n name\n }\n }\n }\n\n constructionTypes {\n items {\n id\n name\n constructionDetailTypes {\n id\n name\n }\n }\n }\n\n inspectionDrawingTypes {\n items {\n name\n id\n }\n }\n\n projectChecklists(filters: $checklistFilters) {\n items {\n id\n name\n constructionTypeId\n constructionDetailTypeId\n projectChecklistItems {\n id\n mainType\n name\n kcsCriteria\n siteSpecCriteria\n sequence\n }\n }\n }\n }\n `,\n variables: {\n id: this.projectId,\n checklistFilters: [{ name: 'projectId', value: this.projectId, operator: 'eq' }]\n }\n })\n\n if (response.errors) return\n\n const project = response.data?.project\n const constructionTypes = response.data?.constructionTypes?.items || []\n const inspectionDrawingTypes = response.data?.inspectionDrawingTypes?.items || []\n const projectChecklists = response.data?.projectChecklists?.items || []\n\n this.project = project\n this.buildings = [...(project?.buildingComplex?.buildings || [])]\n this.constructionTypes = [...constructionTypes]\n this.allDetailTypes = constructionTypes.flatMap(ct =>\n (ct.constructionDetailTypes || []).map(dt => ({ ...dt, constructionTypeId: ct.id }))\n )\n this.inspectionDrawingTypes = [...inspectionDrawingTypes]\n this.projectChecklists = [...projectChecklists]\n\n // selectedBuildingId가 있으면 해당 빌딩 선택, 없으면 첫번째 빌딩 선택\n this.selectedBuilding = this.selectedBuildingId\n ? this.buildings.find(building => building.id == this.selectedBuildingId)\n : this.buildings[0]\n\n this.selectedInspectionDrawingType = inspectionDrawingTypes?.[0]\n\n // 선택된 동의 층 리스트 가져오기\n this.selectedBuilding = await this._getBuilding(this.selectedBuilding?.id)\n this.selectedInspectionDrawingType = await this._getInspectionDrawingType(this.selectedInspectionDrawingType?.id)\n\n // selectedBuildingLevelId가 있으면 선택된 층, 없으면 첫번째 층 선택\n this.selectedLevel = this.selectedBuildingLevelId\n ? this.selectedBuilding?.buildingLevels?.find(level => level.id == this.selectedBuildingLevelId)\n : this.selectedBuilding?.buildingLevels?.[0]\n\n this.selectedInspectionParts = []\n\n // 동, 층이 랜더링 된 후에 select를 위해 이 시점에서 랜더링\n this.selectedBuilding = await { ...this.selectedBuilding }\n\n // 기본 값 셋팅 select\n await this.htmlSelectBuilding?.select(this.selectedBuilding?.id)\n await this.htmlSelectLevel?.select(this.selectedLevel?.id)\n await this.htmlSelectInspectionDrawingType?.select(this.selectedInspectionDrawingType?.id)\n await this.htmlSelectProjectChecklist?.selectIndex(0)\n\n this.checklist = {\n location: `${this.selectedBuilding?.name || ''} ${this.selectedLevel?.floorDisplayName || ''}층`,\n documentNo: `${project.documentNaming} 검측 제01-00000호`,\n buildingInspection: {\n status: BuildingInspectionStatus.WAIT\n }\n }\n\n // 그리드 셋팅\n this._setGristConfig()\n }\n\n async _getBuilding(buildingId: string = '') {\n if (!buildingId) return {}\n\n const response = await client.query({\n query: gql`\n query Building($id: String!) {\n building(id: $id) {\n id\n name\n buildingLevels {\n id\n floor\n floorDisplayName\n mainDrawing {\n id\n name\n fullpath\n }\n mainDrawingImage\n }\n }\n }\n `,\n variables: {\n id: buildingId\n }\n })\n\n if (response.errors) return {}\n\n return response.data?.building || {}\n }\n\n async _getInspectionDrawingType(id: string = '') {\n if (!id) return {}\n\n const response = await client.query({\n query: gql`\n query InspectionDrawingType($id: String!) {\n inspectionDrawingType(id: $id) {\n id\n name\n inspectionParts {\n id\n name\n }\n }\n }\n `,\n variables: { id }\n })\n\n if (response.errors) return {}\n\n return response.data?.inspectionDrawingType || {}\n }\n\n private _getConstructionTypeName(ctId: string): string {\n return this.constructionTypes.find(ct => ct.id === ctId)?.name || ''\n }\n\n private _getConstructionDetailTypeName(cdtId: string): string {\n return this.allDetailTypes.find(dt => dt.id === cdtId)?.name || ''\n }\n\n private _onSelectProjectChecklist(e) {\n const id = e.target.value\n const checklist = this.projectChecklists.find(c => c.id === id)\n this.selectedProjectChecklist = checklist || null\n this.checklistItems = (checklist?.projectChecklistItems || [])\n .map(item => ({ ...item, kcsCriteriaLabel: this._kcsLabel(item.kcsCriteria) }))\n .sort((a, b) => (a.sequence || 0) - (b.sequence || 0))\n\n this._updateChecklist()\n\n // 그리드가 있을때만 fetch (체크리스트 미선택 → 선택 시 grist가 새로 렌더링됨)\n this.updateComplete.then(() => {\n this.grist?.fetch()\n })\n }\n\n private async _onSelectBuilding(e) {\n const buildingId = e.target.value\n this.selectedBuilding = await this._getBuilding(buildingId)\n this.selectedLevel = await { ...this.selectedBuilding?.buildingLevels?.[0] }\n\n await this.htmlSelectLevel?.selectIndex(0)\n this._updateChecklist()\n }\n\n private _onSelectBuildingLevel(e) {\n const buildingLevelId = e.target.value\n this.selectedLevel = {\n ...(this.selectedBuilding?.buildingLevels?.find(v => v.id == buildingLevelId) || {})\n }\n this._updateChecklist()\n }\n\n private async _onSelectInspectionDrawingType(e) {\n const inspectionDrawingTypeId = e.target.value\n this.selectedInspectionDrawingType = await this._getInspectionDrawingType(inspectionDrawingTypeId)\n this.selectedInspectionParts = []\n this._updateChecklist()\n }\n\n private _onSelectInspectionPart(part) {\n if (this.selectedInspectionParts.includes(part.name)) {\n this.selectedInspectionParts = this.selectedInspectionParts.filter(item => item !== part.name)\n } else {\n this.selectedInspectionParts.push(part.name)\n }\n\n this.selectedInspectionParts = [...this.selectedInspectionParts]\n this._updateChecklist()\n }\n\n isSelected(option: any): boolean {\n return this.selectedInspectionParts.includes(option.name)\n }\n\n // KCS 기준 JSON 문자열에서 file_label(요약 텍스트) 추출\n private _kcsLabel(kcsCriteria?: string): string {\n if (!kcsCriteria) return ''\n try {\n return JSON.parse(kcsCriteria)?.file_label || ''\n } catch {\n return ''\n }\n }\n\n private _updateChecklist() {\n const ctName = this._getConstructionTypeName(this.selectedProjectChecklist?.constructionTypeId)\n const cdtName = this._getConstructionDetailTypeName(this.selectedProjectChecklist?.constructionDetailTypeId)\n\n this.checklist = {\n name: this.selectedProjectChecklist?.name || '',\n constructionType: ctName,\n constructionDetailType: cdtName,\n location:\n this.selectedBuilding?.name && this.selectedLevel?.floorDisplayName\n ? `${this.selectedBuilding.name} ${this.selectedLevel.floorDisplayName}층`\n : '',\n inspectionDrawingType: this.selectedInspectionDrawingType?.name || '',\n inspectionParts: this.selectedInspectionParts,\n documentNo: `${this.project.documentNaming || ''} 검측 제01-00000호`,\n buildingInspection: {\n status: BuildingInspectionStatus.WAIT\n },\n checklistItems: this.checklistItems.map((item, idx) => ({\n ...item,\n detailType: '',\n sequence: idx\n }))\n }\n }\n\n private _setGristConfig() {\n this.gristConfig = {\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n {\n type: 'select',\n name: 'mainType',\n header: '구분',\n record: {\n editable: false,\n options: Object.keys(CHECKLIST_MAIN_TYPE_LIST).map(key => ({\n display: CHECKLIST_MAIN_TYPE_LIST[key],\n value: key\n }))\n },\n width: 100\n },\n {\n type: 'string',\n name: 'name',\n header: '검사 항목',\n record: {\n editable: false\n },\n width: 200\n },\n {\n type: 'string',\n name: 'kcsCriteriaLabel',\n header: 'KCS 시방서 기준',\n record: {\n editable: false\n },\n width: 200\n },\n {\n type: 'string',\n name: 'siteSpecCriteria',\n header: '현장 시방서 기준',\n record: {\n editable: false,\n // 본문 앞 20글자만 요약 표시 (클릭 시 팝업으로 전체 본문 확인)\n renderer: (value: string) => (value && value.length > 20 ? `${value.slice(0, 20)}...` : value || '')\n },\n handlers: {\n click: (columns, data, column, record) => {\n if (!record?.siteSpecCriteria) return\n this.siteSpecDetail = record.siteSpecCriteria\n this.siteSpecDetailItem = record.name || ''\n }\n },\n width: 200\n }\n ],\n rows: {\n appendable: false\n },\n pagination: {\n infinite: true\n },\n sorters: [{ name: 'sequence' }]\n }\n }\n\n async fetchHandler() {\n if (!this.selectedProjectChecklist) return { records: [] }\n\n return {\n records: this.checklistItems\n }\n }\n\n async _createInspection() {\n if (!this.selectedProjectChecklist) {\n notify({ message: '체크리스트를 선택해주세요.', level: 'warn' })\n return\n }\n\n if (!this.checklistItems.length) {\n notify({ message: '체크리스트에 검사 항목이 없습니다.', level: 'warn' })\n return\n }\n\n const ctName = this._getConstructionTypeName(this.selectedProjectChecklist.constructionTypeId)\n const cdtName = this._getConstructionDetailTypeName(this.selectedProjectChecklist.constructionDetailTypeId)\n\n let patch: any = {}\n\n patch.buildingLevelId = this.htmlSelectLevel?.value\n patch.checklist = {\n name: this.selectedProjectChecklist.name,\n constructionType: ctName,\n constructionDetailType: cdtName,\n location: `${this.htmlSelectBuilding?.displayText} ${this.htmlSelectLevel?.displayText}층`,\n inspectionDrawingType: this.selectedInspectionDrawingType?.name,\n inspectionParts: this.selectedInspectionParts\n }\n patch.checklistItem = this.checklistItems.map(item => ({\n name: item.name,\n mainType: item.mainType || '',\n detailType: '',\n kcsCriteria: item.kcsCriteria || '',\n siteSpecCriteria: item.siteSpecCriteria || ''\n }))\n\n const response = await client.mutate({\n mutation: gql`\n mutation CreateBuildingInspection($patch: NewBuildingInspection!) {\n createBuildingInspection(patch: $patch) {\n id\n }\n }\n `,\n variables: {\n patch\n }\n })\n\n if (!response.errors) {\n notify({ message: '검측을 등록하였습니다.' })\n this.requestRefresh()\n this._close()\n } else {\n notify({ message: response.errors?.[0]?.message || '검측 등록에 실패하였습니다.', level: 'error' })\n }\n }\n\n private _onGristWheel(e: WheelEvent) {\n const body = this.renderRoot.querySelector('div[body]') as HTMLElement\n if (body) {\n body.scrollTop += e.deltaY\n e.preventDefault()\n }\n }\n\n requestRefresh() {\n this.dispatchEvent(new CustomEvent('requestRefresh'))\n }\n\n private _close() {\n history.back()\n }\n}\n"]}
1
+ {"version":3,"file":"inspection-with-checklist-create-popup.js","sourceRoot":"","sources":["../../../client/pages/building-inspection/inspection-with-checklist-create-popup.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist/ox-grist.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { DataGrist } from '@operato/data-grist/ox-grist.js'\nimport { client } from '@operato/graphql'\nimport { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles'\nimport { notify } from '@operato/layout'\nimport { BuildingInspectionStatus, CHECKLIST_MAIN_TYPE_LIST } from './building-inspection-list'\nimport { DrawingBundleModel } from '@dssp/drawing/dist-client/drawing-bundle/drawing-bundle-model.js'\nimport { loadDrawingBundle } from '@dssp/drawing/dist-client/drawing-bundle/drawing-bundle-loader.js'\nimport '../checklist/checklist-view'\nimport '../checklist/kcs-criteria-popup'\nimport { ChecklistMode } from '../checklist/checklist-view'\n\n@customElement('inspection-with-checklist-create-popup')\nclass InspectionWithChecklistCreatePopup extends LitElement {\n static styles = [\n ButtonContainerStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n padding: 15px 20px;\n\n background-color: var(--md-sys-color-surface);\n }\n\n md-filled-select {\n width: auto;\n min-width: 150px;\n --md-filled-select-text-field-container-color: transparent;\n --md-filled-select-text-field-active-indicator-color: #999;\n --md-filled-select-text-field-input-text-size: 14px;\n --md-filled-select-text-field-input-text-weight: bold;\n --md-filled-select-text-field-input-text-line-height: 6px;\n }\n md-filled-select[level] {\n min-width: 110px;\n margin-left: 20px;\n }\n md-filled-select[projectChecklist] {\n min-width: 300px;\n }\n\n checklist-view {\n pointer-events: none;\n transform-origin: top left;\n }\n\n div[body] {\n height: 100%;\n overflow-y: auto;\n\n div[tab-container][inactive] {\n display: none !important;\n }\n\n div[edit] {\n width: 100%;\n\n div[checklist-select],\n div[checklist-info],\n div[detail] {\n margin-bottom: 30px;\n }\n\n h3 {\n position: relative;\n color: #0595e5;\n font-size: 17px;\n font-weight: 700;\n background-color: var(--md-sys-color-surface);\n margin-top: 0;\n margin-bottom: 5px;\n }\n\n div[data-row] {\n display: grid;\n grid-template-columns: 100px 1fr 0.3fr 100px 1fr;\n gap: 15px;\n margin-bottom: 11px;\n\n & > label {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n font-size: 15px;\n }\n\n & > span[info] {\n display: flex;\n align-items: center;\n font-size: 15px;\n font-weight: bold;\n color: #333;\n padding: 4px 0;\n }\n\n }\n\n div[data-row][single] {\n grid-template-columns: 100px 1fr;\n }\n }\n\n div[preview] {\n display: flex;\n overflow-y: auto;\n overflow-x: hidden;\n }\n }\n\n div[tabs] {\n display: flex;\n\n button {\n background-color: #fff;\n padding: 6px 14px;\n color: #999;\n border: solid 1px #999;\n border-top: none;\n border-radius: 0px 0px 8px 8px;\n margin-right: -2px;\n cursor: pointer;\n\n &[active] {\n color: var(--button-color, var(--md-sys-color-on-secondary-container));\n font-weight: 600;\n }\n }\n }\n\n div[button-container] {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n\n md-elevated-button[blue] {\n --md-elevated-button-container-color: #0595e5;\n\n --md-elevated-button-label-text-color: #fff;\n --md-elevated-button-hover-label-text-color: #fff;\n --md-elevated-button-pressed-label-text-color: #fff;\n --md-elevated-button-focus-label-text-color: #fff;\n --md-elevated-button-icon-color: #fff;\n --md-elevated-button-hover-icon-color: #fff;\n --md-elevated-button-pressed-icon-color: #fff;\n --md-elevated-button-focus-icon-color: #fff;\n }\n }\n\n div[no-checklist] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n color: #999;\n font-size: 14px;\n border: 1px dashed #ccc;\n border-radius: 8px;\n }\n `\n ]\n\n @property({ type: String }) projectId: string = ''\n @property({ type: String }) selectedBuildingId: string = ''\n @property({ type: String }) selectedBuildingLevelId: string = ''\n\n @state() project: any = {}\n @state() buildings: any[] = []\n @state() selectedBuilding: any = {}\n @state() selectedLevel: any = {}\n\n @state() constructionTypes: any[] = []\n @state() allDetailTypes: any[] = []\n\n /** 도면 번들 — 동·층으로 검측 도면(패키지 루트)을 자동 할당한다 */\n @state() bundleModel?: DrawingBundleModel\n /** 자동 할당된 검측 도면(패키지 루트 도면 id) */\n @state() assignedDrawingId: string = ''\n\n @state() projectChecklists: any[] = []\n @state() selectedProjectChecklist: any = null\n @state() checklistItems: any[] = []\n @state() checklist: any = {}\n\n @state() activeTab: 'edit' | 'preview' = 'edit'\n @state() gristConfig: any\n\n @state() siteSpecDetail: string | null = null\n @state() siteSpecDetailItem: string = ''\n\n @query('md-filled-select[building]') htmlSelectBuilding\n @query('md-filled-select[level]') htmlSelectLevel\n @query('md-filled-select[projectChecklist]') htmlSelectProjectChecklist\n @query('ox-grist') grist!: DataGrist\n @query('div[preview]') checklistViewContainer!: HTMLDivElement\n @query('checklist-view') checklistView!: HTMLElement\n\n render() {\n const ctName = this._getConstructionTypeName(this.selectedProjectChecklist?.constructionTypeId)\n const cdtName = this._getConstructionDetailTypeName(this.selectedProjectChecklist?.constructionDetailTypeId)\n\n return html`\n <div body>\n <div tab-container ?inactive=${this.activeTab !== 'edit'} edit>\n <!-- 체크리스트 선택 -->\n <div checklist-select>\n <h3>체크리스트 선택</h3>\n <div data-row single>\n <label>체크리스트</label>\n <md-filled-select projectChecklist @change=${this._onSelectProjectChecklist}>\n <md-select-option value=\"\">\n <div slot=\"headline\">선택</div>\n </md-select-option>\n ${this.projectChecklists.map(cl => {\n const clCtName = this._getConstructionTypeName(cl.constructionTypeId)\n const clCdtName = this._getConstructionDetailTypeName(cl.constructionDetailTypeId)\n return html`\n <md-select-option .value=${cl.id}>\n <div slot=\"headline\">${cl.name} (${clCtName} / ${clCdtName})</div>\n </md-select-option>\n `\n })}\n </md-filled-select>\n </div>\n </div>\n\n <!-- 세부 정보 (항상 표시) -->\n <div detail>\n <h3>세부 정보</h3>\n\n <div data-row>\n <label>동</label>\n <md-filled-select building @change=${this._onSelectBuilding}>\n ${this.buildings?.map(building => {\n return html`<md-select-option .value=${building.id}>\n <div slot=\"headline\">${building.name}</div>\n </md-select-option>`\n })}\n </md-filled-select>\n\n <div partition></div>\n\n <label>층</label>\n <md-filled-select level @change=${this._onSelectBuildingLevel}>\n ${this.selectedBuilding?.buildingLevels?.map(level => {\n return html`<md-select-option .value=${level.id}>\n <div slot=\"headline\">${level.floorDisplayName}</div>\n </md-select-option>`\n })}\n </md-filled-select>\n </div>\n\n <div data-row single>\n <label>검측 도면</label>\n <span info>${this._assignedDrawingLabel()}</span>\n </div>\n </div>\n\n ${\n this.selectedProjectChecklist\n ? html`\n <!-- 체크리스트 정보 (읽기 전용) -->\n <div checklist-info>\n <h3>체크리스트 정보</h3>\n <div data-row single>\n <label>이름</label>\n <span info>${this.selectedProjectChecklist.name}</span>\n </div>\n <div data-row>\n <label>공종</label>\n <span info>${ctName}</span>\n\n <div partition></div>\n\n <label>세부공종</label>\n <span info>${cdtName}</span>\n </div>\n </div>\n\n <!-- 검사 항목 그리드 (읽기 전용) -->\n <ox-grist\n .mode=${'GRID'}\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n @wheel=${this._onGristWheel}\n >\n </ox-grist>\n `\n : html` <div no-checklist>체크리스트를 선택하면 검사 항목이 표시됩니다.</div> `\n }\n </div>\n\n <div tab-container ?inactive=${this.activeTab !== 'preview'} preview>\n <checklist-view\n .mode=${ChecklistMode.VIEWER}\n .projectType=${this.project.projectType}\n .checklist=${this.checklist}\n ></checklist-view>\n </div>\n </div>\n\n <div tabs>\n <button ?active=${this.activeTab === 'edit'} @click=${() => (this.activeTab = 'edit')}>검측 요청 정보</button>\n <button ?active=${this.activeTab === 'preview'} @click=${() => (this.activeTab = 'preview')}>미리보기</button>\n </div>\n\n <div button-container>\n <md-elevated-button blue @click=${this._createInspection}>\n <md-icon slot=\"icon\">task</md-icon>검측 등록\n </md-elevated-button>\n <md-elevated-button @click=${this._close}> <md-icon slot=\"icon\">cancel</md-icon>취소</md-elevated-button>\n </div>\n\n ${\n this.siteSpecDetail\n ? html`<kcs-criteria-popup\n .popupTitle=${'현장 시방서 기준'}\n .kcs=${{ text: this.siteSpecDetail }}\n .itemName=${this.siteSpecDetailItem}\n @close=${() => (this.siteSpecDetail = null)}\n ></kcs-criteria-popup>`\n : ''\n }\n `\n }\n\n updated() {\n if (this.checklistViewContainer && this.checklistView) {\n const ratio = Math.round((this.checklistViewContainer?.offsetWidth / this.checklistView?.offsetWidth) * 100) / 100 || 1\n this.checklistView.style.transform = `scale(${ratio})`\n }\n }\n\n async firstUpdated() {\n const response = await client.query({\n query: gql`\n query Project($id: String!, $checklistFilters: [Filter!]) {\n project(id: $id) {\n id\n name\n projectType\n documentNaming\n buildingComplex {\n id\n buildings {\n id\n name\n }\n }\n }\n\n constructionTypes {\n items {\n id\n name\n constructionDetailTypes {\n id\n name\n }\n }\n }\n\n projectChecklists(filters: $checklistFilters) {\n items {\n id\n name\n constructionTypeId\n constructionDetailTypeId\n projectChecklistItems {\n id\n mainType\n name\n kcsCriteria\n siteSpecCriteria\n sequence\n }\n }\n }\n }\n `,\n variables: {\n id: this.projectId,\n checklistFilters: [{ name: 'projectId', value: this.projectId, operator: 'eq' }]\n }\n })\n\n if (response.errors) return\n\n const project = response.data?.project\n const constructionTypes = response.data?.constructionTypes?.items || []\n const projectChecklists = response.data?.projectChecklists?.items || []\n\n this.project = project\n this.buildings = [...(project?.buildingComplex?.buildings || [])]\n this.constructionTypes = [...constructionTypes]\n this.allDetailTypes = constructionTypes.flatMap(ct =>\n (ct.constructionDetailTypes || []).map(dt => ({ ...dt, constructionTypeId: ct.id }))\n )\n this.projectChecklists = [...projectChecklists]\n\n // selectedBuildingId가 있으면 해당 빌딩 선택, 없으면 첫번째 빌딩 선택\n this.selectedBuilding = this.selectedBuildingId\n ? this.buildings.find(building => building.id == this.selectedBuildingId)\n : this.buildings[0]\n\n this.bundleModel = (await loadDrawingBundle(this.projectId)) || undefined\n\n // 선택된 동의 층 리스트 가져오기\n this.selectedBuilding = await this._getBuilding(this.selectedBuilding?.id)\n\n // selectedBuildingLevelId가 있으면 선택된 층, 없으면 첫번째 층 선택\n this.selectedLevel = this.selectedBuildingLevelId\n ? this.selectedBuilding?.buildingLevels?.find(level => level.id == this.selectedBuildingLevelId)\n : this.selectedBuilding?.buildingLevels?.[0]\n\n // 동, 층이 랜더링 된 후에 select를 위해 이 시점에서 랜더링\n this.selectedBuilding = await { ...this.selectedBuilding }\n\n // 기본 값 셋팅 select\n await this.htmlSelectBuilding?.select(this.selectedBuilding?.id)\n await this.htmlSelectLevel?.select(this.selectedLevel?.id)\n this._assignDrawing()\n await this.htmlSelectProjectChecklist?.selectIndex(0)\n\n this.checklist = {\n location: `${this.selectedBuilding?.name || ''} ${this.selectedLevel?.floorDisplayName || ''}층`,\n documentNo: `${project.documentNaming} 검측 제01-00000호`,\n buildingInspection: {\n status: BuildingInspectionStatus.WAIT\n }\n }\n\n // 그리드 셋팅\n this._setGristConfig()\n }\n\n async _getBuilding(buildingId: string = '') {\n if (!buildingId) return {}\n\n const response = await client.query({\n query: gql`\n query Building($id: String!) {\n building(id: $id) {\n id\n name\n buildingLevels {\n id\n floor\n floorDisplayName\n mainDrawing {\n id\n name\n fullpath\n }\n mainDrawingImage\n }\n }\n }\n `,\n variables: {\n id: buildingId\n }\n })\n\n if (response.errors) return {}\n\n return response.data?.building || {}\n }\n\n private _getConstructionTypeName(ctId: string): string {\n return this.constructionTypes.find(ct => ct.id === ctId)?.name || ''\n }\n\n private _getConstructionDetailTypeName(cdtId: string): string {\n return this.allDetailTypes.find(dt => dt.id === cdtId)?.name || ''\n }\n\n private _onSelectProjectChecklist(e) {\n const id = e.target.value\n const checklist = this.projectChecklists.find(c => c.id === id)\n this.selectedProjectChecklist = checklist || null\n this.checklistItems = (checklist?.projectChecklistItems || [])\n .map(item => ({ ...item, kcsCriteriaLabel: this._kcsLabel(item.kcsCriteria) }))\n .sort((a, b) => (a.sequence || 0) - (b.sequence || 0))\n\n this._updateChecklist()\n\n // 그리드가 있을때만 fetch (체크리스트 미선택 → 선택 시 grist가 새로 렌더링됨)\n this.updateComplete.then(() => {\n this.grist?.fetch()\n })\n }\n\n private async _onSelectBuilding(e) {\n const buildingId = e.target.value\n this.selectedBuilding = await this._getBuilding(buildingId)\n this.selectedLevel = await { ...this.selectedBuilding?.buildingLevels?.[0] }\n\n await this.htmlSelectLevel?.selectIndex(0)\n this._assignDrawing()\n }\n\n private _onSelectBuildingLevel(e) {\n const buildingLevelId = e.target.value\n this.selectedLevel = {\n ...(this.selectedBuilding?.buildingLevels?.find(v => v.id == buildingLevelId) || {})\n }\n this._assignDrawing()\n }\n\n /**\n * 동·층에 해당하는 도면 패키지를 찾아 검측 도면으로 자동 할당한다.\n * 패키지의 첫 장(건축 층 평면도)이 검측 도면이 되고, 하위 도면은 하이퍼링크로 이어진다.\n */\n private _assignDrawing() {\n const pkg = this.bundleModel?.packageOfLevel(this.selectedBuilding?.name, this.selectedLevel?.floor)\n this.assignedDrawingId = pkg?.root || ''\n this._updateChecklist()\n }\n\n private _assignedDrawingLabel(): string {\n if (!this.assignedDrawingId) return '해당 동·층에 배정된 도면 패키지가 없습니다.'\n return this.bundleModel?.drawing(this.assignedDrawingId)?.drawing_name || this.assignedDrawingId\n }\n\n // KCS 기준 JSON 문자열에서 file_label(요약 텍스트) 추출\n private _kcsLabel(kcsCriteria?: string): string {\n if (!kcsCriteria) return ''\n try {\n return JSON.parse(kcsCriteria)?.file_label || ''\n } catch {\n return ''\n }\n }\n\n private _updateChecklist() {\n const ctName = this._getConstructionTypeName(this.selectedProjectChecklist?.constructionTypeId)\n const cdtName = this._getConstructionDetailTypeName(this.selectedProjectChecklist?.constructionDetailTypeId)\n\n this.checklist = {\n name: this.selectedProjectChecklist?.name || '',\n constructionType: ctName,\n constructionDetailType: cdtName,\n location:\n this.selectedBuilding?.name && this.selectedLevel?.floorDisplayName\n ? `${this.selectedBuilding.name} ${this.selectedLevel.floorDisplayName}층`\n : '',\n inspectionDrawingType: this.assignedDrawingId,\n documentNo: `${this.project.documentNaming || ''} 검측 제01-00000호`,\n buildingInspection: {\n status: BuildingInspectionStatus.WAIT\n },\n checklistItems: this.checklistItems.map((item, idx) => ({\n ...item,\n detailType: '',\n sequence: idx\n }))\n }\n }\n\n private _setGristConfig() {\n this.gristConfig = {\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n {\n type: 'select',\n name: 'mainType',\n header: '구분',\n record: {\n editable: false,\n options: Object.keys(CHECKLIST_MAIN_TYPE_LIST).map(key => ({\n display: CHECKLIST_MAIN_TYPE_LIST[key],\n value: key\n }))\n },\n width: 100\n },\n {\n type: 'string',\n name: 'name',\n header: '검사 항목',\n record: {\n editable: false\n },\n width: 200\n },\n {\n type: 'string',\n name: 'kcsCriteriaLabel',\n header: 'KCS 시방서 기준',\n record: {\n editable: false\n },\n width: 200\n },\n {\n type: 'string',\n name: 'siteSpecCriteria',\n header: '현장 시방서 기준',\n record: {\n editable: false,\n // 본문 앞 20글자만 요약 표시 (클릭 시 팝업으로 전체 본문 확인)\n renderer: (value: string) => (value && value.length > 20 ? `${value.slice(0, 20)}...` : value || '')\n },\n handlers: {\n click: (columns, data, column, record) => {\n if (!record?.siteSpecCriteria) return\n this.siteSpecDetail = record.siteSpecCriteria\n this.siteSpecDetailItem = record.name || ''\n }\n },\n width: 200\n }\n ],\n rows: {\n appendable: false\n },\n pagination: {\n infinite: true\n },\n sorters: [{ name: 'sequence' }]\n }\n }\n\n async fetchHandler() {\n if (!this.selectedProjectChecklist) return { records: [] }\n\n return {\n records: this.checklistItems\n }\n }\n\n async _createInspection() {\n if (!this.selectedProjectChecklist) {\n notify({ message: '체크리스트를 선택해주세요.', level: 'warn' })\n return\n }\n\n if (!this.checklistItems.length) {\n notify({ message: '체크리스트에 검사 항목이 없습니다.', level: 'warn' })\n return\n }\n\n const ctName = this._getConstructionTypeName(this.selectedProjectChecklist.constructionTypeId)\n const cdtName = this._getConstructionDetailTypeName(this.selectedProjectChecklist.constructionDetailTypeId)\n\n let patch: any = {}\n\n patch.buildingLevelId = this.htmlSelectLevel?.value\n patch.checklist = {\n name: this.selectedProjectChecklist.name,\n constructionType: ctName,\n constructionDetailType: cdtName,\n location: `${this.htmlSelectBuilding?.displayText} ${this.htmlSelectLevel?.displayText}층`,\n inspectionDrawingType: this.assignedDrawingId\n }\n patch.checklistItem = this.checklistItems.map(item => ({\n name: item.name,\n mainType: item.mainType || '',\n detailType: '',\n kcsCriteria: item.kcsCriteria || '',\n siteSpecCriteria: item.siteSpecCriteria || ''\n }))\n\n const response = await client.mutate({\n mutation: gql`\n mutation CreateBuildingInspection($patch: NewBuildingInspection!) {\n createBuildingInspection(patch: $patch) {\n id\n }\n }\n `,\n variables: {\n patch\n }\n })\n\n if (!response.errors) {\n notify({ message: '검측을 등록하였습니다.' })\n this.requestRefresh()\n this._close()\n } else {\n notify({ message: response.errors?.[0]?.message || '검측 등록에 실패하였습니다.', level: 'error' })\n }\n }\n\n private _onGristWheel(e: WheelEvent) {\n const body = this.renderRoot.querySelector('div[body]') as HTMLElement\n if (body) {\n body.scrollTop += e.deltaY\n e.preventDefault()\n }\n }\n\n requestRefresh() {\n this.dispatchEvent(new CustomEvent('requestRefresh'))\n }\n\n private _close() {\n history.back()\n }\n}\n"]}
@@ -49,11 +49,12 @@ export declare class BuildingInspectionGridDetail extends BuildingInspectionGrid
49
49
  _onClickCreateInspection(): void;
50
50
  _onClickUpdateInspection(initialTab?: number): void;
51
51
  refresh(buildingInspectionId?: string): Promise<void>;
52
- _getIconHtmlByStatus(status: string): import("lit-html").TemplateResult<1> | "";
52
+ _getIconHtmlByStatus(status: string): "" | import("lit-html").TemplateResult<1>;
53
53
  private _groupInspectionsByCell;
54
54
  private _openListLayer;
55
55
  private _closeListLayer;
56
56
  private _onSelectListItem;
57
+ private _formatDate;
57
58
  private _getCellElement;
58
59
  private validateChecklist;
59
60
  _onClickApplyToAll(): Promise<void>;
@@ -206,7 +206,7 @@ let BuildingInspectionGridDetail = class BuildingInspectionGridDetail extends Sc
206
206
  <hr />
207
207
 
208
208
  <div>
209
- <div date>검측일 : ${this.selectedInspection.requestDate}</div>
209
+ <div date>검측일 : ${this._formatDate(this.selectedInspection.requestDate)}</div>
210
210
  </div>
211
211
 
212
212
  <hr />
@@ -494,8 +494,16 @@ let BuildingInspectionGridDetail = class BuildingInspectionGridDetail extends Sc
494
494
  this.cell = cell || '';
495
495
  return;
496
496
  }
497
- // 검측이 있으면 레이어 오픈
498
497
  this.cell = cell || '';
498
+ // 검측이 1건이면 바로 선택 — 레이어에서 다시 고를 필요 없음
499
+ if (items.length === 1) {
500
+ this._closeListLayer();
501
+ this.selectedInspection = await this._getBuildingInspection(items[0].id);
502
+ return;
503
+ }
504
+ // 여러 건이면 레이어에서 선택. 이전 선택(예: 직전에 등록한 검측)이 남아 있으면
505
+ // 우측 패널/삭제 버튼이 클릭한 셀과 다른 검측을 가리키므로 셀 좌표만 남기고 비운다.
506
+ this.selectedInspection = { cellX, cellY };
499
507
  this._openListLayer(target, items, this.cell);
500
508
  }
501
509
  _onClicPopupNotice() {
@@ -591,6 +599,15 @@ let BuildingInspectionGridDetail = class BuildingInspectionGridDetail extends Sc
591
599
  this.selectedInspection = inspection;
592
600
  this._closeListLayer();
593
601
  }
602
+ // requestDate 는 epoch(ms) 문자열로 내려와 그대로 찍으면 타임스탬프로 보임 → YYYY-MM-DD (KST) 로 표시
603
+ _formatDate(date) {
604
+ if (!date)
605
+ return '';
606
+ const parsed = /^\d+$/.test(String(date)) ? new Date(Number(date)) : new Date(date);
607
+ if (isNaN(parsed.getTime()))
608
+ return '';
609
+ return new Intl.DateTimeFormat('en-CA', { timeZone: 'Asia/Seoul', year: 'numeric', month: '2-digit', day: '2-digit' }).format(parsed);
610
+ }
594
611
  _getCellElement(cell) {
595
612
  var _a;
596
613
  if (!cell)