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

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 (217) hide show
  1. package/dist-client/graphql/building-inspection.d.ts +1 -0
  2. package/dist-client/graphql/building-inspection.js +100 -0
  3. package/dist-client/graphql/building-inspection.js.map +1 -0
  4. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +9 -0
  5. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +130 -72
  6. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -1
  7. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.d.ts +1 -0
  8. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js +77 -14
  9. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js.map +1 -1
  10. package/dist-client/pages/building-inspection/building-inspection-list.d.ts +18 -2
  11. package/dist-client/pages/building-inspection/building-inspection-list.js +360 -28
  12. package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -1
  13. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js +31 -9
  14. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js.map +1 -1
  15. package/dist-client/pages/building-inspection/component/daily-worklog-popup.d.ts +27 -0
  16. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js +542 -0
  17. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js.map +1 -0
  18. package/dist-client/pages/building-inspection/component/image-preview-popup.d.ts +15 -0
  19. package/dist-client/pages/building-inspection/component/image-preview-popup.js +351 -0
  20. package/dist-client/pages/building-inspection/component/image-preview-popup.js.map +1 -0
  21. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +20 -0
  22. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js +432 -0
  23. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js.map +1 -0
  24. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +30 -0
  25. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js +479 -0
  26. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js.map +1 -0
  27. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.d.ts +27 -0
  28. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js +401 -0
  29. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js.map +1 -0
  30. package/dist-client/pages/building-inspection/component/inspection-event-provider.d.ts +2 -1
  31. package/dist-client/pages/building-inspection/component/inspection-event-provider.js +39 -17
  32. package/dist-client/pages/building-inspection/component/inspection-event-provider.js.map +1 -1
  33. package/dist-client/pages/building-inspection/inspection-create-popup.js +22 -9
  34. package/dist-client/pages/building-inspection/inspection-create-popup.js.map +1 -1
  35. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +60 -0
  36. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js +1132 -0
  37. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js.map +1 -0
  38. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.d.ts +2 -0
  39. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js +740 -0
  40. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js.map +1 -0
  41. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.d.ts +19 -0
  42. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.js +205 -0
  43. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.js.map +1 -0
  44. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.d.ts +1 -0
  45. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.js +304 -0
  46. package/dist-client/pages/building-inspection-grid/component/notice-comment-popup.js.map +1 -0
  47. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.d.ts +15 -0
  48. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.js +430 -0
  49. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.js.map +1 -0
  50. package/dist-client/pages/checklist/attachment-list-popup.d.ts +1 -0
  51. package/dist-client/pages/checklist/attachment-list-popup.js +250 -67
  52. package/dist-client/pages/checklist/attachment-list-popup.js.map +1 -1
  53. package/dist-client/pages/checklist/checklist-view.d.ts +7 -0
  54. package/dist-client/pages/checklist/checklist-view.js +363 -185
  55. package/dist-client/pages/checklist/checklist-view.js.map +1 -1
  56. package/dist-client/pages/checklist/comment-list-popup.js +14 -3
  57. package/dist-client/pages/checklist/comment-list-popup.js.map +1 -1
  58. package/dist-client/pages/checklist/file-preview-popup.js +0 -1
  59. package/dist-client/pages/checklist/file-preview-popup.js.map +1 -1
  60. package/dist-client/pages/checklist/inspection-info-popup.d.ts +50 -0
  61. package/dist-client/pages/checklist/inspection-info-popup.js +684 -0
  62. package/dist-client/pages/checklist/inspection-info-popup.js.map +1 -0
  63. package/dist-client/pages/checklist/inspection-tab-popup.d.ts +18 -0
  64. package/dist-client/pages/checklist/inspection-tab-popup.js +196 -0
  65. package/dist-client/pages/checklist/inspection-tab-popup.js.map +1 -0
  66. package/dist-client/pages/checklist-template/checklist-template-item.js +8 -3
  67. package/dist-client/pages/checklist-template/checklist-template-item.js.map +1 -1
  68. package/dist-client/pages/checklist-template/checklist-template-list.js +2 -2
  69. package/dist-client/pages/checklist-template/checklist-template-list.js.map +1 -1
  70. package/dist-client/route.d.ts +1 -1
  71. package/dist-client/route.js +3 -0
  72. package/dist-client/route.js.map +1 -1
  73. package/dist-client/stt/speech-to-text.d.ts +36 -0
  74. package/dist-client/stt/speech-to-text.js +89 -0
  75. package/dist-client/stt/speech-to-text.js.map +1 -0
  76. package/dist-client/stt/stt-utils.d.ts +28 -0
  77. package/dist-client/stt/stt-utils.js +146 -0
  78. package/dist-client/stt/stt-utils.js.map +1 -0
  79. package/dist-client/tsconfig.tsbuildinfo +1 -1
  80. package/dist-server/service/action-plan/index.d.ts +0 -1
  81. package/dist-server/service/action-plan/index.js +1 -2
  82. package/dist-server/service/action-plan/index.js.map +1 -1
  83. package/dist-server/service/building-inspection/building-inspection-mutation.d.ts +3 -3
  84. package/dist-server/service/building-inspection/building-inspection-mutation.js +145 -34
  85. package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -1
  86. package/dist-server/service/building-inspection/building-inspection-query.d.ts +3 -4
  87. package/dist-server/service/building-inspection/building-inspection-query.js +46 -30
  88. package/dist-server/service/building-inspection/building-inspection-query.js.map +1 -1
  89. package/dist-server/service/building-inspection/building-inspection-type.d.ts +28 -9
  90. package/dist-server/service/building-inspection/building-inspection-type.js +96 -17
  91. package/dist-server/service/building-inspection/building-inspection-type.js.map +1 -1
  92. package/dist-server/service/building-inspection/building-inspection.d.ts +13 -0
  93. package/dist-server/service/building-inspection/building-inspection.js +55 -2
  94. package/dist-server/service/building-inspection/building-inspection.js.map +1 -1
  95. package/dist-server/service/building-inspection/index.d.ts +4 -7
  96. package/dist-server/service/building-inspection/index.js +11 -6
  97. package/dist-server/service/building-inspection/index.js.map +1 -1
  98. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.d.ts +6 -0
  99. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js +56 -0
  100. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js.map +1 -0
  101. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.d.ts +16 -0
  102. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js +171 -0
  103. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js.map +1 -0
  104. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.d.ts +23 -0
  105. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js +90 -0
  106. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js.map +1 -0
  107. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.d.ts +33 -0
  108. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js +132 -0
  109. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js.map +1 -0
  110. package/dist-server/service/building-inspection-daily-worklog/index.d.ts +5 -0
  111. package/dist-server/service/building-inspection-daily-worklog/index.js +9 -0
  112. package/dist-server/service/building-inspection-daily-worklog/index.js.map +1 -0
  113. package/dist-server/service/building-inspection-history/building-inspection-history-query.d.ts +16 -0
  114. package/dist-server/service/building-inspection-history/building-inspection-history-query.js +120 -0
  115. package/dist-server/service/building-inspection-history/building-inspection-history-query.js.map +1 -0
  116. package/dist-server/service/building-inspection-history/building-inspection-history-type.d.ts +5 -0
  117. package/dist-server/service/building-inspection-history/building-inspection-history-type.js +21 -0
  118. package/dist-server/service/building-inspection-history/building-inspection-history-type.js.map +1 -0
  119. package/dist-server/service/building-inspection-history/building-inspection-history.d.ts +34 -0
  120. package/dist-server/service/building-inspection-history/building-inspection-history.js +157 -0
  121. package/dist-server/service/building-inspection-history/building-inspection-history.js.map +1 -0
  122. package/dist-server/service/{building-inspection → building-inspection-history}/event-subscriber.d.ts +1 -1
  123. package/dist-server/service/{building-inspection → building-inspection-history}/event-subscriber.js +1 -1
  124. package/dist-server/service/building-inspection-history/event-subscriber.js.map +1 -0
  125. package/dist-server/service/building-inspection-history/index.d.ts +6 -0
  126. package/dist-server/service/building-inspection-history/index.js +10 -0
  127. package/dist-server/service/building-inspection-history/index.js.map +1 -0
  128. package/dist-server/service/checklist/checklist-mutation.d.ts +0 -5
  129. package/dist-server/service/checklist/checklist-mutation.js +1 -67
  130. package/dist-server/service/checklist/checklist-mutation.js.map +1 -1
  131. package/dist-server/service/checklist/checklist-query.d.ts +6 -0
  132. package/dist-server/service/checklist/checklist-query.js +63 -0
  133. package/dist-server/service/checklist/checklist-query.js.map +1 -1
  134. package/dist-server/service/checklist/checklist-type.d.ts +0 -13
  135. package/dist-server/service/checklist/checklist-type.js +1 -49
  136. package/dist-server/service/checklist/checklist-type.js.map +1 -1
  137. package/dist-server/service/checklist/checklist.d.ts +38 -3
  138. package/dist-server/service/checklist/checklist.js +131 -15
  139. package/dist-server/service/checklist/checklist.js.map +1 -1
  140. package/dist-server/service/checklist/event-subscriber.d.ts +2 -2
  141. package/dist-server/service/checklist/event-subscriber.js +2 -2
  142. package/dist-server/service/checklist/event-subscriber.js.map +1 -1
  143. package/dist-server/service/checklist/index.d.ts +1 -4
  144. package/dist-server/service/checklist/index.js +2 -5
  145. package/dist-server/service/checklist/index.js.map +1 -1
  146. package/dist-server/service/checklist-history/checklist-history-query.d.ts +11 -0
  147. package/dist-server/service/checklist-history/checklist-history-query.js +77 -0
  148. package/dist-server/service/checklist-history/checklist-history-query.js.map +1 -0
  149. package/dist-server/service/checklist-history/checklist-history-type.d.ts +5 -0
  150. package/dist-server/service/checklist-history/checklist-history-type.js +21 -0
  151. package/dist-server/service/checklist-history/checklist-history-type.js.map +1 -0
  152. package/dist-server/service/checklist-history/checklist-history.d.ts +50 -0
  153. package/dist-server/service/checklist-history/checklist-history.js +239 -0
  154. package/dist-server/service/checklist-history/checklist-history.js.map +1 -0
  155. package/dist-server/service/checklist-history/event-subscriber.d.ts +7 -0
  156. package/dist-server/service/checklist-history/event-subscriber.js +21 -0
  157. package/dist-server/service/checklist-history/event-subscriber.js.map +1 -0
  158. package/dist-server/service/checklist-history/index.d.ts +6 -0
  159. package/dist-server/service/checklist-history/index.js +10 -0
  160. package/dist-server/service/checklist-history/index.js.map +1 -0
  161. package/dist-server/service/checklist-item/checklist-item-query.d.ts +1 -1
  162. package/dist-server/service/checklist-item/checklist-item-query.js +5 -3
  163. package/dist-server/service/checklist-item/checklist-item-query.js.map +1 -1
  164. package/dist-server/service/checklist-item/index.d.ts +0 -1
  165. package/dist-server/service/checklist-item/index.js +1 -2
  166. package/dist-server/service/checklist-item/index.js.map +1 -1
  167. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.d.ts +1 -0
  168. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.js +33 -6
  169. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.js.map +1 -1
  170. package/dist-server/service/checklist-item-comment/index.d.ts +0 -2
  171. package/dist-server/service/checklist-item-comment/index.js +1 -3
  172. package/dist-server/service/checklist-item-comment/index.js.map +1 -1
  173. package/dist-server/service/checklist-item-history/checklist-item-history-query.d.ts +16 -0
  174. package/dist-server/service/checklist-item-history/checklist-item-history-query.js +123 -0
  175. package/dist-server/service/checklist-item-history/checklist-item-history-query.js.map +1 -0
  176. package/dist-server/service/checklist-item-history/checklist-item-history-type.d.ts +5 -0
  177. package/dist-server/service/checklist-item-history/checklist-item-history-type.js +21 -0
  178. package/dist-server/service/checklist-item-history/checklist-item-history-type.js.map +1 -0
  179. package/dist-server/service/checklist-item-history/checklist-item-history.d.ts +25 -0
  180. package/dist-server/service/checklist-item-history/checklist-item-history.js +123 -0
  181. package/dist-server/service/checklist-item-history/checklist-item-history.js.map +1 -0
  182. package/dist-server/service/checklist-item-history/event-subscriber.d.ts +7 -0
  183. package/dist-server/service/checklist-item-history/event-subscriber.js +21 -0
  184. package/dist-server/service/checklist-item-history/event-subscriber.js.map +1 -0
  185. package/dist-server/service/checklist-item-history/index.d.ts +6 -0
  186. package/dist-server/service/checklist-item-history/index.js +10 -0
  187. package/dist-server/service/checklist-item-history/index.js.map +1 -0
  188. package/dist-server/service/checklist-template-item/checklist-template-item.js +2 -4
  189. package/dist-server/service/checklist-template-item/checklist-template-item.js.map +1 -1
  190. package/dist-server/service/index.d.ts +4 -2
  191. package/dist-server/service/index.js +22 -13
  192. package/dist-server/service/index.js.map +1 -1
  193. package/dist-server/service/issue/index.d.ts +0 -1
  194. package/dist-server/service/issue/index.js +1 -2
  195. package/dist-server/service/issue/index.js.map +1 -1
  196. package/dist-server/service/project-report/index.d.ts +0 -1
  197. package/dist-server/service/project-report/index.js +1 -2
  198. package/dist-server/service/project-report/index.js.map +1 -1
  199. package/dist-server/service/project-report/project-report.d.ts +0 -2
  200. package/dist-server/service/project-report/project-report.js +0 -6
  201. package/dist-server/service/project-report/project-report.js.map +1 -1
  202. package/dist-server/service/supervisor/index.d.ts +0 -1
  203. package/dist-server/service/supervisor/index.js +1 -2
  204. package/dist-server/service/supervisor/index.js.map +1 -1
  205. package/dist-server/tsconfig.tsbuildinfo +1 -1
  206. package/package.json +13 -13
  207. package/things-factory.config.js +3 -1
  208. package/dist-server/service/building-inspection/building-inspection-history.d.ts +0 -17
  209. package/dist-server/service/building-inspection/building-inspection-history.js +0 -86
  210. package/dist-server/service/building-inspection/building-inspection-history.js.map +0 -1
  211. package/dist-server/service/building-inspection/event-subscriber.js.map +0 -1
  212. package/dist-server/service/checklist/checklist-history.d.ts +0 -24
  213. package/dist-server/service/checklist/checklist-history.js +0 -120
  214. package/dist-server/service/checklist/checklist-history.js.map +0 -1
  215. package/dist-server/service/checklist-item-comment/event-subscriber.d.ts +0 -7
  216. package/dist-server/service/checklist-item-comment/event-subscriber.js +0 -21
  217. package/dist-server/service/checklist-item-comment/event-subscriber.js.map +0 -1
@@ -1,4 +1,5 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/fab/fab.js';
2
3
  import '@material/web/icon/icon.js';
3
4
  import gql from 'graphql-tag';
4
5
  import { client } from '@operato/graphql';
@@ -12,11 +13,15 @@ import { connect } from 'pwa-helpers/connect-mixin.js';
12
13
  import { openPopup } from '@operato/layout';
13
14
  import './comment-list-popup';
14
15
  import './attachment-list-popup';
16
+ import '../../stt/speech-to-text';
17
+ import { parseSpeechCommand } from '../../stt/stt-utils';
18
+ import { notify } from '@operato/layout';
15
19
  let ChecklistView = class ChecklistView extends connect(store)(LitElement) {
16
20
  constructor() {
17
21
  super(...arguments);
18
22
  this.mode = "VIEWER" /* ChecklistMode.VIEWER */;
19
23
  this.checklist = {};
24
+ this.manager = {};
20
25
  this.buildingComplex = {
21
26
  id: '',
22
27
  taskConstructorEmails: [],
@@ -25,9 +30,80 @@ let ChecklistView = class ChecklistView extends connect(store)(LitElement) {
25
30
  overallSupervisoryEmails: []
26
31
  };
27
32
  this.status = BuildingInspectionStatus.WAIT;
33
+ this.projectType = "DSSP" /* ProjectType.DSSP */;
34
+ this.isListening = false;
35
+ this._onToggleSTT = () => {
36
+ const stt = this.renderRoot.querySelector('#stt');
37
+ if (!this.isListening) {
38
+ stt === null || stt === void 0 ? void 0 : stt.startListening();
39
+ }
40
+ else {
41
+ stt === null || stt === void 0 ? void 0 : stt.stopListening();
42
+ }
43
+ // isListening은 stt-status 이벤트에서 갱신됨
44
+ };
45
+ }
46
+ firstUpdated() {
47
+ const stt = this.renderRoot.querySelector('#stt');
48
+ if (stt) {
49
+ stt.addEventListener('stt-result', (e) => {
50
+ var _a, _b;
51
+ const text = e.detail.finalTranscript;
52
+ const parsed = parseSpeechCommand(text, ((_b = (_a = this.checklist) === null || _a === void 0 ? void 0 : _a.checklistItems) === null || _b === void 0 ? void 0 : _b.length) || 20);
53
+ this._applySpeechCommand(parsed);
54
+ });
55
+ stt.addEventListener('stt-status', (e) => {
56
+ // 음성 인식 상태에 따라 버튼 상태 갱신
57
+ const status = e.detail.status;
58
+ if (status && status.includes('Listening'))
59
+ this.isListening = true;
60
+ if (status && (status.includes('종료') || status.includes('Stopped')))
61
+ this.isListening = false;
62
+ this.requestUpdate();
63
+ });
64
+ }
65
+ }
66
+ /**
67
+ * 음성 명령 해석 결과를 체크리스트에 반영
68
+ */
69
+ async _applySpeechCommand(parsed) {
70
+ // 합격/불합격 처리 예시 (시공자 기준)
71
+ if (parsed.rowIds && parsed.isPass !== null) {
72
+ this.checklist.checklistItems = this.checklist.checklistItems.map((item, idx) => parsed.rowIds.includes(idx + 1) ? Object.assign(Object.assign({}, item), { constructionConfirmStatus: parsed.isPass ? 'T' : 'F' }) : item);
73
+ this.requestUpdate();
74
+ }
75
+ // 조치사항 처리 예시
76
+ if (parsed.rowIds && parsed.actionText) {
77
+ const { rowIds, actionText } = parsed;
78
+ const checklistItems = this.checklist.checklistItems;
79
+ const ids = rowIds.length > 0 ? rowIds : Array.from({ length: checklistItems.length }, (_, i) => i + 1); // rowIds가 빈값이면 모든 아이템에 대해 조치사항 등록
80
+ let count = 0;
81
+ for (const rowId of ids) {
82
+ const item = checklistItems[rowId - 1];
83
+ count += await this._createChecklistItemComment(item.id, actionText);
84
+ this._refreshItem({ detail: { checklistItemId: item.id } });
85
+ }
86
+ notify({ message: `${count}건의 조치사항을 등록했습니다.` });
87
+ }
88
+ }
89
+ // 체크리스트 아이템 코멘트 생성
90
+ async _createChecklistItemComment(checklistItemId, comment) {
91
+ const response = await client.mutate({
92
+ mutation: gql `
93
+ mutation CreateChecklistItemComment($checklistItemComment: NewChecklistItemComment!) {
94
+ createChecklistItemComment(checklistItemComment: $checklistItemComment) {
95
+ id
96
+ }
97
+ }
98
+ `,
99
+ variables: {
100
+ checklistItemComment: { comment, checklistItemId }
101
+ }
102
+ });
103
+ return !response.errors ? 1 : 0;
28
104
  }
29
105
  render() {
30
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
106
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
31
107
  const today = this._getDate(new Date());
32
108
  // 시공자 스탭 여부
33
109
  const isConstructorStep = this.status == BuildingInspectionStatus.WAIT ||
@@ -73,199 +149,217 @@ let ChecklistView = class ChecklistView extends connect(store)(LitElement) {
73
149
  });
74
150
  const processedItems = this.drawChecklistItems(((_j = this.checklist) === null || _j === void 0 ? void 0 : _j.checklistItems) || []);
75
151
  return html `
76
- <div wrapper>
77
- <div name bold>${this.checklist.name}</div>
152
+ ${this.mode == "EDITOR" /* ChecklistMode.EDITOR */
153
+ ? html `
154
+ <speech-to-text id="stt"></speech-to-text>
155
+ <md-fab
156
+ class="stt-fab"
157
+ ?active=${this.isListening}
158
+ @click=${this._onToggleSTT}
159
+ ?disabled=${false}
160
+ .label=${this.isListening ? '음성 인식 중지' : '음성 인식 시작'}
161
+ >
162
+ <md-icon slot="icon">mic</md-icon>
163
+ </md-fab>
164
+ `
165
+ : ''}
78
166
 
79
- <table header>
167
+ <div title-row>
168
+ <div name>${this.checklist.name}</div>
169
+ </div>
170
+ <table header>
171
+ <tr>
172
+ <th>공종</th>
173
+ <td>${this.checklist.constructionType}</td>
174
+ <th>문서 번호</th>
175
+ <td>${this.checklist.documentNo}</td>
176
+ </tr>
177
+ <tr>
178
+ <th>세부 공종</th>
179
+ <td>${this.checklist.constructionDetailType}</td>
180
+ <th>위치 및 부위</th>
181
+ <td>${this.checklist.location}</td>
182
+ </tr>
183
+ <tr>
184
+ ${this.projectType == "DSSP" /* ProjectType.DSSP */
185
+ ? html `
186
+ <th>담당자</th>
187
+ <td>${((_k = this.manager) === null || _k === void 0 ? void 0 : _k.name) || ''}</td>
188
+ `
189
+ : html `
190
+ <th>검측 부위</th>
191
+ <td>${((_m = (_l = this.checklist) === null || _l === void 0 ? void 0 : _l.inspectionParts) === null || _m === void 0 ? void 0 : _m.join(', ')) || ''}</td>
192
+ `}
193
+
194
+ <th>검측 상태</th>
195
+ <td>${BUILDING_INSPECTION_STATUS_DISPLAY[this.status]}</td>
196
+ </tr>
197
+ </table>
198
+
199
+ <table body>
200
+ <thead>
80
201
  <tr>
81
- <th>공종</th>
82
- <td>${this.checklist.constructionType}</td>
83
- <th>문서 번호</th>
84
- <td>${this.checklist.documentNo}</td>
202
+ <th colspan="2" rowspan="3" type>구분</th>
203
+ <th rowspan="3" inspection-name>검사항목</th>
204
+ <th rowspan="3" criteria>검사기준</th>
205
+ <th colspan="4" result>검사결과</th>
206
+ <th rowspan="3" small>첨부자료</th>
207
+ <th rowspan="3" small>조치사항</th>
85
208
  </tr>
86
209
  <tr>
87
- <th>세부 공종</th>
88
- <td>${this.checklist.constructionDetailType}</td>
89
- <th>위치 및 부위</th>
90
- <td>${this.checklist.location}</td>
210
+ <th colspan="2">시공자</th>
211
+ <th colspan="2">감리자</th>
91
212
  </tr>
92
213
  <tr>
93
- <th>검측 부위</th>
94
- <td>${((_l = (_k = this.checklist) === null || _k === void 0 ? void 0 : _k.inspectionParts) === null || _l === void 0 ? void 0 : _l.join(', ')) || ''}</td>
95
- <th>검측 상태</th>
96
- <td>${BUILDING_INSPECTION_STATUS_DISPLAY[(_o = (_m = this.checklist) === null || _m === void 0 ? void 0 : _m.buildingInspection) === null || _o === void 0 ? void 0 : _o.status]}</td>
214
+ <th>적합</th>
215
+ <th>부적합</th>
216
+ <th>적합</th>
217
+ <th>부적합</th>
97
218
  </tr>
98
- </table>
99
-
100
- <table body>
101
- <thead>
102
- <tr>
103
- <th colspan="2" rowspan="3" type>구분</th>
104
- <th rowspan="3" inspection-name>검사항목</th>
105
- <th rowspan="3" criteria>검사기준</th>
106
- <th colspan="4" result>검사결과</th>
107
- <th rowspan="3" small>첨부자료</th>
108
- <th rowspan="3" small>조치사항</th>
109
- </tr>
110
- <tr>
111
- <th colspan="2">시공자</th>
112
- <th colspan="2">감리자</th>
113
- </tr>
114
- <tr>
115
- <th>적합</th>
116
- <th>부적합</th>
117
- <th>적합</th>
118
- <th>부적합</th>
119
- </tr>
120
- </thead>
121
- <tbody>
122
- ${processedItems.map(({ item, showMainTypeCell, mainTypeRowspan, showDetailTypeCell, detailTypeRowspan }, idx) => {
219
+ </thead>
220
+ <tbody>
221
+ ${processedItems.map(({ item, showMainTypeCell, mainTypeRowspan, showDetailTypeCell, detailTypeRowspan }, idx) => {
123
222
  return html ` <tr>
124
- ${showMainTypeCell
223
+ ${showMainTypeCell
125
224
  ? html `<td main-type bold rowspan="${mainTypeRowspan}">${CHECKLIST_MAIN_TYPE_LIST[item.mainType]}</td>`
126
225
  : ''}
127
- ${showDetailTypeCell ? html ` <td bold rowspan="${detailTypeRowspan}">${item.detailType}</td> ` : ''}
128
-
129
- <td>${idx + 1}. ${item.name}</td>
130
- <td>${item.inspctionCriteria}</td>
131
- <td radio>
132
- <md-radio
133
- item-id=${item.id}
134
- item-name="constructionConfirmStatus"
135
- name=${'radio-construction-' + item.id}
136
- value="T"
137
- .checked=${item.constructionConfirmStatus === 'T'}
138
- ?disabled=${!isConstructorStep || !havePermissionByStatus}
139
- @change=${this._onChangeConfirmStatus}
140
- ></md-radio>
141
- </td>
142
- <td radio>
143
- <md-radio
144
- item-id=${item.id}
145
- item-name="constructionConfirmStatus"
146
- name=${'radio-construction-' + item.id}
147
- value="F"
148
- .checked=${item.constructionConfirmStatus === 'F'}
149
- ?disabled=${!isConstructorStep || !havePermissionByStatus}
150
- @change=${this._onChangeConfirmStatus}
151
- ></md-radio>
152
- </td>
153
- <td radio>
154
- <md-radio
155
- item-id=${item.id}
156
- item-name="supervisoryConfirmStatus"
157
- name=${'radio-supervisory-' + item.id}
158
- value="T"
159
- .checked=${item.supervisoryConfirmStatus === 'T'}
160
- ?disabled=${!isSupervisoryStep || !havePermissionByStatus}
161
- @change=${this._onChangeConfirmStatus}
162
- ></md-radio>
163
- </td>
164
- <td radio>
165
- <md-radio
166
- item-id=${item.id}
167
- item-name="supervisoryConfirmStatus"
168
- name=${'radio-supervisory-' + item.id}
169
- value="F"
170
- .checked=${item.supervisoryConfirmStatus === 'F'}
171
- ?disabled=${!isSupervisoryStep || !havePermissionByStatus}
172
- @change=${this._onChangeConfirmStatus}
173
- ></md-radio>
174
- </td>
175
- <td
176
- attachment
177
- ?disabled=${this.status == BuildingInspectionStatus.PASS}
178
- @click=${() => this._onClickAttachment(item.id)}
179
- >
180
- <md-icon slot="icon">attach_file</md-icon>
181
- <span>${(item === null || item === void 0 ? void 0 : item.checklistItemAttachmentCount) || ''}</span>
182
- </td>
183
- <td
184
- comment
185
- ?disabled=${this.status == BuildingInspectionStatus.PASS}
186
- @click=${() => this._onClickComment(item.id)}
187
- >
188
- <md-icon slot="icon">chat</md-icon>
189
- <span>${(item === null || item === void 0 ? void 0 : item.checklistItemCommentCount) || ''}</span>
190
- </td>
191
- </tr>`;
192
- })}
193
- </tbody>
194
- </table>
226
+ ${showDetailTypeCell ? html ` <td bold rowspan="${detailTypeRowspan}">${item.detailType}</td> ` : ''}
195
227
 
196
- <table tail>
197
- <tbody>
198
- <tr first>
199
- <th rowspan="2">시공자 점검일</th>
200
- <td rowspan="2">
201
- ${this.mode == "VIEWER" /* ChecklistMode.VIEWER */ ? today : this._getDate(this.checklist.constructionInspectionDate)}
228
+ <td>${idx + 1}. ${item.name}</td>
229
+ <td>${item.inspctionCriteria}</td>
230
+ <td radio>
231
+ <md-radio
232
+ item-id=${item.id}
233
+ item-name="constructionConfirmStatus"
234
+ name=${'radio-construction-' + item.id}
235
+ value="T"
236
+ .checked=${item.constructionConfirmStatus === 'T'}
237
+ ?disabled=${!isConstructorStep || !havePermissionByStatus}
238
+ @change=${this._onChangeConfirmStatus}
239
+ ></md-radio>
202
240
  </td>
203
- <th>공종별 시공 관리자</th>
204
- <td>
205
- <span sign-text>(인)</span>
206
- <ox-input-signature
207
- .value=${this.checklist.taskConstructorSignature}
208
- name="taskConstructorSignature"
209
- @change=${this._onChangeSignature}
210
- ?disabled=${(this.status != BuildingInspectionStatus.WAIT && this.status != BuildingInspectionStatus.FAIL) ||
211
- !isTaskConstructor}
212
- >
213
- </ox-input-signature>
241
+ <td radio>
242
+ <md-radio
243
+ item-id=${item.id}
244
+ item-name="constructionConfirmStatus"
245
+ name=${'radio-construction-' + item.id}
246
+ value="F"
247
+ .checked=${item.constructionConfirmStatus === 'F'}
248
+ ?disabled=${!isConstructorStep || !havePermissionByStatus}
249
+ @change=${this._onChangeConfirmStatus}
250
+ ></md-radio>
214
251
  </td>
215
- </tr>
216
- <tr>
217
- <th>총괄 시공 책임자</th>
218
- <td>
219
- <span sign-text>(인)</span>
220
- <ox-input-signature
221
- .value=${this.checklist.overallConstructorSignature}
222
- name="overallConstructorSignature"
223
- @change=${this._onChangeSignature}
224
- ?disabled=${this.status != BuildingInspectionStatus.OVERALL_WAIT || !isOverallConstructor}
225
- >
226
- </ox-input-signature>
252
+ <td radio>
253
+ <md-radio
254
+ item-id=${item.id}
255
+ item-name="supervisoryConfirmStatus"
256
+ name=${'radio-supervisory-' + item.id}
257
+ value="T"
258
+ .checked=${item.supervisoryConfirmStatus === 'T'}
259
+ ?disabled=${!isSupervisoryStep || !havePermissionByStatus}
260
+ @change=${this._onChangeConfirmStatus}
261
+ ></md-radio>
227
262
  </td>
228
- </tr>
229
- <tr>
230
- <th rowspan="2">감리자 점검일</th>
231
- <td rowspan="2">
232
- ${this.mode == "VIEWER" /* ChecklistMode.VIEWER */ ? today : this._getDate(this.checklist.supervisorInspectionDate)}
263
+ <td radio>
264
+ <md-radio
265
+ item-id=${item.id}
266
+ item-name="supervisoryConfirmStatus"
267
+ name=${'radio-supervisory-' + item.id}
268
+ value="F"
269
+ .checked=${item.supervisoryConfirmStatus === 'F'}
270
+ ?disabled=${!isSupervisoryStep || !havePermissionByStatus}
271
+ @change=${this._onChangeConfirmStatus}
272
+ ></md-radio>
233
273
  </td>
234
- <th>공종별 감리 책임자</th>
235
- <td>
236
- <span sign-text>(인)</span>
237
- <ox-input-signature
238
- .value=${this.checklist.taskSupervisorySignature}
239
- name="taskSupervisorySignature"
240
- @change=${this._onChangeSignature}
241
- ?disabled=${this.status != BuildingInspectionStatus.REQUEST || !isTaskSupervisory}
242
- >
243
- </ox-input-signature>
274
+ <td
275
+ attachment
276
+ ?disabled=${this.status == BuildingInspectionStatus.PASS}
277
+ @click=${() => this._onClickAttachment(item.id)}
278
+ >
279
+ <md-icon slot="icon">attach_file</md-icon>
280
+ <span>${(item === null || item === void 0 ? void 0 : item.checklistItemAttachmentCount) || ''}</span>
244
281
  </td>
245
- </tr>
246
- <tr>
247
- <th>총괄 감리 책임자</th>
248
- <td>
249
- <span sign-text>(인)</span>
250
- <ox-input-signature
251
- .value=${this.checklist.overallSupervisorySignature}
252
- name="overallSupervisorySignature"
253
- @change=${this._onChangeSignature}
254
- ?disabled=${this.status != BuildingInspectionStatus.OVERALL_REQUEST || !isOverallSupervisory}
255
- >
256
- </ox-input-signature>
282
+ <td comment ?disabled=${this.status == BuildingInspectionStatus.PASS} @click=${() => this._onClickComment(item.id)}>
283
+ <md-icon slot="icon">chat</md-icon>
284
+ <span>${(item === null || item === void 0 ? void 0 : item.checklistItemCommentCount) || ''}</span>
257
285
  </td>
258
- </tr>
259
- </tbody>
260
- </table>
286
+ </tr>`;
287
+ })}
288
+ </tbody>
289
+ </table>
261
290
 
262
- <div footer>
263
- <div>
264
- - 검사결과는 1차, 2차로 구분 재검측시 2차에 기록하고 검사기준도 검사결과와 비교될 수 있도록 시방서 또는 도면 등에 있는
265
- 수치를 작성하며, 수치가 없는 검사항목은 시방서 또는 설계도서에 있는 내용과 검사한 내용으로 작성함
266
- </div>
267
- <div>- 검사항목 검사기준은 공종별로 감리원과 협의하여 작성할 것</div>
291
+ <table tail>
292
+ <tbody>
293
+ <tr first>
294
+ <th rowspan="2">시공자 점검일</th>
295
+ <td rowspan="2">
296
+ ${this.mode == "VIEWER" /* ChecklistMode.VIEWER */ ? today : this._getDate(this.checklist.constructionInspectionDate)}
297
+ </td>
298
+ <th>공종별 시공 관리자</th>
299
+ <td>
300
+ <span sign-text>(인)</span>
301
+ <ox-input-signature
302
+ .value=${this.checklist.taskConstructorSignature}
303
+ name="taskConstructorSignature"
304
+ @change=${this._onChangeSignature}
305
+ ?disabled=${(this.status != BuildingInspectionStatus.WAIT && this.status != BuildingInspectionStatus.FAIL) ||
306
+ !isTaskConstructor}
307
+ >
308
+ </ox-input-signature>
309
+ </td>
310
+ </tr>
311
+ <tr>
312
+ <th>총괄 시공 책임자</th>
313
+ <td>
314
+ <span sign-text>(인)</span>
315
+ <ox-input-signature
316
+ .value=${this.checklist.overallConstructorSignature}
317
+ name="overallConstructorSignature"
318
+ @change=${this._onChangeSignature}
319
+ ?disabled=${this.status != BuildingInspectionStatus.OVERALL_WAIT || !isOverallConstructor}
320
+ >
321
+ </ox-input-signature>
322
+ </td>
323
+ </tr>
324
+ <tr>
325
+ <th rowspan="2">감리자 점검일</th>
326
+ <td rowspan="2">
327
+ ${this.mode == "VIEWER" /* ChecklistMode.VIEWER */ ? today : this._getDate(this.checklist.supervisorInspectionDate)}
328
+ </td>
329
+ <th>공종별 감리 책임자</th>
330
+ <td>
331
+ <span sign-text>(인)</span>
332
+ <ox-input-signature
333
+ .value=${this.checklist.taskSupervisorySignature}
334
+ name="taskSupervisorySignature"
335
+ @change=${this._onChangeSignature}
336
+ ?disabled=${this.status != BuildingInspectionStatus.REQUEST || !isTaskSupervisory}
337
+ >
338
+ </ox-input-signature>
339
+ </td>
340
+ </tr>
341
+ <tr>
342
+ <th>총괄 감리 책임자</th>
343
+ <td>
344
+ <span sign-text>(인)</span>
345
+ <ox-input-signature
346
+ .value=${this.checklist.overallSupervisorySignature}
347
+ name="overallSupervisorySignature"
348
+ @change=${this._onChangeSignature}
349
+ ?disabled=${this.status != BuildingInspectionStatus.OVERALL_REQUEST || !isOverallSupervisory}
350
+ >
351
+ </ox-input-signature>
352
+ </td>
353
+ </tr>
354
+ </tbody>
355
+ </table>
356
+
357
+ <div footer>
358
+ <div>
359
+ - 검사결과는 1차, 2차로 구분 재검측시 2차에 기록하고 검사기준도 검사결과와 비교될 수 있도록 시방서 또는 도면 등에 있는
360
+ 수치를 작성하며, 수치가 없는 검사항목은 시방서 또는 설계도서에 있는 내용과 검사한 내용으로 작성함
268
361
  </div>
362
+ <div>- 검사항목 및 검사기준은 각 공종별로 감리원과 협의하여 작성할 것</div>
269
363
  </div>
270
364
  `;
271
365
  }
@@ -278,8 +372,27 @@ let ChecklistView = class ChecklistView extends connect(store)(LitElement) {
278
372
  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);
279
373
  }
280
374
  _onChangeSignature(e) {
375
+ var _a;
281
376
  const target = e.target;
377
+ const { name: userName } = (_a = store.getState().auth) === null || _a === void 0 ? void 0 : _a.user;
282
378
  this.checklist[target.name] = target.value;
379
+ // 서명할 때 해당 사용자 ID도 업데이트
380
+ if (userName) {
381
+ switch (target.name) {
382
+ case 'taskConstructorSignature':
383
+ this.checklist.taskConstructor = { name: userName };
384
+ break;
385
+ case 'overallConstructorSignature':
386
+ this.checklist.overallConstructor = { name: userName };
387
+ break;
388
+ case 'taskSupervisorySignature':
389
+ this.checklist.taskSupervisory = { name: userName };
390
+ break;
391
+ case 'overallSupervisorySignature':
392
+ this.checklist.overallSupervisory = { name: userName };
393
+ break;
394
+ }
395
+ }
283
396
  }
284
397
  _getDate(date) {
285
398
  if (!date)
@@ -330,26 +443,20 @@ let ChecklistView = class ChecklistView extends connect(store)(LitElement) {
330
443
  <comment-list-popup
331
444
  .checklistItemId=${checklistItemId}
332
445
  .status=${this.status}
446
+ .mode=${this.mode}
333
447
  @change-comment=${this._refreshItem.bind(this)}
334
448
  ></comment-list-popup>
335
- `, {
336
- backdrop: true,
337
- size: 'medium',
338
- title: '조치 사항'
339
- });
449
+ `, { backdrop: true, size: 'medium', title: '조치 사항' });
340
450
  }
341
451
  _onClickAttachment(checklistItemId) {
342
452
  openPopup(html `
343
453
  <attachment-list-popup
344
454
  .checklistItemId=${checklistItemId}
345
455
  .status=${this.status}
456
+ .mode=${this.mode}
346
457
  @change-attachment=${this._refreshItem.bind(this)}
347
458
  ></attachment-list-popup>
348
- `, {
349
- backdrop: true,
350
- size: 'medium',
351
- title: '첨부 자료'
352
- });
459
+ `, { backdrop: true, size: 'medium', title: '첨부 자료' });
353
460
  }
354
461
  async _refreshItem(e) {
355
462
  var _a;
@@ -386,6 +493,8 @@ ChecklistView.styles = [
386
493
  padding-top: 0;
387
494
  font-size: 14px;
388
495
  min-width: 800px;
496
+
497
+ position: relative;
389
498
  }
390
499
 
391
500
  [bold] {
@@ -536,6 +645,67 @@ ChecklistView.styles = [
536
645
  text-indent: -9px;
537
646
  padding-left: var(--spacing-medium, 8px);
538
647
  }
648
+
649
+ .stt-float-btns {
650
+ position: absolute;
651
+ top: 0;
652
+ right: 0;
653
+ display: flex;
654
+ gap: 8px;
655
+ z-index: 10;
656
+ }
657
+ .stt-float-btns button {
658
+ background: #fff;
659
+ border: 1px solid #ccc;
660
+ border-radius: 50%;
661
+ width: 38px;
662
+ height: 38px;
663
+ font-size: 18px;
664
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
665
+ cursor: pointer;
666
+ transition: background 0.2s;
667
+ outline: none;
668
+ }
669
+ .stt-float-btns button:hover {
670
+ background: #f2f2f2;
671
+ }
672
+ div[title-row] {
673
+ position: relative;
674
+ display: flex;
675
+ align-items: center;
676
+ justify-content: center;
677
+ margin-bottom: 8px;
678
+ }
679
+ div[name] {
680
+ color: #586878;
681
+ font-size: 24px;
682
+ font-weight: bold;
683
+ flex: 1;
684
+ text-align: center;
685
+ }
686
+
687
+ @keyframes pulse {
688
+ 0% {
689
+ filter: drop-shadow(0 0 0 #d32f2f);
690
+ }
691
+ 70% {
692
+ filter: drop-shadow(0 0 8px #d32f2f);
693
+ }
694
+ 100% {
695
+ filter: drop-shadow(0 0 0 #d32f2f);
696
+ }
697
+ }
698
+
699
+ .stt-fab {
700
+ position: fixed;
701
+ top: 100px;
702
+ right: 20px;
703
+ }
704
+
705
+ .stt-fab[active] md-icon {
706
+ color: #d32f2f;
707
+ animation: pulse 1s infinite;
708
+ }
539
709
  `
540
710
  ];
541
711
  __decorate([
@@ -546,6 +716,10 @@ __decorate([
546
716
  property({ type: Object }),
547
717
  __metadata("design:type", Object)
548
718
  ], ChecklistView.prototype, "checklist", void 0);
719
+ __decorate([
720
+ property({ type: Object }),
721
+ __metadata("design:type", Object)
722
+ ], ChecklistView.prototype, "manager", void 0);
549
723
  __decorate([
550
724
  property({ type: Object }),
551
725
  __metadata("design:type", Object)
@@ -554,6 +728,10 @@ __decorate([
554
728
  property({ type: String }),
555
729
  __metadata("design:type", String)
556
730
  ], ChecklistView.prototype, "status", void 0);
731
+ __decorate([
732
+ property({ type: String }),
733
+ __metadata("design:type", String)
734
+ ], ChecklistView.prototype, "projectType", void 0);
557
735
  ChecklistView = __decorate([
558
736
  customElement('checklist-view')
559
737
  ], ChecklistView);