@dssp/project 1.0.0-alpha.8 → 1.0.0-y.0

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 (102) hide show
  1. package/dist-client/index.d.ts +1 -0
  2. package/dist-client/index.js +1 -1
  3. package/dist-client/index.js.map +1 -1
  4. package/dist-client/pages/lib/chatbot-widget.d.ts +53 -0
  5. package/dist-client/pages/lib/chatbot-widget.js +631 -0
  6. package/dist-client/pages/lib/chatbot-widget.js.map +1 -0
  7. package/dist-client/pages/lib/select2-component.d.ts +1 -1
  8. package/dist-client/pages/lib/select2-component.js +35 -35
  9. package/dist-client/pages/lib/select2-component.js.map +1 -1
  10. package/dist-client/pages/project/component/pagenation.d.ts +18 -0
  11. package/dist-client/pages/project/component/pagenation.js +142 -0
  12. package/dist-client/pages/project/component/pagenation.js.map +1 -0
  13. package/dist-client/pages/project/component/project-update-header.js +26 -3
  14. package/dist-client/pages/project/component/project-update-header.js.map +1 -1
  15. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.d.ts +1 -0
  16. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js +309 -0
  17. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js.map +1 -0
  18. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.d.ts +1 -0
  19. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js +357 -0
  20. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js.map +1 -0
  21. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.d.ts +1 -0
  22. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js +681 -0
  23. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js.map +1 -0
  24. package/dist-client/pages/project/popup/checklist/task-checklist-view.d.ts +32 -0
  25. package/dist-client/pages/project/popup/checklist/task-checklist-view.js +621 -0
  26. package/dist-client/pages/project/popup/checklist/task-checklist-view.js.map +1 -0
  27. package/dist-client/pages/project/popup/popup-plan-export.js +8 -2
  28. package/dist-client/pages/project/popup/popup-plan-export.js.map +1 -1
  29. package/dist-client/pages/project/popup/{popup-schedule-upload.d.ts → popup-task-upload.d.ts} +1 -1
  30. package/dist-client/pages/project/popup/{popup-schedule-upload.js → popup-task-upload.js} +9 -9
  31. package/dist-client/pages/project/popup/popup-task-upload.js.map +1 -0
  32. package/dist-client/pages/project/project-completed-list.d.ts +5 -0
  33. package/dist-client/pages/project/project-completed-list.js +32 -3
  34. package/dist-client/pages/project/project-completed-list.js.map +1 -1
  35. package/dist-client/pages/project/project-detail.js +50 -20
  36. package/dist-client/pages/project/project-detail.js.map +1 -1
  37. package/dist-client/pages/project/project-list.d.ts +41 -0
  38. package/dist-client/pages/project/project-list.js +66 -3
  39. package/dist-client/pages/project/project-list.js.map +1 -1
  40. package/dist-client/pages/project/project-setting-list.d.ts +5 -0
  41. package/dist-client/pages/project/project-setting-list.js +32 -3
  42. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  43. package/dist-client/pages/project/{project-schedule-list.d.ts → project-task-list.d.ts} +2 -2
  44. package/dist-client/pages/project/{project-schedule-list.js → project-task-list.js} +11 -11
  45. package/dist-client/pages/project/project-task-list.js.map +1 -0
  46. package/dist-client/pages/project/{project-schedule.d.ts → project-task.d.ts} +17 -4
  47. package/dist-client/pages/project/project-task.js +686 -0
  48. package/dist-client/pages/project/project-task.js.map +1 -0
  49. package/dist-client/pages/project/project-update.js +221 -28
  50. package/dist-client/pages/project/project-update.js.map +1 -1
  51. package/dist-client/route.d.ts +1 -1
  52. package/dist-client/route.js +4 -4
  53. package/dist-client/route.js.map +1 -1
  54. package/dist-client/tsconfig.tsbuildinfo +1 -1
  55. package/dist-server/controllers/parse-excel.js.map +1 -1
  56. package/dist-server/service/index.d.ts +2 -2
  57. package/dist-server/service/index.js +5 -2
  58. package/dist-server/service/index.js.map +1 -1
  59. package/dist-server/service/project/project-mutation.js +5 -1
  60. package/dist-server/service/project/project-mutation.js.map +1 -1
  61. package/dist-server/service/project/project-query.d.ts +3 -0
  62. package/dist-server/service/project/project-query.js +48 -0
  63. package/dist-server/service/project/project-query.js.map +1 -1
  64. package/dist-server/service/project/project-type.d.ts +5 -0
  65. package/dist-server/service/project/project-type.js +19 -1
  66. package/dist-server/service/project/project-type.js.map +1 -1
  67. package/dist-server/service/project/project.d.ts +9 -0
  68. package/dist-server/service/project/project.js +31 -1
  69. package/dist-server/service/project/project.js.map +1 -1
  70. package/dist-server/service/task/task-query.d.ts +2 -0
  71. package/dist-server/service/task/task-query.js +11 -0
  72. package/dist-server/service/task/task-query.js.map +1 -1
  73. package/dist-server/service/task/task.d.ts +2 -0
  74. package/dist-server/service/task/task.js +6 -0
  75. package/dist-server/service/task/task.js.map +1 -1
  76. package/dist-server/service/task-checklist-binding/index.d.ts +5 -0
  77. package/dist-server/service/task-checklist-binding/index.js +9 -0
  78. package/dist-server/service/task-checklist-binding/index.js.map +1 -0
  79. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.d.ts +5 -0
  80. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js +186 -0
  81. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js.map +1 -0
  82. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.d.ts +8 -0
  83. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js +61 -0
  84. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js.map +1 -0
  85. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.d.ts +15 -0
  86. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js +57 -0
  87. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js.map +1 -0
  88. package/dist-server/service/task-checklist-binding/task-checklist-binding.d.ts +22 -0
  89. package/dist-server/service/task-checklist-binding/task-checklist-binding.js +106 -0
  90. package/dist-server/service/task-checklist-binding/task-checklist-binding.js.map +1 -0
  91. package/dist-server/tsconfig.tsbuildinfo +1 -1
  92. package/package.json +5 -3
  93. package/things-factory.config.js +3 -3
  94. package/translations/en.json +10 -9
  95. package/translations/ja.json +15 -1
  96. package/translations/ko.json +3 -0
  97. package/translations/ms.json +15 -1
  98. package/translations/zh.json +15 -1
  99. package/dist-client/pages/project/popup/popup-schedule-upload.js.map +0 -1
  100. package/dist-client/pages/project/project-schedule-list.js.map +0 -1
  101. package/dist-client/pages/project/project-schedule.js +0 -407
  102. package/dist-client/pages/project/project-schedule.js.map +0 -1
@@ -0,0 +1,621 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/icon/icon.js';
3
+ import gql from 'graphql-tag';
4
+ import { client } from '@operato/graphql';
5
+ import { css, html, LitElement } from 'lit';
6
+ import { customElement, property } from 'lit/decorators.js';
7
+ import { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles';
8
+ import '@operato/input/ox-input-signature.js';
9
+ import { store } from '@operato/shell';
10
+ import { connect } from 'pwa-helpers/connect-mixin.js';
11
+ import { openPopup } from '@operato/layout';
12
+ import './task-checklist-comment-list-popup';
13
+ import './task-checklist-attachment-list-popup';
14
+ export var ChecklistTypeMainType;
15
+ (function (ChecklistTypeMainType) {
16
+ ChecklistTypeMainType["BASIC"] = "10";
17
+ ChecklistTypeMainType["NON_BASIC"] = "20";
18
+ })(ChecklistTypeMainType || (ChecklistTypeMainType = {}));
19
+ export const CHECKLIST_MAIN_TYPE_LIST = {
20
+ [ChecklistTypeMainType.BASIC]: '기본 업무',
21
+ [ChecklistTypeMainType.NON_BASIC]: '기본 외 업무'
22
+ };
23
+ export var BuildingInspectionStatus;
24
+ (function (BuildingInspectionStatus) {
25
+ BuildingInspectionStatus["WAIT"] = "WAIT";
26
+ BuildingInspectionStatus["OVERALL_WAIT"] = "OVERALL_WAIT";
27
+ BuildingInspectionStatus["REQUEST"] = "REQUEST";
28
+ BuildingInspectionStatus["OVERALL_REQUEST"] = "OVERALL_REQUEST";
29
+ BuildingInspectionStatus["PASS"] = "PASS";
30
+ BuildingInspectionStatus["FAIL"] = "FAIL";
31
+ })(BuildingInspectionStatus || (BuildingInspectionStatus = {}));
32
+ export const BUILDING_INSPECTION_STATUS_DISPLAY = {
33
+ [BuildingInspectionStatus.WAIT]: '검측 대기',
34
+ [BuildingInspectionStatus.OVERALL_WAIT]: '검측 대기',
35
+ [BuildingInspectionStatus.REQUEST]: '검측 요청',
36
+ [BuildingInspectionStatus.OVERALL_REQUEST]: '검측 요청',
37
+ [BuildingInspectionStatus.PASS]: '합격',
38
+ [BuildingInspectionStatus.FAIL]: '불합격'
39
+ };
40
+ let TaskChecklistView = class TaskChecklistView extends connect(store)(LitElement) {
41
+ constructor() {
42
+ super(...arguments);
43
+ this.mode = "VIEWER" /* ChecklistMode.VIEWER */;
44
+ this.checklist = {};
45
+ this.buildingComplex = {
46
+ id: '',
47
+ taskConstructorEmails: [],
48
+ overallConstructorEmails: [],
49
+ taskSupervisoryEmails: [],
50
+ overallSupervisoryEmails: []
51
+ };
52
+ this.status = BuildingInspectionStatus.WAIT;
53
+ }
54
+ render() {
55
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
56
+ const today = this._getDate(new Date());
57
+ // 시공자 스탭 여부
58
+ const isConstructorStep = this.status == BuildingInspectionStatus.WAIT ||
59
+ this.status == BuildingInspectionStatus.OVERALL_WAIT ||
60
+ this.status == BuildingInspectionStatus.FAIL;
61
+ // 감리자 스탭 여부
62
+ const isSupervisoryStep = this.status == BuildingInspectionStatus.REQUEST || this.status == BuildingInspectionStatus.OVERALL_REQUEST;
63
+ // 현재 스탭에 해당하는 계정인지 체크 (편집모드만)
64
+ let havePermissionByStatus = false;
65
+ let isTaskConstructor = false;
66
+ let isOverallConstructor = false;
67
+ let isTaskSupervisory = false;
68
+ let isOverallSupervisory = false;
69
+ if (this.mode == "EDITOR" /* ChecklistMode.EDITOR */ && this.status) {
70
+ const email = (_b = (_a = store.getState().auth) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.email;
71
+ // 현재 유저가 "공종별 시공 관리자" 인지 체크
72
+ isTaskConstructor = ((_c = this.buildingComplex.taskConstructorEmails) === null || _c === void 0 ? void 0 : _c.includes(email)) || false;
73
+ // 현재 유저가 "총괄 시공 책임자" 인지 체크
74
+ isOverallConstructor = ((_d = this.buildingComplex.overallConstructorEmails) === null || _d === void 0 ? void 0 : _d.includes(email)) || false;
75
+ // 현재 유저가 "공종별 감리 책임자" 인지 체크
76
+ isTaskSupervisory = ((_e = this.buildingComplex.taskSupervisoryEmails) === null || _e === void 0 ? void 0 : _e.includes(email)) || false;
77
+ // 현재 유저가 "총괄 감리 책임자" 인지 체크
78
+ isOverallSupervisory = ((_f = this.buildingComplex.overallSupervisoryEmails) === null || _f === void 0 ? void 0 : _f.includes(email)) || false;
79
+ // 스탭이 시공자 스탭일때에 내가 시공자 권한이 있는지 체크
80
+ havePermissionByStatus = isConstructorStep
81
+ ? isTaskConstructor || isOverallConstructor
82
+ : isTaskSupervisory || isOverallSupervisory;
83
+ }
84
+ // 체크리스트 아이템 정렬
85
+ (_h = (_g = this.checklist) === null || _g === void 0 ? void 0 : _g.checklistItems) === null || _h === void 0 ? void 0 : _h.sort((a, b) => {
86
+ // 1순위: mainType 오름차순
87
+ if (a.mainType < b.mainType)
88
+ return -1;
89
+ if (a.mainType > b.mainType)
90
+ return 1;
91
+ // 2순위: detailType 오름차순
92
+ if (a.detailType < b.detailType)
93
+ return -1;
94
+ if (a.detailType > b.detailType)
95
+ return 1;
96
+ // 3순위: sequence 오름차순
97
+ return a.sequence - b.sequence;
98
+ });
99
+ const processedItems = this.drawChecklistItems(((_j = this.checklist) === null || _j === void 0 ? void 0 : _j.checklistItems) || []);
100
+ return html `
101
+ <div title-row>
102
+ <div name>${this.checklist.name}</div>
103
+ </div>
104
+ <table header>
105
+ <tr>
106
+ <th>공종</th>
107
+ <td>${this.checklist.constructionType}</td>
108
+ <th>문서 번호</th>
109
+ <td>${this.checklist.documentNo}</td>
110
+ </tr>
111
+ <tr>
112
+ <th>세부 공종</th>
113
+ <td>${this.checklist.constructionDetailType}</td>
114
+ <th>검측 상태</th>
115
+ <td>${BUILDING_INSPECTION_STATUS_DISPLAY[this.status]}</td>
116
+ </tr>
117
+ </table>
118
+
119
+ <table body>
120
+ <thead>
121
+ <tr>
122
+ <th colspan="2" rowspan="3" type>구분</th>
123
+ <th rowspan="3" inspection-name>검사항목</th>
124
+ <th rowspan="3" criteria>검사기준</th>
125
+ <th colspan="4" result>검사결과</th>
126
+ <th rowspan="3" small>첨부자료</th>
127
+ <th rowspan="3" small>조치사항</th>
128
+ </tr>
129
+ <tr>
130
+ <th colspan="2">시공자</th>
131
+ <th colspan="2">감리자</th>
132
+ </tr>
133
+ <tr>
134
+ <th>적합</th>
135
+ <th>부적합</th>
136
+ <th>적합</th>
137
+ <th>부적합</th>
138
+ </tr>
139
+ </thead>
140
+ <tbody>
141
+ ${processedItems.map(({ item, showMainTypeCell, mainTypeRowspan, showDetailTypeCell, detailTypeRowspan }, idx) => {
142
+ return html ` <tr>
143
+ ${showMainTypeCell
144
+ ? html `<td main-type bold rowspan="${mainTypeRowspan}">${CHECKLIST_MAIN_TYPE_LIST[item.mainType]}</td>`
145
+ : ''}
146
+ ${showDetailTypeCell ? html ` <td bold rowspan="${detailTypeRowspan}">${item.detailType}</td> ` : ''}
147
+
148
+ <td>${idx + 1}. ${item.name}</td>
149
+ <td>${item.inspctionCriteria}</td>
150
+ <td radio>
151
+ <md-radio
152
+ item-id=${item.id}
153
+ item-name="constructionConfirmStatus"
154
+ name=${'radio-construction-' + item.id}
155
+ value="T"
156
+ .checked=${item.constructionConfirmStatus === 'T'}
157
+ ?disabled=${!isConstructorStep || !havePermissionByStatus}
158
+ @change=${this._onChangeConfirmStatus}
159
+ ></md-radio>
160
+ </td>
161
+ <td radio>
162
+ <md-radio
163
+ item-id=${item.id}
164
+ item-name="constructionConfirmStatus"
165
+ name=${'radio-construction-' + item.id}
166
+ value="F"
167
+ .checked=${item.constructionConfirmStatus === 'F'}
168
+ ?disabled=${!isConstructorStep || !havePermissionByStatus}
169
+ @change=${this._onChangeConfirmStatus}
170
+ ></md-radio>
171
+ </td>
172
+ <td radio>
173
+ <md-radio
174
+ item-id=${item.id}
175
+ item-name="supervisoryConfirmStatus"
176
+ name=${'radio-supervisory-' + item.id}
177
+ value="T"
178
+ .checked=${item.supervisoryConfirmStatus === 'T'}
179
+ ?disabled=${!isSupervisoryStep || !havePermissionByStatus}
180
+ @change=${this._onChangeConfirmStatus}
181
+ ></md-radio>
182
+ </td>
183
+ <td radio>
184
+ <md-radio
185
+ item-id=${item.id}
186
+ item-name="supervisoryConfirmStatus"
187
+ name=${'radio-supervisory-' + item.id}
188
+ value="F"
189
+ .checked=${item.supervisoryConfirmStatus === 'F'}
190
+ ?disabled=${!isSupervisoryStep || !havePermissionByStatus}
191
+ @change=${this._onChangeConfirmStatus}
192
+ ></md-radio>
193
+ </td>
194
+ <td
195
+ attachment
196
+ ?disabled=${this.status == BuildingInspectionStatus.PASS}
197
+ @click=${() => this._onClickAttachment(item.id)}
198
+ >
199
+ <md-icon slot="icon">attach_file</md-icon>
200
+ <span>${(item === null || item === void 0 ? void 0 : item.checklistItemAttachmentCount) || ''}</span>
201
+ </td>
202
+ <td comment ?disabled=${this.status == BuildingInspectionStatus.PASS} @click=${() => this._onClickComment(item.id)}>
203
+ <md-icon slot="icon">chat</md-icon>
204
+ <span>${(item === null || item === void 0 ? void 0 : item.checklistItemCommentCount) || ''}</span>
205
+ </td>
206
+ </tr>`;
207
+ })}
208
+ </tbody>
209
+ </table>
210
+
211
+ <table tail>
212
+ <tbody>
213
+ <tr first>
214
+ <th rowspan="2">시공자 점검일</th>
215
+ <td rowspan="2">
216
+ ${this.mode == "VIEWER" /* ChecklistMode.VIEWER */ ? today : this._getDate(this.checklist.constructionInspectionDate)}
217
+ </td>
218
+ <th>공종별 시공 관리자</th>
219
+ <td>
220
+ <span sign-text>(인)</span>
221
+ <ox-input-signature
222
+ .value=${this.checklist.taskConstructorSignature}
223
+ name="taskConstructorSignature"
224
+ @change=${this._onChangeSignature}
225
+ ?disabled=${(this.status != BuildingInspectionStatus.WAIT && this.status != BuildingInspectionStatus.FAIL) ||
226
+ !isTaskConstructor}
227
+ >
228
+ </ox-input-signature>
229
+ </td>
230
+ </tr>
231
+ <tr>
232
+ <th>총괄 시공 책임자</th>
233
+ <td>
234
+ <span sign-text>(인)</span>
235
+ <ox-input-signature
236
+ .value=${this.checklist.overallConstructorSignature}
237
+ name="overallConstructorSignature"
238
+ @change=${this._onChangeSignature}
239
+ ?disabled=${this.status != BuildingInspectionStatus.OVERALL_WAIT || !isOverallConstructor}
240
+ >
241
+ </ox-input-signature>
242
+ </td>
243
+ </tr>
244
+ <tr>
245
+ <th rowspan="2">감리자 점검일</th>
246
+ <td rowspan="2">
247
+ ${this.mode == "VIEWER" /* ChecklistMode.VIEWER */ ? today : this._getDate(this.checklist.supervisorInspectionDate)}
248
+ </td>
249
+ <th>공종별 감리 책임자</th>
250
+ <td>
251
+ <span sign-text>(인)</span>
252
+ <ox-input-signature
253
+ .value=${this.checklist.taskSupervisorySignature}
254
+ name="taskSupervisorySignature"
255
+ @change=${this._onChangeSignature}
256
+ ?disabled=${this.status != BuildingInspectionStatus.REQUEST || !isTaskSupervisory}
257
+ >
258
+ </ox-input-signature>
259
+ </td>
260
+ </tr>
261
+ <tr>
262
+ <th>총괄 감리 책임자</th>
263
+ <td>
264
+ <span sign-text>(인)</span>
265
+ <ox-input-signature
266
+ .value=${this.checklist.overallSupervisorySignature}
267
+ name="overallSupervisorySignature"
268
+ @change=${this._onChangeSignature}
269
+ ?disabled=${this.status != BuildingInspectionStatus.OVERALL_REQUEST || !isOverallSupervisory}
270
+ >
271
+ </ox-input-signature>
272
+ </td>
273
+ </tr>
274
+ </tbody>
275
+ </table>
276
+
277
+ <div footer>
278
+ <div>
279
+ - 검사결과는 1차, 2차로 구분 재검측시 2차에 기록하고 검사기준도 검사결과와 비교될 수 있도록 시방서 또는 도면 등에 있는
280
+ 수치를 작성하며, 수치가 없는 검사항목은 시방서 또는 설계도서에 있는 내용과 검사한 내용으로 작성함
281
+ </div>
282
+ <div>- 검사항목 및 검사기준은 각 공종별로 감리원과 협의하여 작성할 것</div>
283
+ </div>
284
+ `;
285
+ }
286
+ _onChangeConfirmStatus(e) {
287
+ var _a, _b;
288
+ const target = e.target;
289
+ const itemId = target.getAttribute('item-id');
290
+ const name = target.getAttribute('item-name') || '';
291
+ const value = target.value;
292
+ this.checklist.checklistItems = (_b = (_a = this.checklist) === null || _a === void 0 ? void 0 : _a.checklistItems) === null || _b === void 0 ? void 0 : _b.map(item => item.id == itemId ? Object.assign(Object.assign({}, item), { [name]: value }) : item);
293
+ }
294
+ _onChangeSignature(e) {
295
+ const target = e.target;
296
+ this.checklist[target.name] = target.value;
297
+ }
298
+ _getDate(date) {
299
+ if (!date)
300
+ return ' 년 월 일';
301
+ const _date = new Date(date) || new Date();
302
+ return _date.toLocaleDateString('ko-KR', {
303
+ timeZone: 'Asia/Seoul',
304
+ year: 'numeric',
305
+ month: 'long',
306
+ day: 'numeric'
307
+ });
308
+ }
309
+ drawChecklistItems(checklistItems) {
310
+ const mainTypeRowspans = {};
311
+ const detailTypeRowspans = {};
312
+ let previousMainType = null;
313
+ let previousDetailType = null;
314
+ return checklistItems.map((item, index) => {
315
+ const mainType = item.mainType;
316
+ const detailType = item.detailType;
317
+ // mainType이 변경되면 rowspan을 계산
318
+ if (mainType !== previousMainType) {
319
+ mainTypeRowspans[mainType] = checklistItems.filter(i => i.mainType === mainType).length;
320
+ previousDetailType = null; // detailType 초기화
321
+ }
322
+ // detailType이 변경되면 rowspan을 계산
323
+ if (detailType !== previousDetailType) {
324
+ detailTypeRowspans[`${mainType}-${detailType}`] = checklistItems.filter(i => i.mainType === mainType && i.detailType === detailType).length;
325
+ }
326
+ const showMainTypeCell = mainType !== previousMainType;
327
+ const showDetailTypeCell = detailType !== previousDetailType;
328
+ const mainTypeRowspan = mainTypeRowspans[mainType];
329
+ const detailTypeRowspan = detailTypeRowspans[`${mainType}-${detailType}`];
330
+ // 이전 값을 업데이트
331
+ previousMainType = mainType;
332
+ previousDetailType = detailType;
333
+ return {
334
+ item,
335
+ showMainTypeCell,
336
+ mainTypeRowspan,
337
+ showDetailTypeCell,
338
+ detailTypeRowspan
339
+ };
340
+ });
341
+ }
342
+ _onClickComment(checklistItemId) {
343
+ openPopup(html `
344
+ <task-checklist-comment-list-popup
345
+ .checklistItemId=${checklistItemId}
346
+ .status=${this.status}
347
+ @change-comment=${this._refreshItem.bind(this)}
348
+ ></task-checklist-comment-list-popup>
349
+ `, { backdrop: true, size: 'medium', title: '조치 사항' });
350
+ }
351
+ _onClickAttachment(checklistItemId) {
352
+ openPopup(html `
353
+ <task-checklist-attachment-list-popup
354
+ .checklistItemId=${checklistItemId}
355
+ .status=${this.status}
356
+ @change-attachment=${this._refreshItem.bind(this)}
357
+ ></task-checklist-attachment-list-popup>
358
+ `, { backdrop: true, size: 'medium', title: '첨부 자료' });
359
+ }
360
+ async _refreshItem(e) {
361
+ var _a;
362
+ const { checklistItemId } = e.detail;
363
+ const response = await client.query({
364
+ query: gql `
365
+ query ChecklistItem($checklistItemId: String!) {
366
+ checklistItem(id: $checklistItemId) {
367
+ id
368
+ checklistItemCommentCount
369
+ checklistItemAttachmentCount
370
+ }
371
+ }
372
+ `,
373
+ variables: {
374
+ checklistItemId: checklistItemId
375
+ }
376
+ });
377
+ const checklistItem = ((_a = response.data) === null || _a === void 0 ? void 0 : _a.checklistItem) || [];
378
+ this.checklist.checklistItems = this.checklist.checklistItems.map(item => {
379
+ return item.id != checklistItemId ? item : Object.assign(Object.assign({}, item), checklistItem);
380
+ });
381
+ this.requestUpdate();
382
+ }
383
+ };
384
+ TaskChecklistView.styles = [
385
+ ButtonContainerStyles,
386
+ ScrollbarStyles,
387
+ css `
388
+ :host {
389
+ display: flex;
390
+ flex: 1;
391
+ flex-direction: column;
392
+ padding: var(--spacing-large, 12px);
393
+ padding-top: 0;
394
+ font-size: 14px;
395
+ min-width: 800px;
396
+ }
397
+
398
+ [bold] {
399
+ font-weight: bold;
400
+ }
401
+
402
+ div[name] {
403
+ display: flex;
404
+ color: #586878;
405
+ font-size: 24px;
406
+ align-items: center;
407
+ justify-content: center;
408
+ }
409
+
410
+ table {
411
+ width: 100%;
412
+ font-size: 15px;
413
+ color: #586878;
414
+ text-align: left;
415
+ border-collapse: collapse;
416
+ td,
417
+ th {
418
+ border: 1px rgba(51, 51, 51, 0.2) solid;
419
+ padding-inline: var(--spacing-medium, 8px);
420
+ vertical-align: middle;
421
+ }
422
+ th {
423
+ background-color: #efefef;
424
+ font-weight: bold;
425
+ }
426
+ td {
427
+ height: 33px;
428
+ background-color: var(--md-sys-color-on-primary);
429
+ &[radio] {
430
+ text-align: center;
431
+ width: 50px;
432
+ }
433
+ }
434
+ }
435
+
436
+ table[header] {
437
+ margin-top: var(--spacing-small, 4px);
438
+
439
+ td {
440
+ min-width: 180px;
441
+ border-left: none;
442
+ }
443
+ th {
444
+ width: 110px;
445
+ border-right: none;
446
+ }
447
+ }
448
+
449
+ table[body] {
450
+ border: 2px solid var(--md-sys-color-on-primary-container);
451
+ border-bottom: none;
452
+ margin-top: var(--spacing-medium, 8px);
453
+
454
+ th {
455
+ text-align: center;
456
+
457
+ &[type] {
458
+ min-width: 150px;
459
+ }
460
+ &[inspection-name] {
461
+ min-width: 250px;
462
+ }
463
+ &[result] {
464
+ width: 270px;
465
+ }
466
+ &[criteria] {
467
+ width: 90px;
468
+ }
469
+ &[small] {
470
+ width: 60px;
471
+ }
472
+ }
473
+ td {
474
+ &[main-type] {
475
+ width: 50px;
476
+ text-align: center;
477
+ word-break: keep-all;
478
+ }
479
+
480
+ &[attachment] {
481
+ text-align: center;
482
+ cursor: pointer;
483
+
484
+ * {
485
+ vertical-align: middle;
486
+ }
487
+ }
488
+ &[comment] {
489
+ cursor: pointer;
490
+ text-align: center;
491
+
492
+ * {
493
+ vertical-align: middle;
494
+ }
495
+ }
496
+ &[disabled] * {
497
+ opacity: 0.6;
498
+ }
499
+ }
500
+ }
501
+
502
+ table[tail] {
503
+ border: 2px solid var(--md-sys-color-on-primary-container);
504
+ border-top: none;
505
+ margin-top: -1px;
506
+
507
+ td {
508
+ width: 25%;
509
+ border-left: none;
510
+ text-align: center;
511
+ position: relative;
512
+ background-color: var(--md-sys-color-on-primary);
513
+ font-size: 14px;
514
+ }
515
+ th {
516
+ width: 25%;
517
+ border-right: none;
518
+ }
519
+
520
+ span[sign-text] {
521
+ position: absolute;
522
+ top: 50%;
523
+ left: 50%;
524
+ transform: translate(-50%, -50%);
525
+ pointer-events: none;
526
+ }
527
+ ox-input-signature {
528
+ margin: var(--spacing-medium, 8px);
529
+
530
+ &[disabled] {
531
+ background: #eee;
532
+ }
533
+ }
534
+ }
535
+
536
+ div[footer] {
537
+ display: flex;
538
+ flex-direction: column;
539
+ gap: var(--spacing-tiny, 2px);
540
+ font-size: 12px;
541
+ margin-top: var(--spacing-medium, 8px);
542
+ color: #586878;
543
+ text-indent: -9px;
544
+ padding-left: var(--spacing-medium, 8px);
545
+ }
546
+
547
+ .stt-float-btns {
548
+ position: absolute;
549
+ top: 0;
550
+ right: 0;
551
+ display: flex;
552
+ gap: 8px;
553
+ z-index: 10;
554
+ }
555
+ .stt-float-btns button {
556
+ background: #fff;
557
+ border: 1px solid #ccc;
558
+ border-radius: 50%;
559
+ width: 38px;
560
+ height: 38px;
561
+ font-size: 18px;
562
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
563
+ cursor: pointer;
564
+ transition: background 0.2s;
565
+ outline: none;
566
+ }
567
+ .stt-float-btns button:hover {
568
+ background: #f2f2f2;
569
+ }
570
+ div[title-row] {
571
+ position: relative;
572
+ display: flex;
573
+ align-items: center;
574
+ justify-content: center;
575
+ margin-bottom: 8px;
576
+ }
577
+ div[name] {
578
+ color: #586878;
579
+ font-size: 24px;
580
+ font-weight: bold;
581
+ flex: 1;
582
+ text-align: center;
583
+ }
584
+
585
+ @keyframes pulse {
586
+ 0% {
587
+ filter: drop-shadow(0 0 0 #d32f2f);
588
+ }
589
+ 70% {
590
+ filter: drop-shadow(0 0 8px #d32f2f);
591
+ }
592
+ 100% {
593
+ filter: drop-shadow(0 0 0 #d32f2f);
594
+ }
595
+ }
596
+ .stt-fab[active] md-icon {
597
+ color: #d32f2f;
598
+ animation: pulse 1s infinite;
599
+ }
600
+ `
601
+ ];
602
+ __decorate([
603
+ property({ type: String }),
604
+ __metadata("design:type", String)
605
+ ], TaskChecklistView.prototype, "mode", void 0);
606
+ __decorate([
607
+ property({ type: Object }),
608
+ __metadata("design:type", Object)
609
+ ], TaskChecklistView.prototype, "checklist", void 0);
610
+ __decorate([
611
+ property({ type: Object }),
612
+ __metadata("design:type", Object)
613
+ ], TaskChecklistView.prototype, "buildingComplex", void 0);
614
+ __decorate([
615
+ property({ type: String }),
616
+ __metadata("design:type", String)
617
+ ], TaskChecklistView.prototype, "status", void 0);
618
+ TaskChecklistView = __decorate([
619
+ customElement('task-checklist-view')
620
+ ], TaskChecklistView);
621
+ //# sourceMappingURL=task-checklist-view.js.map