@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,686 @@
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/filled-button.js';
6
+ import '@material/web/button/outlined-button.js';
7
+ import { PageView } from '@operato/shell';
8
+ import { css, html } from 'lit';
9
+ import { customElement, query, state } from 'lit/decorators.js';
10
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
11
+ import { client } from '@operato/graphql';
12
+ import { i18next } from '@operato/i18n';
13
+ import { notify, openPopup } from '@operato/layout';
14
+ import gql from 'graphql-tag';
15
+ import { ScrollbarStyles } from '@operato/styles';
16
+ import { verifyBiometric } from '@things-factory/auth-base/dist-client';
17
+ import { BuildingInspectionStatus } from './popup/checklist/task-checklist-view';
18
+ import '@operato/gantt/ox-gantt.js';
19
+ import './popup/popup-task-upload';
20
+ import './popup/checklist/task-checklist-create-popup';
21
+ import './popup/checklist/task-checklist-view';
22
+ const TaskFragment = gql `
23
+ fragment TaskFragment on Task {
24
+ type
25
+ title: name
26
+ id: code
27
+ duration
28
+ startDate
29
+ endDate
30
+ dependsOn
31
+ progress
32
+ style
33
+ taskChecklistBinding {
34
+ id
35
+ status
36
+ }
37
+ resources {
38
+ type
39
+ allocated
40
+ }
41
+ }
42
+ `;
43
+ let ProjectTask = class ProjectTask extends ScopedElementsMixin(PageView) {
44
+ constructor() {
45
+ super(...arguments);
46
+ this.defaultProject = {
47
+ name: '',
48
+ buildingComplex: {
49
+ address: '',
50
+ area: 0,
51
+ constructionCompany: '',
52
+ clientCompany: '',
53
+ supervisoryCompany: '',
54
+ designCompany: '',
55
+ constructionType: '',
56
+ buildings: []
57
+ }
58
+ };
59
+ this.projectId = '';
60
+ this.project = Object.assign({}, this.defaultProject);
61
+ this.selectedBuildingIdx = 0;
62
+ this.constructionTypeList = [];
63
+ this.selectedChecklist = {};
64
+ this.selectedConstructionTypeId = '';
65
+ this.fromDate = '2024-01-01';
66
+ this.toDate = '2026-12-31';
67
+ this.selectedFromDate = '';
68
+ this.selectedToDate = '';
69
+ this.timeScale = 'week-day';
70
+ this.extendGridLines = false;
71
+ this.columnConfigProvider = function () {
72
+ return [
73
+ { name: 'title', label: i18next.t('label.gantt-task-title') || 'title', visible: true, width: 150, order: 1 },
74
+ {
75
+ name: 'startDate',
76
+ label: i18next.t('label.gantt-task-start-date') || 'start date',
77
+ visible: true,
78
+ width: 100,
79
+ order: 2
80
+ },
81
+ {
82
+ name: 'resources',
83
+ label: i18next.t('label.gantt-task-resources') || 'resources',
84
+ visible: true,
85
+ width: 100,
86
+ order: 3
87
+ },
88
+ {
89
+ name: 'duration',
90
+ label: i18next.t('label.gantt-task-duration') || 'duration',
91
+ visible: true,
92
+ width: 30,
93
+ order: 4
94
+ }
95
+ ];
96
+ };
97
+ }
98
+ get context() {
99
+ return {
100
+ title: '공정표'
101
+ };
102
+ }
103
+ render() {
104
+ var _a;
105
+ return html `
106
+ <div header>
107
+ <h2>
108
+ <md-icon slot="icon" back @click=${() => history.back()}>arrow_back</md-icon>
109
+ ${this.project.name}
110
+ </h2>
111
+ <div button-container>
112
+ <md-elevated-button @click=${this._openUploadSchedulePopup}>
113
+ <md-icon slot="icon">event_note</md-icon>공정표 관리
114
+ </md-elevated-button>
115
+ </div>
116
+ </div>
117
+
118
+ <div body>
119
+ <ox-gantt
120
+ from-date=${new Date(this.fromDate).toISOString().split('T')[0]}
121
+ to-date=${new Date(this.toDate).toISOString().split('T')[0]}
122
+ .timeScale=${this.timeScale}
123
+ .tasks=${this.tasks}
124
+ @date-range-selected=${this.onRangeSelected}
125
+ @task-clicked=${(e) => {
126
+ console.log('task-clicked', e.detail);
127
+ }}
128
+ ?extend-grid-lines=${this.extendGridLines}
129
+ .columnConfigProvider=${this.columnConfigProvider}
130
+ .colorProvider=${task => {
131
+ return task.style || 'gray';
132
+ }}
133
+ >
134
+ </ox-gantt>
135
+ <div select-container>
136
+ <div date>
137
+ <span name>기간선택</span>
138
+ <div @change=${() => this.onChangePeriodRange()}>
139
+ <input type="date" name="startDate" project .value=${this.project.startDate || ''} max="9999-12-31" />
140
+ ~
141
+ <input type="date" name="endDate" project .value=${this.project.endDate || ''} max="9999-12-31" />
142
+ </div>
143
+ </div>
144
+ <div construction-list-container>
145
+ ${(_a = this.constructionTypeList) === null || _a === void 0 ? void 0 : _a.map((constructionType) => {
146
+ var _a, _b, _c;
147
+ return html ` <md-outlined-button
148
+ id=${constructionType.id}
149
+ ?selected=${this.selectedConstructionTypeId === constructionType.id}
150
+ ?pass=${((_a = constructionType.taskChecklistBinding) === null || _a === void 0 ? void 0 : _a.status) === BuildingInspectionStatus.PASS}
151
+ ?fail=${((_b = constructionType.taskChecklistBinding) === null || _b === void 0 ? void 0 : _b.status) === BuildingInspectionStatus.FAIL}
152
+ @click=${() => this.onClickTaskChecklist(constructionType)}
153
+ >
154
+ <div icon-container>
155
+ ${this._getIconHtmlByStatus((_c = constructionType.taskChecklistBinding) === null || _c === void 0 ? void 0 : _c.status)} ${constructionType.title}
156
+ </div>
157
+ </md-outlined-button>`;
158
+ })}
159
+ </div>
160
+ </div>
161
+ </div>
162
+ `;
163
+ }
164
+ async pageInitialized(lifecycle) { }
165
+ async pageUpdated(changes, lifecycle) {
166
+ if (this.active) {
167
+ this.projectId = lifecycle.resourceId || '';
168
+ await this.initProject(this.projectId);
169
+ }
170
+ }
171
+ async initProject(projectId = '') {
172
+ var _a, _b;
173
+ const response = await client.query({
174
+ query: gql `
175
+ query Project($id: String!, $sortings: [Sorting!]) {
176
+ project(id: $id) {
177
+ id
178
+ name
179
+ startDate
180
+ endDate
181
+ rootTasks {
182
+ ...TaskFragment
183
+ children(sortings: $sortings) {
184
+ ...TaskFragment
185
+ children(sortings: $sortings) {
186
+ ...TaskFragment
187
+ }
188
+ }
189
+ }
190
+ scheduleTable {
191
+ id
192
+ name
193
+ }
194
+ buildingComplex {
195
+ id
196
+ planXScale
197
+ planYScale
198
+ taskConstructorEmails
199
+ overallConstructorEmails
200
+ taskSupervisoryEmails
201
+ overallSupervisoryEmails
202
+ buildings {
203
+ id
204
+ name
205
+ drawing {
206
+ id
207
+ name
208
+ }
209
+ buildingLevels {
210
+ id
211
+ floor
212
+ mainDrawing {
213
+ id
214
+ name
215
+ }
216
+ }
217
+ }
218
+ }
219
+ }
220
+ }
221
+
222
+ ${TaskFragment}
223
+ `,
224
+ variables: {
225
+ id: projectId,
226
+ sortings: [{ name: 'startDate' }]
227
+ }
228
+ });
229
+ this.project = (_a = response.data) === null || _a === void 0 ? void 0 : _a.project;
230
+ this.tasks = (_b = response.data) === null || _b === void 0 ? void 0 : _b.project.rootTasks;
231
+ if (this.project) {
232
+ this.fromDate = this.project.startDate || '2024-01-01'; /* TODO default: start date of this year - 3 */
233
+ this.toDate = this.project.endDate || '2026-12-31'; /* TODO defaule: end date of this year + 3 */
234
+ }
235
+ }
236
+ onChangePeriodRange() {
237
+ this.fromDate = this.inputStartDate.value;
238
+ this.toDate = this.inputEndDate.value;
239
+ }
240
+ onRangeSelected(event) {
241
+ var _a, _b;
242
+ if (event) {
243
+ this.selectedFromDate = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.start;
244
+ this.selectedToDate = (_b = event.detail) === null || _b === void 0 ? void 0 : _b.end;
245
+ }
246
+ const selectedFromDate = new Date(this.selectedFromDate + 'T00:00:00.000Z');
247
+ const selectedToDate = new Date(this.selectedToDate + 'T23:59:59.000Z');
248
+ this.constructionTypeList = this.tasks.filter(constuction => {
249
+ const constuctionStartDate = new Date(constuction.startDate);
250
+ const constuctionEndDate = new Date(constuction.endDate);
251
+ return constuctionStartDate <= selectedToDate && constuctionEndDate >= selectedFromDate;
252
+ });
253
+ }
254
+ _openUploadSchedulePopup() {
255
+ var _a;
256
+ openPopup(html `<popup-task-upload
257
+ .projectId=${this.projectId}
258
+ .scheduleTable=${(_a = this.project) === null || _a === void 0 ? void 0 : _a.scheduleTable}
259
+ @uploaded=${() => this.initProject(this.projectId)}
260
+ ></popup-task-upload>`, { backdrop: true, size: 'medium', title: '공정표 업로드' });
261
+ }
262
+ async onClickTaskChecklist(constructionType) {
263
+ // 선택된 공종 설정
264
+ this.selectedConstructionTypeId = constructionType.id;
265
+ // 체크리스트가 있으면 수정 모드, 없으면 생성 모드
266
+ if (constructionType.taskChecklistBinding) {
267
+ const taskChecklistBinding = await this._getTaskChecklistBindingById(constructionType.taskChecklistBinding.id);
268
+ this.selectedChecklist = Object.assign(Object.assign({}, taskChecklistBinding.checklist), { status: taskChecklistBinding.status });
269
+ this._openUpdateTaskChecklistPopup(constructionType);
270
+ }
271
+ else {
272
+ this._openCreateChecklistPopup(constructionType);
273
+ }
274
+ }
275
+ _openCreateChecklistPopup(constructionType) {
276
+ openPopup(html `<task-checklist-create-popup
277
+ .projectId=${this.projectId}
278
+ .taskCode=${constructionType.id}
279
+ @requestRefresh="${async () => {
280
+ await this.initProject(this.projectId);
281
+ this.onRangeSelected(null);
282
+ }}"
283
+ ></task-checklist-create-popup>`, {
284
+ backdrop: true,
285
+ size: 'large',
286
+ title: `체크리스트 생성`
287
+ });
288
+ }
289
+ _openUpdateTaskChecklistPopup(constructionType) {
290
+ var _a;
291
+ openPopup(html `
292
+ <div style="overflow-y: auto; height: 100%;">
293
+ <task-checklist-view
294
+ .mode=${"EDITOR" /* ChecklistMode.EDITOR */}
295
+ .status=${this.selectedChecklist.status}
296
+ .checklist=${this.selectedChecklist || {}}
297
+ .buildingComplex=${((_a = this.project) === null || _a === void 0 ? void 0 : _a.buildingComplex) || {}}
298
+ ></task-checklist-view>
299
+
300
+ <div style="text-align: right; margin-right: 20px; margin-bottom: 15px">
301
+ <md-elevated-button
302
+ ?disabled=${this.selectedChecklist.status == BuildingInspectionStatus.PASS}
303
+ @click=${this._onClickModifyChecklist.bind(this)}
304
+ >
305
+ <md-icon slot="icon">assignment</md-icon>등록
306
+ </md-elevated-button>
307
+ </div>
308
+ </div>
309
+ `, { backdrop: true, size: 'large', title: constructionType.title });
310
+ }
311
+ _onClickModifyChecklist() {
312
+ this.validateChecklist(this.selectedChecklist);
313
+ }
314
+ async validateChecklist(checklist) {
315
+ var _a, _b;
316
+ try {
317
+ const result = await verifyBiometric();
318
+ if (result.verified) {
319
+ console.log('Verification successful. Proceeding with sensitive action.');
320
+ }
321
+ else {
322
+ notify({ message: 'Verification failed:' + result.message });
323
+ return;
324
+ }
325
+ }
326
+ catch (error) {
327
+ notify({ message: 'Error during biometric verification:' + error });
328
+ return;
329
+ }
330
+ const response = await client.mutate({
331
+ mutation: gql `
332
+ mutation UpdateTaskChecklist($taskChecklist: UpdateTaskChecklistSubmitType!) {
333
+ updateTaskChecklist(taskChecklist: $taskChecklist)
334
+ }
335
+ `,
336
+ variables: {
337
+ taskChecklist: {
338
+ checklistId: checklist.id,
339
+ checklist: {
340
+ id: checklist.id,
341
+ overallConstructorSignature: checklist.overallConstructorSignature,
342
+ taskConstructorSignature: checklist.taskConstructorSignature,
343
+ overallSupervisorySignature: checklist.overallSupervisorySignature,
344
+ taskSupervisorySignature: checklist.taskSupervisorySignature
345
+ },
346
+ checklistItem: checklist.checklistItems.map(item => ({
347
+ id: item.id,
348
+ constructionConfirmStatus: item.constructionConfirmStatus,
349
+ supervisoryConfirmStatus: item.supervisoryConfirmStatus
350
+ }))
351
+ }
352
+ }
353
+ });
354
+ if (!response.errors) {
355
+ notify({ message: '검측 요청서를 등록하였습니다.' });
356
+ await this.initProject(this.projectId);
357
+ this.onRangeSelected(null);
358
+ history.back();
359
+ }
360
+ else {
361
+ notify({ message: ((_b = (_a = response.errors) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) || '검측 요청서 등록에 실패하였습니다.', level: 'error' });
362
+ }
363
+ }
364
+ _getIconHtmlByStatus(status) {
365
+ if (!status)
366
+ return '';
367
+ if (status == BuildingInspectionStatus.WAIT || status == BuildingInspectionStatus.OVERALL_WAIT) {
368
+ return html `<md-icon request>frame_inspect</md-icon>`;
369
+ }
370
+ if (status == BuildingInspectionStatus.REQUEST || status == BuildingInspectionStatus.OVERALL_REQUEST) {
371
+ return html `<md-icon request>exclamation</md-icon>`;
372
+ }
373
+ if (status == BuildingInspectionStatus.PASS) {
374
+ return html `<md-icon pass>check</md-icon>`;
375
+ }
376
+ return html `<md-icon fail>close</md-icon>`;
377
+ }
378
+ async _getTaskChecklistBindingById(id) {
379
+ var _a;
380
+ const response = await client.query({
381
+ query: gql `
382
+ query TaskChecklistBinding($id: String!) {
383
+ taskChecklistBinding(id: $id) {
384
+ id
385
+ status
386
+
387
+ checklist {
388
+ id
389
+ name
390
+ constructionType
391
+ constructionDetailType
392
+ location
393
+ inspectionParts
394
+ documentNo
395
+ constructionInspectionDate
396
+ supervisorInspectionDate
397
+ overallConstructorSignature
398
+ taskConstructorSignature
399
+ overallSupervisorySignature
400
+ taskSupervisorySignature
401
+
402
+ checklistItems {
403
+ id
404
+ name
405
+ sequence
406
+ mainType
407
+ detailType
408
+ inspctionCriteria
409
+ constructionConfirmStatus
410
+ supervisoryConfirmStatus
411
+ checklistItemCommentCount
412
+ checklistItemAttachmentCount
413
+ }
414
+ }
415
+
416
+ manager {
417
+ userId
418
+ name
419
+ }
420
+ }
421
+ }
422
+ `,
423
+ variables: { id }
424
+ });
425
+ if (response.errors)
426
+ return;
427
+ return ((_a = response.data) === null || _a === void 0 ? void 0 : _a.taskChecklistBinding) || {};
428
+ }
429
+ };
430
+ ProjectTask.styles = [
431
+ ScrollbarStyles,
432
+ css `
433
+ :host {
434
+ display: flex;
435
+ flex-direction: column;
436
+
437
+ color: #4e5055;
438
+
439
+ width: 100%;
440
+ background-color: var(--md-sys-color-background, #f6f6f6);
441
+ overflow-y: auto;
442
+
443
+ --grid-record-emphasized-background-color: red;
444
+ --grid-record-emphasized-color: yellow;
445
+ }
446
+
447
+ *[bold] {
448
+ font-weight: bold;
449
+ }
450
+
451
+ div[header] {
452
+ display: flex;
453
+ margin: 0px var(--spacing-large, 12px);
454
+
455
+ h2 {
456
+ display: flex;
457
+ gap: 7px;
458
+ flex: 0.5;
459
+ color: #3f71a0;
460
+ font-size: 18px;
461
+
462
+ md-icon[back] {
463
+ background: linear-gradient(135deg, #3f71a0 0%, #5a8cc7 100%);
464
+ color: white;
465
+ padding: 8px;
466
+ border-radius: 50%;
467
+ cursor: pointer;
468
+ box-shadow: 0 2px 8px rgba(63, 113, 160, 0.3);
469
+ width: 14px;
470
+ height: 14px;
471
+ --md-icon-size: 20px;
472
+ }
473
+
474
+ md-icon[back]:hover {
475
+ background: linear-gradient(135deg, #2e5c89 0%, #4a7bb0 100%);
476
+ box-shadow: 0 4px 12px rgba(63, 113, 160, 0.4);
477
+ }
478
+ }
479
+
480
+ div[button-container] {
481
+ display: flex;
482
+ align-items: center;
483
+ justify-content: end;
484
+ flex: 0.5;
485
+
486
+ md-elevated-button {
487
+ margin: 0px;
488
+ margin-left: var(--spacing-small, 4px);
489
+
490
+ --md-elevated-button-container-height: 32px;
491
+ --md-elevated-button-label-text-size: 16px;
492
+ --md-elevated-button-container-color: #0595e5;
493
+
494
+ --md-elevated-button-label-text-color: var(--md-sys-color-on-primary);
495
+ --md-elevated-button-hover-label-text-color: var(--md-sys-color-on-primary);
496
+ --md-elevated-button-pressed-label-text-color: var(--md-sys-color-on-primary);
497
+ --md-elevated-button-focus-label-text-color: var(--md-sys-color-on-primary);
498
+ --md-elevated-button-icon-color: var(--md-sys-color-on-primary);
499
+ --md-elevated-button-hover-icon-color: var(--md-sys-color-on-primary);
500
+ --md-elevated-button-pressed-icon-color: var(--md-sys-color-on-primary);
501
+ --md-elevated-button-focus-icon-color: var(--md-sys-color-on-primary);
502
+ }
503
+ }
504
+ }
505
+
506
+ div[body] {
507
+ flex: 1;
508
+
509
+ display: flex;
510
+ flex-direction: column;
511
+ margin: var(--spacing-large, 12px);
512
+ margin-top: 0;
513
+ gap: var(--spacing-medium, 8px);
514
+ overflow: hidden;
515
+
516
+ h3 {
517
+ color: #2e79be;
518
+ font-size: 16px;
519
+ margin: 0px;
520
+ }
521
+
522
+ & > div {
523
+ display: flex;
524
+ border-radius: 5px;
525
+ }
526
+
527
+ ox-gantt {
528
+ flex: 1;
529
+ box-sizing: border-box;
530
+ overflow: hidden;
531
+
532
+ background-color: var(--md-sys-color-primary-container);
533
+ color: var(--md-sys-color-on-primary-container);
534
+ }
535
+
536
+ div[select-container] {
537
+ gap: var(--spacing-medium, 8px);
538
+
539
+ div[date] {
540
+ display: flex;
541
+ align-items: center;
542
+ justify-content: space-between;
543
+ background-color: #2ea4df1a;
544
+ border: 1px solid #2ea4df33;
545
+ border-radius: 5px;
546
+ gap: var(--spacing-medium, 8px);
547
+ padding: 12px 36px 12px 15px;
548
+
549
+ span[name] {
550
+ font-size: 16px;
551
+ font-weight: bold;
552
+ }
553
+
554
+ input[type='date'] {
555
+ border: 1px solid rgba(51, 51, 51, 0.2);
556
+ padding: var(--spacing-small, 4px) var(--spacing-medium, 8px);
557
+ border-radius: 5px;
558
+ }
559
+ }
560
+
561
+ div[construction-list-container] {
562
+ flex: 1;
563
+ display: flex;
564
+ border-radius: 5px;
565
+ border: 1px solid #cccccc80;
566
+ background-color: #fff;
567
+ padding: var(--spacing-medium, 8px) var(--spacing-large, 12px);
568
+ gap: var(--spacing-medium, 8px);
569
+ overflow-x: auto;
570
+
571
+ md-outlined-button {
572
+ --md-outlined-button-container-height: 30px;
573
+ --md-outlined-button-trailing-space: var(--spacing-medium, 8px);
574
+ --md-outlined-button-leading-space: var(--spacing-medium, 8px);
575
+ --md-outlined-button-label-text-color: #586878;
576
+ --md-sys-color-outline: rgba(51, 51, 51, 0.2);
577
+ box-shadow: 1px 1px 1px #0000001a;
578
+ padding: var(--spacing-medium, 8px) var(--spacing-large, 12px);
579
+ font-weight: 700;
580
+
581
+ &[selected] {
582
+ --md-outlined-button-label-text-color: #0595e5 !important;
583
+ --md-sys-color-outline: #0595e5 !important;
584
+ background-color: #0595e51a !important;
585
+ }
586
+
587
+ &[pass] {
588
+ --md-outlined-button-label-text-color: #4bbb4a;
589
+ --md-sys-color-outline: #4bbb4a;
590
+ background-color: #4bbb4a1a;
591
+ }
592
+ &[fail] {
593
+ --md-outlined-button-label-text-color: #ff4444;
594
+ --md-sys-color-outline: #ff4444;
595
+ background-color: #ff44441a;
596
+ }
597
+ }
598
+
599
+ div[icon-container] {
600
+ display: flex;
601
+ align-items: center;
602
+ gap: 4px;
603
+
604
+ md-icon[request],
605
+ md-icon[pass],
606
+ md-icon[fail] {
607
+ width: 16px;
608
+ height: 16px;
609
+ margin-right: 4px;
610
+ border-radius: 3px;
611
+ font-size: 14px;
612
+ font-weight: 700;
613
+ color: #fff;
614
+ }
615
+ md-icon[request] {
616
+ background-color: #4e5055;
617
+ }
618
+ md-icon[pass] {
619
+ background-color: #4bbb4a;
620
+ }
621
+ md-icon[fail] {
622
+ background-color: #ff4444;
623
+ }
624
+ }
625
+ }
626
+ }
627
+ }
628
+ `
629
+ ];
630
+ __decorate([
631
+ state(),
632
+ __metadata("design:type", String)
633
+ ], ProjectTask.prototype, "projectId", void 0);
634
+ __decorate([
635
+ state(),
636
+ __metadata("design:type", Object)
637
+ ], ProjectTask.prototype, "project", void 0);
638
+ __decorate([
639
+ state(),
640
+ __metadata("design:type", Number)
641
+ ], ProjectTask.prototype, "selectedBuildingIdx", void 0);
642
+ __decorate([
643
+ state(),
644
+ __metadata("design:type", Object)
645
+ ], ProjectTask.prototype, "tasks", void 0);
646
+ __decorate([
647
+ state(),
648
+ __metadata("design:type", Object)
649
+ ], ProjectTask.prototype, "constructionTypeList", void 0);
650
+ __decorate([
651
+ state(),
652
+ __metadata("design:type", Object)
653
+ ], ProjectTask.prototype, "selectedChecklist", void 0);
654
+ __decorate([
655
+ state(),
656
+ __metadata("design:type", String)
657
+ ], ProjectTask.prototype, "selectedConstructionTypeId", void 0);
658
+ __decorate([
659
+ state(),
660
+ __metadata("design:type", Object)
661
+ ], ProjectTask.prototype, "fromDate", void 0);
662
+ __decorate([
663
+ state(),
664
+ __metadata("design:type", Object)
665
+ ], ProjectTask.prototype, "toDate", void 0);
666
+ __decorate([
667
+ state(),
668
+ __metadata("design:type", Object)
669
+ ], ProjectTask.prototype, "selectedFromDate", void 0);
670
+ __decorate([
671
+ state(),
672
+ __metadata("design:type", Object)
673
+ ], ProjectTask.prototype, "selectedToDate", void 0);
674
+ __decorate([
675
+ query('input[name="startDate"]'),
676
+ __metadata("design:type", HTMLInputElement)
677
+ ], ProjectTask.prototype, "inputStartDate", void 0);
678
+ __decorate([
679
+ query('input[name="endDate"]'),
680
+ __metadata("design:type", HTMLInputElement)
681
+ ], ProjectTask.prototype, "inputEndDate", void 0);
682
+ ProjectTask = __decorate([
683
+ customElement('project-task')
684
+ ], ProjectTask);
685
+ export { ProjectTask };
686
+ //# sourceMappingURL=project-task.js.map