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

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 (324) hide show
  1. package/dist-client/graphql/building-inspection.d.ts +1 -0
  2. package/dist-client/graphql/building-inspection.js +101 -0
  3. package/dist-client/graphql/building-inspection.js.map +1 -0
  4. package/dist-client/pages/action-plan/action-plan-list-page.d.ts +1 -2
  5. package/dist-client/pages/action-plan/action-plan-list-page.js +1 -2
  6. package/dist-client/pages/action-plan/action-plan-list-page.js.map +1 -1
  7. package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.d.ts +22 -0
  8. package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.js +171 -0
  9. package/dist-client/pages/building-inspection/building-inspection-detail-ai-defect.js.map +1 -0
  10. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.d.ts +59 -0
  11. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js +868 -0
  12. package/dist-client/pages/building-inspection/building-inspection-detail-ai-measurement.js.map +1 -0
  13. package/dist-client/pages/building-inspection/building-inspection-detail-camera.d.ts +8 -6
  14. package/dist-client/pages/building-inspection/building-inspection-detail-camera.js +116 -65
  15. package/dist-client/pages/building-inspection/building-inspection-detail-camera.js.map +1 -1
  16. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +11 -0
  17. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +147 -72
  18. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -1
  19. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.d.ts +1 -0
  20. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js +78 -14
  21. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js.map +1 -1
  22. package/dist-client/pages/building-inspection/building-inspection-list.d.ts +26 -2
  23. package/dist-client/pages/building-inspection/building-inspection-list.js +375 -34
  24. package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -1
  25. package/dist-client/pages/building-inspection/building-inspection-management.d.ts +72 -0
  26. package/dist-client/pages/building-inspection/building-inspection-management.js +1256 -0
  27. package/dist-client/pages/building-inspection/building-inspection-management.js.map +1 -0
  28. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.d.ts +3 -0
  29. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js +112 -20
  30. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js.map +1 -1
  31. package/dist-client/pages/building-inspection/component/daily-worklog-popup.d.ts +27 -0
  32. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js +542 -0
  33. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js.map +1 -0
  34. package/dist-client/pages/building-inspection/component/image-preview-popup.d.ts +15 -0
  35. package/dist-client/pages/building-inspection/component/image-preview-popup.js +348 -0
  36. package/dist-client/pages/building-inspection/component/image-preview-popup.js.map +1 -0
  37. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +25 -0
  38. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js +491 -0
  39. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js.map +1 -0
  40. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +31 -0
  41. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js +485 -0
  42. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js.map +1 -0
  43. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.d.ts +27 -0
  44. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js +416 -0
  45. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.js.map +1 -0
  46. package/dist-client/pages/building-inspection/component/inspection-event-provider.d.ts +2 -1
  47. package/dist-client/pages/building-inspection/component/inspection-event-provider.js +42 -18
  48. package/dist-client/pages/building-inspection/component/inspection-event-provider.js.map +1 -1
  49. package/dist-client/pages/building-inspection/inspection-create-popup.js +17 -5
  50. package/dist-client/pages/building-inspection/inspection-create-popup.js.map +1 -1
  51. package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.d.ts +3 -0
  52. package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.js +791 -0
  53. package/dist-client/pages/building-inspection/inspection-with-checklist-create-popup.js.map +1 -0
  54. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +16 -2
  55. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js +249 -45
  56. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.js.map +1 -1
  57. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js +9 -3
  58. package/dist-client/pages/building-inspection-grid/component/grid-inspection-create-popup.js.map +1 -1
  59. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.d.ts +19 -0
  60. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.js +205 -0
  61. package/dist-client/pages/building-inspection-grid/component/grid-inspection-list-layer.js.map +1 -0
  62. package/dist-client/pages/checklist/attachment-list-popup.d.ts +1 -0
  63. package/dist-client/pages/checklist/attachment-list-popup.js +251 -69
  64. package/dist-client/pages/checklist/attachment-list-popup.js.map +1 -1
  65. package/dist-client/pages/checklist/checklist-view.d.ts +5 -0
  66. package/dist-client/pages/checklist/checklist-view.js +191 -30
  67. package/dist-client/pages/checklist/checklist-view.js.map +1 -1
  68. package/dist-client/pages/checklist/comment-list-popup.js +15 -5
  69. package/dist-client/pages/checklist/comment-list-popup.js.map +1 -1
  70. package/dist-client/pages/checklist/file-preview-popup.js +0 -1
  71. package/dist-client/pages/checklist/file-preview-popup.js.map +1 -1
  72. package/dist-client/pages/checklist/inspection-info-popup.d.ts +49 -0
  73. package/dist-client/pages/checklist/inspection-info-popup.js +683 -0
  74. package/dist-client/pages/checklist/inspection-info-popup.js.map +1 -0
  75. package/dist-client/pages/checklist/inspection-tab-popup.d.ts +18 -0
  76. package/dist-client/pages/checklist/inspection-tab-popup.js +196 -0
  77. package/dist-client/pages/checklist/inspection-tab-popup.js.map +1 -0
  78. package/dist-client/pages/checklist-database/checklist-database.d.ts +35 -0
  79. package/dist-client/pages/checklist-database/checklist-database.js +539 -0
  80. package/dist-client/pages/checklist-database/checklist-database.js.map +1 -0
  81. package/dist-client/pages/checklist-template/checklist-template-item.js +39 -3
  82. package/dist-client/pages/checklist-template/checklist-template-item.js.map +1 -1
  83. package/dist-client/pages/checklist-template/checklist-template-list.js +1 -1
  84. package/dist-client/pages/checklist-template/checklist-template-list.js.map +1 -1
  85. package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.d.ts +2 -0
  86. package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.js +242 -0
  87. package/dist-client/pages/checklist-template/construction-checklist-template-item-popup.js.map +1 -0
  88. package/dist-client/pages/checklist-template/construction-checklist-template-list.d.ts +55 -0
  89. package/dist-client/pages/checklist-template/construction-checklist-template-list.js +409 -0
  90. package/dist-client/pages/checklist-template/construction-checklist-template-list.js.map +1 -0
  91. package/dist-client/pages/issue/issue-list-page.d.ts +1 -2
  92. package/dist-client/pages/issue/issue-list-page.js +1 -2
  93. package/dist-client/pages/issue/issue-list-page.js.map +1 -1
  94. package/dist-client/pages/project-checklist/project-checklist-management.d.ts +50 -0
  95. package/dist-client/pages/project-checklist/project-checklist-management.js +910 -0
  96. package/dist-client/pages/project-checklist/project-checklist-management.js.map +1 -0
  97. package/dist-client/pages/project-report/project-report-list-page.d.ts +1 -2
  98. package/dist-client/pages/project-report/project-report-list-page.js +1 -2
  99. package/dist-client/pages/project-report/project-report-list-page.js.map +1 -1
  100. package/dist-client/pages/supervisor/supervisor-list-page.d.ts +1 -2
  101. package/dist-client/pages/supervisor/supervisor-list-page.js +1 -2
  102. package/dist-client/pages/supervisor/supervisor-list-page.js.map +1 -1
  103. package/dist-client/route.d.ts +1 -1
  104. package/dist-client/route.js +18 -0
  105. package/dist-client/route.js.map +1 -1
  106. package/dist-client/stt/speech-to-text.d.ts +13 -8
  107. package/dist-client/stt/speech-to-text.js +282 -40
  108. package/dist-client/stt/speech-to-text.js.map +1 -1
  109. package/dist-client/tsconfig.tsbuildinfo +1 -1
  110. package/dist-server/service/action-plan/action-plan-mutation.js +5 -6
  111. package/dist-server/service/action-plan/action-plan-mutation.js.map +1 -1
  112. package/dist-server/service/action-plan/action-plan-query.d.ts +2 -2
  113. package/dist-server/service/action-plan/action-plan-query.js +5 -11
  114. package/dist-server/service/action-plan/action-plan-query.js.map +1 -1
  115. package/dist-server/service/building-inspection/building-inspection-mutation.d.ts +2 -3
  116. package/dist-server/service/building-inspection/building-inspection-mutation.js +77 -39
  117. package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -1
  118. package/dist-server/service/building-inspection/building-inspection-query.d.ts +5 -7
  119. package/dist-server/service/building-inspection/building-inspection-query.js +54 -52
  120. package/dist-server/service/building-inspection/building-inspection-query.js.map +1 -1
  121. package/dist-server/service/building-inspection/building-inspection-type.d.ts +26 -7
  122. package/dist-server/service/building-inspection/building-inspection-type.js +92 -13
  123. package/dist-server/service/building-inspection/building-inspection-type.js.map +1 -1
  124. package/dist-server/service/building-inspection/building-inspection.d.ts +5 -0
  125. package/dist-server/service/building-inspection/building-inspection.js +37 -4
  126. package/dist-server/service/building-inspection/building-inspection.js.map +1 -1
  127. package/dist-server/service/building-inspection/index.d.ts +3 -4
  128. package/dist-server/service/building-inspection/index.js +10 -3
  129. package/dist-server/service/building-inspection/index.js.map +1 -1
  130. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.d.ts +6 -0
  131. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js +56 -0
  132. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js.map +1 -0
  133. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.d.ts +16 -0
  134. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js +171 -0
  135. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js.map +1 -0
  136. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.d.ts +23 -0
  137. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js +90 -0
  138. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js.map +1 -0
  139. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.d.ts +33 -0
  140. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js +132 -0
  141. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js.map +1 -0
  142. package/dist-server/service/building-inspection-daily-worklog/index.d.ts +5 -0
  143. package/dist-server/service/building-inspection-daily-worklog/index.js +9 -0
  144. package/dist-server/service/building-inspection-daily-worklog/index.js.map +1 -0
  145. package/dist-server/service/building-inspection-history/building-inspection-history-query.d.ts +16 -0
  146. package/dist-server/service/building-inspection-history/building-inspection-history-query.js +120 -0
  147. package/dist-server/service/building-inspection-history/building-inspection-history-query.js.map +1 -0
  148. package/dist-server/service/building-inspection-history/building-inspection-history-type.d.ts +5 -0
  149. package/dist-server/service/building-inspection-history/building-inspection-history-type.js +21 -0
  150. package/dist-server/service/building-inspection-history/building-inspection-history-type.js.map +1 -0
  151. package/dist-server/service/building-inspection-history/building-inspection-history.d.ts +35 -0
  152. package/dist-server/service/building-inspection-history/building-inspection-history.js +162 -0
  153. package/dist-server/service/building-inspection-history/building-inspection-history.js.map +1 -0
  154. package/dist-server/service/building-inspection-history/event-subscriber.d.ts +7 -0
  155. package/dist-server/service/building-inspection-history/event-subscriber.js +21 -0
  156. package/dist-server/service/building-inspection-history/event-subscriber.js.map +1 -0
  157. package/dist-server/service/building-inspection-history/index.d.ts +6 -0
  158. package/dist-server/service/building-inspection-history/index.js +10 -0
  159. package/dist-server/service/building-inspection-history/index.js.map +1 -0
  160. package/dist-server/service/checklist/checklist-mutation.d.ts +0 -5
  161. package/dist-server/service/checklist/checklist-mutation.js +1 -67
  162. package/dist-server/service/checklist/checklist-mutation.js.map +1 -1
  163. package/dist-server/service/checklist/checklist-query.d.ts +7 -0
  164. package/dist-server/service/checklist/checklist-query.js +83 -0
  165. package/dist-server/service/checklist/checklist-query.js.map +1 -1
  166. package/dist-server/service/checklist/checklist-type.d.ts +0 -13
  167. package/dist-server/service/checklist/checklist-type.js +1 -49
  168. package/dist-server/service/checklist/checklist-type.js.map +1 -1
  169. package/dist-server/service/checklist/checklist.d.ts +28 -3
  170. package/dist-server/service/checklist/checklist.js +89 -15
  171. package/dist-server/service/checklist/checklist.js.map +1 -1
  172. package/dist-server/service/checklist/event-subscriber.d.ts +7 -0
  173. package/dist-server/service/checklist/event-subscriber.js +21 -0
  174. package/dist-server/service/checklist/event-subscriber.js.map +1 -0
  175. package/dist-server/service/checklist/index.d.ts +1 -2
  176. package/dist-server/service/checklist/index.js +1 -2
  177. package/dist-server/service/checklist/index.js.map +1 -1
  178. package/dist-server/service/checklist-history/checklist-history-query.d.ts +11 -0
  179. package/dist-server/service/checklist-history/checklist-history-query.js +77 -0
  180. package/dist-server/service/checklist-history/checklist-history-query.js.map +1 -0
  181. package/dist-server/service/checklist-history/checklist-history-type.d.ts +5 -0
  182. package/dist-server/service/checklist-history/checklist-history-type.js +21 -0
  183. package/dist-server/service/checklist-history/checklist-history-type.js.map +1 -0
  184. package/dist-server/service/{checklist → checklist-history}/checklist-history.d.ts +19 -1
  185. package/dist-server/service/{checklist → checklist-history}/checklist-history.js +97 -14
  186. package/dist-server/service/checklist-history/checklist-history.js.map +1 -0
  187. package/dist-server/service/checklist-history/event-subscriber.d.ts +7 -0
  188. package/dist-server/service/checklist-history/event-subscriber.js +21 -0
  189. package/dist-server/service/checklist-history/event-subscriber.js.map +1 -0
  190. package/dist-server/service/checklist-history/index.d.ts +6 -0
  191. package/dist-server/service/checklist-history/index.js +10 -0
  192. package/dist-server/service/checklist-history/index.js.map +1 -0
  193. package/dist-server/service/checklist-item/checklist-item-query.d.ts +1 -1
  194. package/dist-server/service/checklist-item/checklist-item-query.js +5 -3
  195. package/dist-server/service/checklist-item/checklist-item-query.js.map +1 -1
  196. package/dist-server/service/checklist-item/index.d.ts +0 -1
  197. package/dist-server/service/checklist-item/index.js +1 -2
  198. package/dist-server/service/checklist-item/index.js.map +1 -1
  199. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.d.ts +1 -0
  200. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.js +33 -6
  201. package/dist-server/service/checklist-item-comment/checklist-item-comment-mutation.js.map +1 -1
  202. package/dist-server/service/checklist-item-history/checklist-item-history-query.d.ts +16 -0
  203. package/dist-server/service/checklist-item-history/checklist-item-history-query.js +123 -0
  204. package/dist-server/service/checklist-item-history/checklist-item-history-query.js.map +1 -0
  205. package/dist-server/service/checklist-item-history/checklist-item-history-type.d.ts +5 -0
  206. package/dist-server/service/checklist-item-history/checklist-item-history-type.js +21 -0
  207. package/dist-server/service/checklist-item-history/checklist-item-history-type.js.map +1 -0
  208. package/dist-server/service/checklist-item-history/checklist-item-history.d.ts +25 -0
  209. package/dist-server/service/checklist-item-history/checklist-item-history.js +123 -0
  210. package/dist-server/service/checklist-item-history/checklist-item-history.js.map +1 -0
  211. package/dist-server/service/checklist-item-history/event-subscriber.d.ts +7 -0
  212. package/dist-server/service/checklist-item-history/event-subscriber.js +21 -0
  213. package/dist-server/service/checklist-item-history/event-subscriber.js.map +1 -0
  214. package/dist-server/service/checklist-item-history/index.d.ts +6 -0
  215. package/dist-server/service/checklist-item-history/index.js +10 -0
  216. package/dist-server/service/checklist-item-history/index.js.map +1 -0
  217. package/dist-server/service/checklist-template/checklist-template-query.d.ts +1 -1
  218. package/dist-server/service/checklist-template/checklist-template-query.js +2 -5
  219. package/dist-server/service/checklist-template/checklist-template-query.js.map +1 -1
  220. package/dist-server/service/checklist-template-item/checklist-template-item-mutation.js +13 -1
  221. package/dist-server/service/checklist-template-item/checklist-template-item-mutation.js.map +1 -1
  222. package/dist-server/service/checklist-template-item/checklist-template-item-type.d.ts +3 -0
  223. package/dist-server/service/checklist-template-item/checklist-template-item-type.js +9 -0
  224. package/dist-server/service/checklist-template-item/checklist-template-item-type.js.map +1 -1
  225. package/dist-server/service/checklist-template-item/checklist-template-item.d.ts +7 -0
  226. package/dist-server/service/checklist-template-item/checklist-template-item.js +22 -2
  227. package/dist-server/service/checklist-template-item/checklist-template-item.js.map +1 -1
  228. package/dist-server/service/checklist-template-item/spec-matching-service.d.ts +2 -0
  229. package/dist-server/service/checklist-template-item/spec-matching-service.js +51 -0
  230. package/dist-server/service/checklist-template-item/spec-matching-service.js.map +1 -0
  231. package/dist-server/service/checklist-type/checklist-type-query.d.ts +1 -1
  232. package/dist-server/service/checklist-type/checklist-type-query.js +2 -5
  233. package/dist-server/service/checklist-type/checklist-type-query.js.map +1 -1
  234. package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.d.ts +7 -0
  235. package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.js +107 -0
  236. package/dist-server/service/construction-checklist-template/construction-checklist-template-mutation.js.map +1 -0
  237. package/dist-server/service/construction-checklist-template/construction-checklist-template-query.d.ts +10 -0
  238. package/dist-server/service/construction-checklist-template/construction-checklist-template-query.js +62 -0
  239. package/dist-server/service/construction-checklist-template/construction-checklist-template-query.js.map +1 -0
  240. package/dist-server/service/construction-checklist-template/construction-checklist-template-type.d.ts +11 -0
  241. package/dist-server/service/construction-checklist-template/construction-checklist-template-type.js +43 -0
  242. package/dist-server/service/construction-checklist-template/construction-checklist-template-type.js.map +1 -0
  243. package/dist-server/service/construction-checklist-template/construction-checklist-template.d.ts +18 -0
  244. package/dist-server/service/construction-checklist-template/construction-checklist-template.js +80 -0
  245. package/dist-server/service/construction-checklist-template/construction-checklist-template.js.map +1 -0
  246. package/dist-server/service/construction-checklist-template/index.d.ts +5 -0
  247. package/dist-server/service/construction-checklist-template/index.js +9 -0
  248. package/dist-server/service/construction-checklist-template/index.js.map +1 -0
  249. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.d.ts +6 -0
  250. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.js +60 -0
  251. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-mutation.js.map +1 -0
  252. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.d.ts +9 -0
  253. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.js +53 -0
  254. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-query.js.map +1 -0
  255. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.d.ts +17 -0
  256. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.js +67 -0
  257. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item-type.js.map +1 -0
  258. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.d.ts +24 -0
  259. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.js +113 -0
  260. package/dist-server/service/construction-checklist-template-item/construction-checklist-template-item.js.map +1 -0
  261. package/dist-server/service/construction-checklist-template-item/index.d.ts +5 -0
  262. package/dist-server/service/construction-checklist-template-item/index.js +9 -0
  263. package/dist-server/service/construction-checklist-template-item/index.js.map +1 -0
  264. package/dist-server/service/construction-checklist-template-item/spec-matching-service.d.ts +2 -0
  265. package/dist-server/service/construction-checklist-template-item/spec-matching-service.js +50 -0
  266. package/dist-server/service/construction-checklist-template-item/spec-matching-service.js.map +1 -0
  267. package/dist-server/service/index.d.ts +8 -1
  268. package/dist-server/service/index.js +38 -3
  269. package/dist-server/service/index.js.map +1 -1
  270. package/dist-server/service/issue/issue-mutation.js +5 -6
  271. package/dist-server/service/issue/issue-mutation.js.map +1 -1
  272. package/dist-server/service/issue/issue-query.d.ts +2 -2
  273. package/dist-server/service/issue/issue-query.js +5 -11
  274. package/dist-server/service/issue/issue-query.js.map +1 -1
  275. package/dist-server/service/project-checklist/index.d.ts +5 -0
  276. package/dist-server/service/project-checklist/index.js +9 -0
  277. package/dist-server/service/project-checklist/index.js.map +1 -0
  278. package/dist-server/service/project-checklist/project-checklist-mutation.d.ts +7 -0
  279. package/dist-server/service/project-checklist/project-checklist-mutation.js +109 -0
  280. package/dist-server/service/project-checklist/project-checklist-mutation.js.map +1 -0
  281. package/dist-server/service/project-checklist/project-checklist-query.d.ts +12 -0
  282. package/dist-server/service/project-checklist/project-checklist-query.js +76 -0
  283. package/dist-server/service/project-checklist/project-checklist-query.js.map +1 -0
  284. package/dist-server/service/project-checklist/project-checklist-type.d.ts +18 -0
  285. package/dist-server/service/project-checklist/project-checklist-type.js +69 -0
  286. package/dist-server/service/project-checklist/project-checklist-type.js.map +1 -0
  287. package/dist-server/service/project-checklist/project-checklist.d.ts +20 -0
  288. package/dist-server/service/project-checklist/project-checklist.js +90 -0
  289. package/dist-server/service/project-checklist/project-checklist.js.map +1 -0
  290. package/dist-server/service/project-checklist-item/index.d.ts +4 -0
  291. package/dist-server/service/project-checklist-item/index.js +9 -0
  292. package/dist-server/service/project-checklist-item/index.js.map +1 -0
  293. package/dist-server/service/project-checklist-item/project-checklist-item-mutation.d.ts +2 -0
  294. package/dist-server/service/project-checklist-item/project-checklist-item-mutation.js +13 -0
  295. package/dist-server/service/project-checklist-item/project-checklist-item-mutation.js.map +1 -0
  296. package/dist-server/service/project-checklist-item/project-checklist-item-query.d.ts +5 -0
  297. package/dist-server/service/project-checklist-item/project-checklist-item-query.js +34 -0
  298. package/dist-server/service/project-checklist-item/project-checklist-item-query.js.map +1 -0
  299. package/dist-server/service/project-checklist-item/project-checklist-item-type.d.ts +5 -0
  300. package/dist-server/service/project-checklist-item/project-checklist-item-type.js +21 -0
  301. package/dist-server/service/project-checklist-item/project-checklist-item-type.js.map +1 -0
  302. package/dist-server/service/project-checklist-item/project-checklist-item.d.ts +17 -0
  303. package/dist-server/service/project-checklist-item/project-checklist-item.js +82 -0
  304. package/dist-server/service/project-checklist-item/project-checklist-item.js.map +1 -0
  305. package/dist-server/service/project-report/project-report-mutation.js +5 -6
  306. package/dist-server/service/project-report/project-report-mutation.js.map +1 -1
  307. package/dist-server/service/project-report/project-report-query.d.ts +2 -2
  308. package/dist-server/service/project-report/project-report-query.js +5 -11
  309. package/dist-server/service/project-report/project-report-query.js.map +1 -1
  310. package/dist-server/service/project-report/project-report.d.ts +0 -2
  311. package/dist-server/service/project-report/project-report.js +0 -6
  312. package/dist-server/service/project-report/project-report.js.map +1 -1
  313. package/dist-server/service/supervisor/supervisor-mutation.js +5 -6
  314. package/dist-server/service/supervisor/supervisor-mutation.js.map +1 -1
  315. package/dist-server/service/supervisor/supervisor-query.d.ts +2 -2
  316. package/dist-server/service/supervisor/supervisor-query.js +5 -11
  317. package/dist-server/service/supervisor/supervisor-query.js.map +1 -1
  318. package/dist-server/tsconfig.tsbuildinfo +1 -1
  319. package/package.json +14 -13
  320. package/things-factory.config.js +9 -1
  321. package/dist-server/service/building-inspection/building-inspection-history.d.ts +0 -17
  322. package/dist-server/service/building-inspection/building-inspection-history.js +0 -86
  323. package/dist-server/service/building-inspection/building-inspection-history.js.map +0 -1
  324. package/dist-server/service/checklist/checklist-history.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"building-inspection-detail-ai-measurement.js","sourceRoot":"","sources":["../../../client/pages/building-inspection/building-inspection-detail-ai-measurement.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/input/ox-input-switch.js'\nimport '@operato/mini-map/ox-zoomable-image.js'\nimport '@material/web/progress/circular-progress.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, state, query } from 'lit/decorators.js'\nimport html2canvas from 'html2canvas'\n\nimport { PageView } from '@operato/shell'\nimport { CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\n\nimport './component/building-inspection-detail-header'\n\n@customElement('building-inspection-detail-ai-measurement')\nexport class BuildingInspectionAiMeasurement extends PageView {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: 75px 1fr;\n color: #4e5055;\n width: 100%;\n height: 100%;\n background-color: #f7f7f7;\n }\n\n div[body] {\n display: flex;\n justify-items: center;\n gap: var(--spacing-medium);\n margin: var(--spacing-medium);\n min-height: 0;\n }\n\n div[preview] {\n flex: 1;\n border: 2px solid #ddd;\n border-radius: 10px;\n\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 0;\n overflow: hidden;\n }\n\n div[preview] img {\n flex: 1;\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n }\n\n div[preview] video {\n flex: 1;\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n }\n\n div[preview] md-icon {\n --md-icon-size: 160px;\n }\n\n .loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n }\n\n .loading-text {\n font-size: 14px;\n color: #666;\n }\n\n .frame-container {\n width: 100%;\n height: 100%;\n max-height: 100%;\n min-height: 0;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n }\n\n .frames-header {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n font-size: 20px;\n font-weight: 700;\n color: #333;\n text-align: center;\n padding-block: 8px;\n }\n\n .frames-count {\n font-size: 16px;\n color: #777;\n font-weight: 600;\n }\n\n .frames-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n gap: 12px;\n }\n\n .frame-item {\n border: 1px solid #ddd;\n border-radius: 8px;\n overflow: hidden;\n background: #fff;\n cursor: pointer;\n transition:\n box-shadow 0.2s,\n transform 0.1s;\n }\n\n .frame-item:hover {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n transform: translateY(-1px);\n }\n\n .frame-item img {\n display: block;\n width: 100%;\n height: 120px;\n object-fit: cover;\n }\n\n .image-wrapper {\n flex: 1;\n display: flex;\n position: relative;\n align-content: center;\n text-align: center;\n }\n\n .point-marker {\n position: absolute;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n border: 2px solid #fff;\n transform: translate(-50%, -50%);\n pointer-events: none;\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.25);\n }\n\n .point-1 {\n background-color: #e53935;\n }\n\n .point-2 {\n background-color: #1e88e5;\n }\n\n .line-overlay {\n position: absolute;\n pointer-events: none;\n background-color: #ff9800;\n transform-origin: left center;\n }\n\n .distance-label {\n position: absolute;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n font-size: 14px;\n padding: 2px 6px;\n border-radius: 4px;\n transform: translate(-50%, -120%);\n pointer-events: none;\n white-space: nowrap;\n }\n\n div[controls] {\n width: 240px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n }\n\n div[action-buttons] {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n gap: 15px;\n }\n\n .switch-container {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 24px;\n font-weight: bold;\n }\n\n ox-input-switch {\n --ox-simple-switch-fullwidth: 68px;\n --ox-simple-switch-fullheight: 34px;\n --ox-simple-switch-thumbnail-size: 34px;\n }\n\n .camera-controls {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n }\n\n .camera-shutter {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n position: relative;\n }\n\n .controls-title {\n font-size: 18px;\n font-weight: 700;\n color: #333;\n margin-bottom: 8px;\n text-align: center;\n }\n\n .camera-shutter md-icon {\n --md-icon-size: 100px;\n }\n\n .camera-shutter input {\n opacity: 0;\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n cursor: pointer;\n }\n\n button {\n padding: 10px 20px;\n font-size: 16px;\n border-radius: 5px;\n border: none;\n cursor: pointer;\n }\n\n button.save {\n background-color: #4caf50;\n color: white;\n\n &:disabled {\n background-color: #ccc;\n cursor: default;\n }\n }\n\n button.retry {\n background-color: #f0ad4e;\n color: white;\n }\n\n button.photo {\n background-color: #1e88e5;\n color: white;\n\n &:disabled {\n background-color: #ccc;\n cursor: default;\n }\n }\n\n button.album-button {\n background-color: #9c27b0;\n color: white;\n font-size: 14px;\n padding: 8px 16px;\n border-radius: 5px;\n border: none;\n cursor: pointer;\n\n &:hover {\n background-color: #7b1fa2;\n }\n\n &:disabled {\n background-color: #ccc;\n cursor: default;\n }\n }\n\n .loading-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n z-index: 2000;\n }\n\n .loading-overlay .loading-container {\n background: white;\n padding: 32px;\n border-radius: 12px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);\n }\n `\n ]\n\n private KEYPOINT_RULER_API_BASE_URL: string = 'https://hatiolab-korea-uni.ettisoft.com'\n\n @state() project: any = {}\n @state() buildingInspection: any = {}\n @state() buildingInspectionId: string = ''\n @state() capturedVideoUrl: string | null = null\n @state() videoFile: File | null = null\n @state() frame: any | null = null\n @state() analyzing: boolean = false\n @state() selectedPoints: { x1: number | null; y1: number | null; x2: number | null; y2: number | null } = {\n x1: null,\n y1: null,\n x2: null,\n y2: null\n }\n @state() frameNaturalWidth: number = 0\n @state() frameNaturalHeight: number = 0\n @state() displayedImageRect: { width: number; height: number; left: number; top: number } | null = null\n @state() distance: number | null = null\n @state() unit: string | null = null\n @state() analyzingError: string | null = null\n\n @query('img#frameImage') private frameImageEl!: HTMLImageElement\n @query('div.image-wrapper') private imageWrapperEl!: HTMLDivElement\n @query('#cameraInput') private cameraInputEl!: HTMLInputElement\n @query('#albumInput') private albumInputEl!: HTMLInputElement\n\n get context() {\n return {\n title: '검측 관리 상세 - AI 거리 측정'\n }\n }\n\n render() {\n return html`\n <building-inspection-detail-header\n .buildingInspectionId=${this.buildingInspection?.id}\n .buildingLevelId=${this.buildingInspection?.buildingLevel?.id}\n .projectName=${this.project.name}\n .buildingName=${this.buildingInspection?.buildingLevel?.building?.name}\n .buildingLevelFloor=${this.buildingInspection?.buildingLevel?.floor}\n .projectId=${this.project.id}\n ></building-inspection-detail-header>\n\n <div body>\n <!-- Preview selected or recorded video -->\n <div preview>\n ${this.frame?.download_url\n ? html`\n <div class=\"image-wrapper\" @click=${this._onImageClick}>\n <img\n id=\"frameImage\"\n src=\"${this.KEYPOINT_RULER_API_BASE_URL + this.frame?.download_url}\"\n crossorigin=\"anonymous\"\n alt=\"frame\"\n loading=\"eager\"\n @load=${this._onImageLoad}\n />\n ${this._renderMarkers()}\n </div>\n `\n : // 동영상 선택 후 동영상 프리뷰\n this.capturedVideoUrl\n ? html`<video src=${this.capturedVideoUrl} controls playsinline></video>`\n : // 초기 상태, 동영상 선택 전\n html`<md-icon>videocam</md-icon>`}\n </div>\n\n <div controls>\n <span class=\"controls-title\">동영상 촬영</span>\n\n <!-- 가운데 버튼 -->\n ${this.frame?.download_url && this._hasTwoPoints() && this.distance && this.unit\n ? // 거리 측정 완료 시, 사진 저장 버튼 표시\n html`<button class=\"save\" ?disabled=${this.analyzing} @click=${this._savePhoto}>사진 저장</button>`\n : // 거리 측정 완료 전, 동영상 촬영 버튼 표시\n html`<div class=\"camera-controls\">\n <div class=\"camera-shutter\">\n <md-icon>camera</md-icon>\n <input id=\"cameraInput\" type=\"file\" accept=\"video/*\" capture=\"environment\" @change=\"${this._onVideoSelected}\" />\n </div>\n <button class=\"album-button\" @click=\"${this._onAlbumButtonClick}\">앨범 선택</button>\n <input id=\"albumInput\" type=\"file\" accept=\"video/*\" @change=\"${this._onVideoSelected}\" style=\"display: none;\" />\n </div>`}\n\n <!-- Action buttons -->\n <div action-buttons>\n ${this.frame\n ? html`\n <button class=\"photo\" ?disabled=${this.analyzing || !this._hasTwoPoints()} @click=${this._onAnalyzePhoto}>\n 사진 분석\n </button>\n `\n : html`\n <button class=\"save\" ?disabled=${this.analyzing || !this.capturedVideoUrl} @click=${this._onAnalyzeVideo}>\n 동영상 분석\n </button>\n `}\n <button class=\"retry\" @click=${this._onRetry}>초기화</button>\n </div>\n </div>\n </div>\n\n <!-- 전체 화면을 덮는 로딩 오버레이 -->\n ${this.analyzing\n ? html`<div class=\"loading-overlay\">\n <div class=\"loading-container\">\n <md-circular-progress indeterminate></md-circular-progress>\n <div class=\"loading-text\">분석 중...</div>\n </div>\n </div>`\n : ''}\n `\n }\n\n protected async updated(changes: PropertyValues): Promise<void> {}\n\n async pageUpdated(changes: any, lifecycle: PageLifecycle) {\n if (this.active) {\n this._onRetry()\n this.buildingInspectionId = lifecycle.resourceId || ''\n await this.initBuildingInspection(this.buildingInspectionId)\n }\n }\n\n async initBuildingInspection(buildingInspectionId: string = '') {\n const response = await client.query({\n query: gql`\n query BuildingInspection($buildingInspectionId: String!) {\n buildingInspection(id: $buildingInspectionId) {\n id\n status\n requestDate\n drawingMarker\n checklist {\n id\n location\n inspectionDrawingType\n }\n buildingLevel {\n id\n floor\n mainDrawing {\n id\n name\n fullpath\n }\n mainDrawingImage\n building {\n id\n name\n buildingComplex {\n id\n }\n }\n }\n }\n }\n `,\n variables: {\n buildingInspectionId\n }\n })\n\n if (response.errors) return\n\n this.buildingInspection = response.data.buildingInspection\n\n await this._getProjectByBuildingComplexId(this.buildingInspection?.buildingLevel?.building?.buildingComplex?.id)\n }\n\n private async _getProjectByBuildingComplexId(buildingComplexId) {\n const response = await client.query({\n query: gql`\n query ProjectByBuildingComplexId($buildingComplexId: String!) {\n project: projectByBuildingComplexId(buildingComplexId: $buildingComplexId) {\n id\n name\n }\n }\n `,\n variables: {\n buildingComplexId\n }\n })\n\n if (response.errors) return\n\n this.project = response.data.project\n }\n\n private _onVideoSelected(event: Event) {\n const input = event.target as HTMLInputElement\n const file = input?.files?.[0]\n if (!file) return\n\n // Only allow video files\n if (!file.type.startsWith('video/')) {\n console.warn('선택된 파일이 동영상이 아닙니다.')\n return\n }\n\n // Revoke old object URL if exists\n if (this.capturedVideoUrl) {\n URL.revokeObjectURL(this.capturedVideoUrl)\n }\n\n this.videoFile = file\n this.capturedVideoUrl = URL.createObjectURL(file)\n }\n\n private _onAlbumButtonClick() {\n // 앨범 선택을 위해 숨겨진 input을 클릭\n this.albumInputEl?.click()\n }\n\n private async _onAnalyzeVideo() {\n if (!this.videoFile) {\n console.warn('선택된 동영상이 없습니다.')\n return\n }\n\n try {\n this.analyzing = true\n const form = new FormData()\n form.append('files', this.videoFile, this.videoFile.name)\n const response = await fetch(`${this.KEYPOINT_RULER_API_BASE_URL}/api/run/keypoint-ruler`, {\n method: 'POST',\n headers: { Authorization: `Basic ${btoa('admin:admin1234')}` },\n body: form\n })\n\n const data = await response.json()\n\n this.frame = {\n file_id: data?.result?.output_files[0]?.file_id,\n download_url: data?.result?.output_files[0]?.download_url,\n file_path: data?.result?.frames[0]?.file_path,\n calibration: data?.result?.calibration\n }\n } catch (error) {\n console.error('동영상 업로드 실패:', error)\n } finally {\n this.analyzing = false\n }\n }\n\n private _onRetry() {\n // Clear current selection and reopen camera\n if (this.capturedVideoUrl) {\n URL.revokeObjectURL(this.capturedVideoUrl)\n }\n this.capturedVideoUrl = null\n this.videoFile = null\n this.frame = null\n this.selectedPoints = { x1: null, y1: null, x2: null, y2: null }\n this.displayedImageRect = null\n this.frameNaturalWidth = 0\n this.frameNaturalHeight = 0\n this.cameraInputEl.value = ''\n this.albumInputEl.value = ''\n this.distance = null\n this.unit = null\n this.analyzingError = null\n }\n\n private _onImageLoad = () => {\n if (!this.frameImageEl || !this.imageWrapperEl) return\n const img = this.frameImageEl\n const wrapperRect = this.imageWrapperEl.getBoundingClientRect()\n const imgRect = img.getBoundingClientRect()\n this.frameNaturalWidth = img.naturalWidth\n this.frameNaturalHeight = img.naturalHeight\n this.displayedImageRect = {\n width: imgRect.width,\n height: imgRect.height,\n left: imgRect.left - wrapperRect.left,\n top: imgRect.top - wrapperRect.top\n }\n }\n\n private _onImageClick = (event: MouseEvent) => {\n if (!this.frameImageEl || !this.imageWrapperEl) return\n const imgRect = this.frameImageEl.getBoundingClientRect()\n const wrapperRect = this.imageWrapperEl.getBoundingClientRect()\n const clientX = event.clientX\n const clientY = event.clientY\n\n // Ignore clicks outside the displayed image area\n if (clientX < imgRect.left || clientX > imgRect.right || clientY < imgRect.top || clientY > imgRect.bottom) {\n return\n }\n\n // 새로운 마크 입력 시 이전 거리/단위 결과 초기화\n this.distance = null\n this.unit = null\n this.analyzingError = null\n\n const relativeX = clientX - imgRect.left\n const relativeY = clientY - imgRect.top\n\n const xOnNatural = Math.round((relativeX * this.frameNaturalWidth) / imgRect.width)\n const yOnNatural = Math.round((relativeY * this.frameNaturalHeight) / imgRect.height)\n\n if (this.selectedPoints.x1 === null || this.selectedPoints.y1 === null) {\n this.selectedPoints = { ...this.selectedPoints, x1: xOnNatural, y1: yOnNatural }\n } else if (this.selectedPoints.x2 === null || this.selectedPoints.y2 === null) {\n this.selectedPoints = { ...this.selectedPoints, x2: xOnNatural, y2: yOnNatural }\n } else {\n // 세 번째 클릭부터는 초기화 후 첫 점으로 설정\n this.selectedPoints = { x1: xOnNatural, y1: yOnNatural, x2: null, y2: null }\n }\n\n // Update displayed rect cache (in case layout changed)\n this.displayedImageRect = {\n width: imgRect.width,\n height: imgRect.height,\n left: imgRect.left - wrapperRect.left,\n top: imgRect.top - wrapperRect.top\n }\n }\n\n private _hasTwoPoints(): boolean {\n const { x1, y1, x2, y2 } = this.selectedPoints\n return x1 !== null && y1 !== null && x2 !== null && y2 !== null\n }\n\n private _renderMarkers() {\n if (!this.displayedImageRect) return html``\n const { left, top, width, height } = this.displayedImageRect\n const { x1, y1, x2, y2 } = this.selectedPoints\n const toDisplay = (x: number, y: number) => {\n const dx = left + (x * width) / (this.frameNaturalWidth || 1)\n const dy = top + (y * height) / (this.frameNaturalHeight || 1)\n return { dx, dy }\n }\n\n return html`\n <!-- 첫 번째 점 -->\n ${x1 !== null && y1 !== null\n ? (() => {\n const p = toDisplay(x1, y1)\n return html`<div class=\"point-marker point-1\" style=\"left:${p.dx}px; top:${p.dy}px;\"></div>`\n })()\n : ''}\n <!-- 두 번째 점 -->\n ${x2 !== null && y2 !== null\n ? (() => {\n const p = toDisplay(x2, y2)\n return html`<div class=\"point-marker point-2\" style=\"left:${p.dx}px; top:${p.dy}px;\"></div>`\n })()\n : ''}\n <!-- 두점 사이 선 -->\n ${this._hasTwoPoints()\n ? (() => {\n const p1 = toDisplay(x1 as number, y1 as number)\n const p2 = toDisplay(x2 as number, y2 as number)\n const cx = (p1.dx + p2.dx) / 2\n const cy = (p1.dy + p2.dy) / 2\n\n // 선의 길이와 각도 계산\n const length = Math.sqrt(Math.pow(p2.dx - p1.dx, 2) + Math.pow(p2.dy - p1.dy, 2))\n const angle = Math.atan2(p2.dy - p1.dy, p2.dx - p1.dx) * (180 / Math.PI)\n\n return html`\n <!-- DIV로 그린 선 -->\n <div\n class=\"line-overlay\"\n style=\"\n left: ${p1.dx}px; \n top: ${p1.dy}px; \n width: ${length}px; \n height: 3px;\n transform: rotate(${angle}deg);\n \"\n ></div>\n <!-- 거리 라벨 -->\n ${this.analyzingError\n ? html`<div class=\"distance-label\" style=\"left:${cx}px; top:${cy}px;\">${this.analyzingError}</div>`\n : this.distance && this.unit\n ? html`<div class=\"distance-label\" style=\"left:${cx}px; top:${cy}px;\">${this.distance} ${this.unit}</div>`\n : ''}\n `\n })()\n : ''}\n `\n }\n\n private async _onAnalyzePhoto() {\n if (!this.frame) {\n console.warn('분석할 사진이 없습니다.')\n return\n }\n if (!this._hasTwoPoints()) {\n console.warn('두 점을 먼저 선택해 주세요.')\n return\n }\n\n try {\n this.analyzing = true\n const payload = {\n x1: this.selectedPoints.x1,\n y1: this.selectedPoints.y1,\n x2: this.selectedPoints.x2,\n y2: this.selectedPoints.y2,\n file_path: this.frame.file_path,\n calibration: this.frame.calibration\n }\n\n const form = new FormData()\n form.append('input', JSON.stringify(payload))\n const response = await fetch(`${this.KEYPOINT_RULER_API_BASE_URL}/api/run/keypoint-ruler`, {\n method: 'POST',\n headers: { Authorization: `Basic ${btoa('admin:admin1234')}` },\n body: form\n })\n\n const result = await response.json()\n const { distance, unit, error } = result.result || {}\n this.distance = distance\n this.unit = unit\n this.analyzingError = error\n } catch (error) {\n console.error('사진 분석 실패:', error)\n } finally {\n this.analyzing = false\n }\n }\n\n async _savePhoto() {\n if (!this.frame || !this._hasTwoPoints() || this.distance === null || !this.unit) {\n notify({ message: '분석 완료 후 저장할 수 있습니다.', level: 'warn' })\n return\n }\n\n const checklistId = this.buildingInspection?.checklist?.id\n let file: File\n try {\n file = await this.getCurrentImage()\n } catch (e) {\n notify({ message: '이미지 합성에 실패했습니다.', level: 'error' })\n return\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($attachments: [NewAttachment!]!) {\n createAttachments(attachments: $attachments) {\n id\n }\n }\n `,\n variables: {\n attachments: [{ file, refBy: checklistId, refType: 'Checklist', description: this.buildingInspection?.status }]\n },\n context: { hasUpload: true }\n })\n\n if (!response.errors) {\n notify({ message: '사진 대지를 저장하였습니다.', level: 'info' })\n return\n }\n\n return response.data.createAttachments\n }\n\n async getCurrentImage(): Promise<File> {\n if (!this.imageWrapperEl) {\n throw new Error('이미지 영역을 찾을 수 없습니다.')\n }\n\n try {\n // html2canvas로 .image-wrapper 영역 캡처\n const canvas = await html2canvas(this.imageWrapperEl, {\n backgroundColor: null, // 투명 배경\n scale: 1, // 1:1 스케일\n useCORS: true, // CORS 이미지 허용\n allowTaint: false, // 보안상 false\n logging: false // 로그 비활성화\n })\n\n // 캔버스를 Blob으로 변환\n const blob: Blob = await new Promise(resolve => {\n canvas.toBlob(resolve as any, 'image/png', 1.0)\n })\n\n // File 객체로 변환하여 반환\n return new File([blob!], `inspection_${Date.now()}.png`, {\n type: 'image/png'\n })\n } catch (error) {\n console.error('html2canvas 캡처 실패:', error)\n throw new Error('화면 캡처에 실패했습니다.')\n }\n }\n}\n"]}
@@ -1,6 +1,5 @@
1
1
  import '@material/web/icon/icon.js';
2
- import '@operato/input/ox-input-switch.js';
3
- import '@operato/mini-map/ox-zoomable-image.js';
2
+ import '@material/web/progress/circular-progress.js';
4
3
  import { PropertyValues } from 'lit';
5
4
  import { PageView } from '@operato/shell';
6
5
  import { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view';
@@ -10,8 +9,10 @@ export declare class BuildingInspectionCamera extends PageView {
10
9
  project: any;
11
10
  buildingInspection: any;
12
11
  buildingInspectionId: string;
13
- capturedImage: string | null;
14
- originImage: string | null;
12
+ capturedImageUrl: string | null;
13
+ imageFile: File | null;
14
+ isSaved: boolean;
15
+ private imageInputEl;
15
16
  get context(): {
16
17
  title: string;
17
18
  };
@@ -20,6 +21,7 @@ export declare class BuildingInspectionCamera extends PageView {
20
21
  pageUpdated(changes: any, lifecycle: PageLifecycle): Promise<void>;
21
22
  initBuildingInspection(buildingInspectionId?: string): Promise<void>;
22
23
  private _getProjectByBuildingComplexId;
23
- private toggleAI;
24
- private handleImageCapture;
24
+ private _onImageSelected;
25
+ private _onRetry;
26
+ _savePhoto(): Promise<any>;
25
27
  }
@@ -1,13 +1,13 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import '@material/web/icon/icon.js';
3
- import '@operato/input/ox-input-switch.js';
4
- import '@operato/mini-map/ox-zoomable-image.js';
3
+ import '@material/web/progress/circular-progress.js';
5
4
  import gql from 'graphql-tag';
6
5
  import { css, html } from 'lit';
7
- import { customElement, state } from 'lit/decorators.js';
6
+ import { customElement, state, query } from 'lit/decorators.js';
8
7
  import { PageView } from '@operato/shell';
9
8
  import { CommonGristStyles, ScrollbarStyles } from '@operato/styles';
10
9
  import { client } from '@operato/graphql';
10
+ import { notify } from '@operato/layout';
11
11
  import './component/building-inspection-detail-header';
12
12
  let BuildingInspectionCamera = class BuildingInspectionCamera extends PageView {
13
13
  constructor() {
@@ -15,8 +15,9 @@ let BuildingInspectionCamera = class BuildingInspectionCamera extends PageView {
15
15
  this.project = {};
16
16
  this.buildingInspection = {};
17
17
  this.buildingInspectionId = '';
18
- this.capturedImage = null; // For storing the captured image
19
- this.originImage = null;
18
+ this.capturedImageUrl = null;
19
+ this.imageFile = null;
20
+ this.isSaved = false;
20
21
  }
21
22
  get context() {
22
23
  return {
@@ -32,34 +33,30 @@ let BuildingInspectionCamera = class BuildingInspectionCamera extends PageView {
32
33
  .projectName=${this.project.name}
33
34
  .buildingName=${(_f = (_e = (_d = this.buildingInspection) === null || _d === void 0 ? void 0 : _d.buildingLevel) === null || _e === void 0 ? void 0 : _e.building) === null || _f === void 0 ? void 0 : _f.name}
34
35
  .buildingLevelFloor=${(_h = (_g = this.buildingInspection) === null || _g === void 0 ? void 0 : _g.buildingLevel) === null || _h === void 0 ? void 0 : _h.floor}
36
+ .projectId=${this.project.id}
35
37
  ></building-inspection-detail-header>
36
38
 
37
39
  <div body>
38
- <!-- Display the captured image if available -->
39
40
  <div preview>
40
- ${this.capturedImage
41
- ? html `<ox-zoomable-image src=${this.capturedImage} restrict-boundary></ox-zoomable-image>`
42
- : html `<md-icon>photo_camera</md-icon>`}
41
+ <div class="image-wrapper">
42
+ ${this.capturedImageUrl
43
+ ? html `<img id="imageImage" src="${this.capturedImageUrl}" alt="image" />`
44
+ : html `<md-icon>add_a_photo</md-icon>`}
45
+ </div>
43
46
  </div>
44
47
 
45
48
  <div controls>
46
- <!-- AI toggle switch -->
47
- <div class="switch-container">
48
- <label>AI 기능</label>
49
- <ox-input-switch type="checkbox" @change=${this.toggleAI} round></ox-input-switch>
50
- </div>
49
+ <span class="controls-title">사진 촬영</span>
51
50
 
52
- <!-- Camera shutter button -->
53
51
  <div class="camera-shutter">
54
52
  <md-icon>camera</md-icon>
55
- <input type="file" accept="image/*" capture @change="${this.handleImageCapture}" />
53
+ <input id="imageInput" type="file" accept="image/*" @change="${this._onImageSelected}" />
56
54
  </div>
57
55
 
58
56
  <!-- Action buttons -->
59
- <div class="action-buttons">
60
- <button class="save">저장</button>
61
- <button class="retry">재촬영</button>
62
- <button class="cancel" @click=${() => (this.capturedImage = this.originImage)}>취소</button>
57
+ <div action-buttons>
58
+ <button class="save" ?disabled=${!this.imageFile || this.isSaved} @click=${this._savePhoto}>사진 저장</button>
59
+ <button class="retry" @click=${this._onRetry}>초기화</button>
63
60
  </div>
64
61
  </div>
65
62
  </div>
@@ -68,6 +65,7 @@ let BuildingInspectionCamera = class BuildingInspectionCamera extends PageView {
68
65
  async updated(changes) { }
69
66
  async pageUpdated(changes, lifecycle) {
70
67
  if (this.active) {
68
+ this._onRetry();
71
69
  this.buildingInspectionId = lifecycle.resourceId || '';
72
70
  await this.initBuildingInspection(this.buildingInspectionId);
73
71
  }
@@ -81,20 +79,12 @@ let BuildingInspectionCamera = class BuildingInspectionCamera extends PageView {
81
79
  id
82
80
  status
83
81
  requestDate
84
- drawingMarker
85
82
  checklist {
86
- location
87
- inspectionDrawingType
83
+ id
88
84
  }
89
85
  buildingLevel {
90
86
  id
91
87
  floor
92
- mainDrawing {
93
- id
94
- name
95
- fullpath
96
- }
97
- mainDrawingImage
98
88
  building {
99
89
  id
100
90
  name
@@ -133,21 +123,62 @@ let BuildingInspectionCamera = class BuildingInspectionCamera extends PageView {
133
123
  return;
134
124
  this.project = response.data.project;
135
125
  }
136
- toggleAI(e) {
137
- const isChecked = e.target.checked;
138
- console.log(`AI 기능: ${isChecked ? 'ON' : 'OFF'}`);
139
- // Implement additional AI functionality toggling if needed
140
- }
141
- handleImageCapture(event) {
126
+ _onImageSelected(event) {
127
+ var _a;
142
128
  const input = event.target;
143
- if (input.files && input.files[0]) {
144
- const reader = new FileReader();
145
- reader.onload = e => {
146
- var _a;
147
- this.capturedImage = (_a = e.target) === null || _a === void 0 ? void 0 : _a.result;
148
- };
149
- reader.readAsDataURL(input.files[0]);
129
+ const file = (_a = input === null || input === void 0 ? void 0 : input.files) === null || _a === void 0 ? void 0 : _a[0];
130
+ if (!file)
131
+ return;
132
+ // Only allow video files
133
+ if (!file.type.startsWith('image/')) {
134
+ console.warn('선택된 파일이 이미지가 아닙니다.');
135
+ return;
136
+ }
137
+ // Revoke old object URL if exists
138
+ if (this.capturedImageUrl) {
139
+ URL.revokeObjectURL(this.capturedImageUrl);
150
140
  }
141
+ this.imageFile = file;
142
+ this.capturedImageUrl = URL.createObjectURL(file);
143
+ this.isSaved = false; // 새 이미지 선택 시 저장 상태 초기화
144
+ }
145
+ _onRetry() {
146
+ // Clear current selection and reopen camera
147
+ if (this.capturedImageUrl) {
148
+ URL.revokeObjectURL(this.capturedImageUrl);
149
+ }
150
+ this.capturedImageUrl = null;
151
+ this.imageFile = null;
152
+ this.isSaved = false; // 초기화 시 저장 상태도 리셋
153
+ this.imageInputEl.value = '';
154
+ }
155
+ async _savePhoto() {
156
+ var _a, _b, _c;
157
+ if (!this.imageFile) {
158
+ notify({ message: '사진을 선택한 후 저장할 수 있습니다.', level: 'warn' });
159
+ return;
160
+ }
161
+ const checklistId = (_b = (_a = this.buildingInspection) === null || _a === void 0 ? void 0 : _a.checklist) === null || _b === void 0 ? void 0 : _b.id;
162
+ const file = this.imageFile;
163
+ const response = await client.mutate({
164
+ mutation: gql `
165
+ mutation ($attachments: [NewAttachment!]!) {
166
+ createAttachments(attachments: $attachments) {
167
+ id
168
+ }
169
+ }
170
+ `,
171
+ variables: {
172
+ attachments: [{ file, refBy: checklistId, refType: 'Checklist', description: (_c = this.buildingInspection) === null || _c === void 0 ? void 0 : _c.status }]
173
+ },
174
+ context: { hasUpload: true }
175
+ });
176
+ if (!response.errors) {
177
+ notify({ message: '사진 대지를 저장하였습니다.', level: 'info' });
178
+ this.isSaved = true; // 저장 성공 시 상태 업데이트
179
+ return;
180
+ }
181
+ return response.data.createAttachments;
151
182
  }
152
183
  };
153
184
  BuildingInspectionCamera.styles = [
@@ -156,11 +187,11 @@ BuildingInspectionCamera.styles = [
156
187
  css `
157
188
  :host {
158
189
  display: grid;
159
- grid-template-rows: 75px auto;
190
+ grid-template-rows: 75px 1fr;
160
191
  color: #4e5055;
161
192
  width: 100%;
193
+ height: 100%;
162
194
  background-color: #f7f7f7;
163
- overflow-y: auto;
164
195
  }
165
196
 
166
197
  div[body] {
@@ -168,6 +199,7 @@ BuildingInspectionCamera.styles = [
168
199
  justify-items: center;
169
200
  gap: var(--spacing-medium);
170
201
  margin: var(--spacing-medium);
202
+ min-height: 0;
171
203
  }
172
204
 
173
205
  div[preview] {
@@ -178,6 +210,8 @@ BuildingInspectionCamera.styles = [
178
210
  display: flex;
179
211
  justify-content: center;
180
212
  align-items: center;
213
+ min-height: 0;
214
+ overflow: hidden;
181
215
  }
182
216
 
183
217
  div[preview] img {
@@ -186,10 +220,24 @@ BuildingInspectionCamera.styles = [
186
220
  object-fit: contain;
187
221
  }
188
222
 
223
+ div[preview] video {
224
+ max-width: 100%;
225
+ max-height: 100%;
226
+ object-fit: contain;
227
+ }
228
+
189
229
  div[preview] md-icon {
190
230
  --md-icon-size: 160px;
191
231
  }
192
232
 
233
+ .image-wrapper {
234
+ position: relative;
235
+ width: 100%;
236
+ height: 100%;
237
+ align-content: center;
238
+ text-align: center;
239
+ }
240
+
193
241
  div[controls] {
194
242
  width: 240px;
195
243
  display: flex;
@@ -202,20 +250,7 @@ BuildingInspectionCamera.styles = [
202
250
  display: flex;
203
251
  flex-direction: row;
204
252
  justify-content: space-between;
205
- }
206
-
207
- .switch-container {
208
- display: flex;
209
- align-items: center;
210
- gap: 10px;
211
- font-size: 24px;
212
- font-weight: bold;
213
- }
214
-
215
- ox-input-switch {
216
- --ox-simple-switch-fullwidth: 68px;
217
- --ox-simple-switch-fullheight: 34px;
218
- --ox-simple-switch-thumbnail-size: 34px;
253
+ gap: 15px;
219
254
  }
220
255
 
221
256
  .camera-shutter {
@@ -226,6 +261,14 @@ BuildingInspectionCamera.styles = [
226
261
  position: relative;
227
262
  }
228
263
 
264
+ .controls-title {
265
+ font-size: 18px;
266
+ font-weight: 700;
267
+ color: #333;
268
+ margin-bottom: 8px;
269
+ text-align: center;
270
+ }
271
+
229
272
  .camera-shutter md-icon {
230
273
  --md-icon-size: 100px;
231
274
  }
@@ -251,17 +294,17 @@ BuildingInspectionCamera.styles = [
251
294
  button.save {
252
295
  background-color: #4caf50;
253
296
  color: white;
297
+
298
+ &:disabled {
299
+ background-color: #ccc;
300
+ cursor: default;
301
+ }
254
302
  }
255
303
 
256
304
  button.retry {
257
305
  background-color: #f0ad4e;
258
306
  color: white;
259
307
  }
260
-
261
- button.cancel {
262
- background-color: #d9534f;
263
- color: white;
264
- }
265
308
  `
266
309
  ];
267
310
  __decorate([
@@ -279,11 +322,19 @@ __decorate([
279
322
  __decorate([
280
323
  state(),
281
324
  __metadata("design:type", Object)
282
- ], BuildingInspectionCamera.prototype, "capturedImage", void 0);
325
+ ], BuildingInspectionCamera.prototype, "capturedImageUrl", void 0);
283
326
  __decorate([
284
327
  state(),
285
328
  __metadata("design:type", Object)
286
- ], BuildingInspectionCamera.prototype, "originImage", void 0);
329
+ ], BuildingInspectionCamera.prototype, "imageFile", void 0);
330
+ __decorate([
331
+ state(),
332
+ __metadata("design:type", Boolean)
333
+ ], BuildingInspectionCamera.prototype, "isSaved", void 0);
334
+ __decorate([
335
+ query('#imageInput'),
336
+ __metadata("design:type", HTMLInputElement)
337
+ ], BuildingInspectionCamera.prototype, "imageInputEl", void 0);
287
338
  BuildingInspectionCamera = __decorate([
288
339
  customElement('building-inspection-detail-camera')
289
340
  ], BuildingInspectionCamera);
@@ -1 +1 @@
1
- {"version":3,"file":"building-inspection-detail-camera.js","sourceRoot":"","sources":["../../../client/pages/building-inspection/building-inspection-detail-camera.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/input/ox-input-switch.js'\nimport '@operato/mini-map/ox-zoomable-image.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\n\nimport { PageView } from '@operato/shell'\nimport { CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view'\nimport { client } from '@operato/graphql'\n\nimport './component/building-inspection-detail-header'\n\n@customElement('building-inspection-detail-camera')\nexport class BuildingInspectionCamera extends PageView {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: 75px auto;\n color: #4e5055;\n width: 100%;\n background-color: #f7f7f7;\n overflow-y: auto;\n }\n\n div[body] {\n display: flex;\n justify-items: center;\n gap: var(--spacing-medium);\n margin: var(--spacing-medium);\n }\n\n div[preview] {\n flex: 1;\n border: 2px solid #ddd;\n border-radius: 10px;\n\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n div[preview] img {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n }\n\n div[preview] md-icon {\n --md-icon-size: 160px;\n }\n\n div[controls] {\n width: 240px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n }\n\n div[action-buttons] {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n }\n\n .switch-container {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 24px;\n font-weight: bold;\n }\n\n ox-input-switch {\n --ox-simple-switch-fullwidth: 68px;\n --ox-simple-switch-fullheight: 34px;\n --ox-simple-switch-thumbnail-size: 34px;\n }\n\n .camera-shutter {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n position: relative;\n }\n\n .camera-shutter md-icon {\n --md-icon-size: 100px;\n }\n\n .camera-shutter input {\n opacity: 0;\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n cursor: pointer;\n }\n\n button {\n padding: 10px 20px;\n font-size: 16px;\n border-radius: 5px;\n border: none;\n cursor: pointer;\n }\n\n button.save {\n background-color: #4caf50;\n color: white;\n }\n\n button.retry {\n background-color: #f0ad4e;\n color: white;\n }\n\n button.cancel {\n background-color: #d9534f;\n color: white;\n }\n `\n ]\n\n @state() project: any = {}\n @state() buildingInspection: any = {}\n @state() buildingInspectionId: string = ''\n @state() capturedImage: string | null = null // For storing the captured image\n @state() originImage: string | null = null\n\n get context() {\n return {\n title: '검측 관리 상세 - 사진 촬영'\n }\n }\n\n render() {\n return html`\n <building-inspection-detail-header\n .buildingInspectionId=${this.buildingInspection?.id}\n .buildingLevelId=${this.buildingInspection?.buildingLevel?.id}\n .projectName=${this.project.name}\n .buildingName=${this.buildingInspection?.buildingLevel?.building?.name}\n .buildingLevelFloor=${this.buildingInspection?.buildingLevel?.floor}\n ></building-inspection-detail-header>\n\n <div body>\n <!-- Display the captured image if available -->\n <div preview>\n ${this.capturedImage\n ? html`<ox-zoomable-image src=${this.capturedImage} restrict-boundary></ox-zoomable-image>`\n : html`<md-icon>photo_camera</md-icon>`}\n </div>\n\n <div controls>\n <!-- AI toggle switch -->\n <div class=\"switch-container\">\n <label>AI 기능</label>\n <ox-input-switch type=\"checkbox\" @change=${this.toggleAI} round></ox-input-switch>\n </div>\n\n <!-- Camera shutter button -->\n <div class=\"camera-shutter\">\n <md-icon>camera</md-icon>\n <input type=\"file\" accept=\"image/*\" capture @change=\"${this.handleImageCapture}\" />\n </div>\n\n <!-- Action buttons -->\n <div class=\"action-buttons\">\n <button class=\"save\">저장</button>\n <button class=\"retry\">재촬영</button>\n <button class=\"cancel\" @click=${() => (this.capturedImage = this.originImage)}>취소</button>\n </div>\n </div>\n </div>\n `\n }\n\n protected async updated(changes: PropertyValues): Promise<void> {}\n\n async pageUpdated(changes: any, lifecycle: PageLifecycle) {\n if (this.active) {\n this.buildingInspectionId = lifecycle.resourceId || ''\n await this.initBuildingInspection(this.buildingInspectionId)\n }\n }\n\n async initBuildingInspection(buildingInspectionId: string = '') {\n const response = await client.query({\n query: gql`\n query BuildingInspection($buildingInspectionId: String!) {\n buildingInspection(id: $buildingInspectionId) {\n id\n status\n requestDate\n drawingMarker\n checklist {\n location\n inspectionDrawingType\n }\n buildingLevel {\n id\n floor\n mainDrawing {\n id\n name\n fullpath\n }\n mainDrawingImage\n building {\n id\n name\n buildingComplex {\n id\n }\n }\n }\n }\n }\n `,\n variables: {\n buildingInspectionId\n }\n })\n\n if (response.errors) return\n\n this.buildingInspection = response.data.buildingInspection\n\n await this._getProjectByBuildingComplexId(this.buildingInspection?.buildingLevel?.building?.buildingComplex?.id)\n }\n\n private async _getProjectByBuildingComplexId(buildingComplexId) {\n const response = await client.query({\n query: gql`\n query ProjectByBuildingComplexId($buildingComplexId: String!) {\n project: projectByBuildingComplexId(buildingComplexId: $buildingComplexId) {\n id\n name\n }\n }\n `,\n variables: {\n buildingComplexId\n }\n })\n\n if (response.errors) return\n\n this.project = response.data.project\n }\n\n private toggleAI(e: Event) {\n const isChecked = (e.target as HTMLInputElement).checked\n console.log(`AI 기능: ${isChecked ? 'ON' : 'OFF'}`)\n // Implement additional AI functionality toggling if needed\n }\n\n private handleImageCapture(event: Event) {\n const input = event.target as HTMLInputElement\n if (input.files && input.files[0]) {\n const reader = new FileReader()\n reader.onload = e => {\n this.capturedImage = e.target?.result as string\n }\n reader.readAsDataURL(input.files[0])\n }\n }\n}\n"]}
1
+ {"version":3,"file":"building-inspection-detail-camera.js","sourceRoot":"","sources":["../../../client/pages/building-inspection/building-inspection-detail-camera.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/progress/circular-progress.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, state, query } from 'lit/decorators.js'\n\nimport { PageView } from '@operato/shell'\nimport { CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\n\nimport './component/building-inspection-detail-header'\n\n@customElement('building-inspection-detail-camera')\nexport class BuildingInspectionCamera extends PageView {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: grid;\n grid-template-rows: 75px 1fr;\n color: #4e5055;\n width: 100%;\n height: 100%;\n background-color: #f7f7f7;\n }\n\n div[body] {\n display: flex;\n justify-items: center;\n gap: var(--spacing-medium);\n margin: var(--spacing-medium);\n min-height: 0;\n }\n\n div[preview] {\n flex: 1;\n border: 2px solid #ddd;\n border-radius: 10px;\n\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 0;\n overflow: hidden;\n }\n\n div[preview] img {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n }\n\n div[preview] video {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n }\n\n div[preview] md-icon {\n --md-icon-size: 160px;\n }\n\n .image-wrapper {\n position: relative;\n width: 100%;\n height: 100%;\n align-content: center;\n text-align: center;\n }\n\n div[controls] {\n width: 240px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n }\n\n div[action-buttons] {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n gap: 15px;\n }\n\n .camera-shutter {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n position: relative;\n }\n\n .controls-title {\n font-size: 18px;\n font-weight: 700;\n color: #333;\n margin-bottom: 8px;\n text-align: center;\n }\n\n .camera-shutter md-icon {\n --md-icon-size: 100px;\n }\n\n .camera-shutter input {\n opacity: 0;\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n cursor: pointer;\n }\n\n button {\n padding: 10px 20px;\n font-size: 16px;\n border-radius: 5px;\n border: none;\n cursor: pointer;\n }\n\n button.save {\n background-color: #4caf50;\n color: white;\n\n &:disabled {\n background-color: #ccc;\n cursor: default;\n }\n }\n\n button.retry {\n background-color: #f0ad4e;\n color: white;\n }\n `\n ]\n\n @state() project: any = {}\n @state() buildingInspection: any = {}\n @state() buildingInspectionId: string = ''\n @state() capturedImageUrl: string | null = null\n @state() imageFile: File | null = null\n @state() isSaved: boolean = false\n\n @query('#imageInput') private imageInputEl!: HTMLInputElement\n\n get context() {\n return {\n title: '검측 관리 상세 - 사진 촬영'\n }\n }\n\n render() {\n return html`\n <building-inspection-detail-header\n .buildingInspectionId=${this.buildingInspection?.id}\n .buildingLevelId=${this.buildingInspection?.buildingLevel?.id}\n .projectName=${this.project.name}\n .buildingName=${this.buildingInspection?.buildingLevel?.building?.name}\n .buildingLevelFloor=${this.buildingInspection?.buildingLevel?.floor}\n .projectId=${this.project.id}\n ></building-inspection-detail-header>\n\n <div body>\n <div preview>\n <div class=\"image-wrapper\">\n ${this.capturedImageUrl\n ? html`<img id=\"imageImage\" src=\"${this.capturedImageUrl}\" alt=\"image\" />`\n : html`<md-icon>add_a_photo</md-icon>`}\n </div>\n </div>\n\n <div controls>\n <span class=\"controls-title\">사진 촬영</span>\n\n <div class=\"camera-shutter\">\n <md-icon>camera</md-icon>\n <input id=\"imageInput\" type=\"file\" accept=\"image/*\" @change=\"${this._onImageSelected}\" />\n </div>\n\n <!-- Action buttons -->\n <div action-buttons>\n <button class=\"save\" ?disabled=${!this.imageFile || this.isSaved} @click=${this._savePhoto}>사진 저장</button>\n <button class=\"retry\" @click=${this._onRetry}>초기화</button>\n </div>\n </div>\n </div>\n `\n }\n\n protected async updated(changes: PropertyValues): Promise<void> {}\n\n async pageUpdated(changes: any, lifecycle: PageLifecycle) {\n if (this.active) {\n this._onRetry()\n this.buildingInspectionId = lifecycle.resourceId || ''\n await this.initBuildingInspection(this.buildingInspectionId)\n }\n }\n\n async initBuildingInspection(buildingInspectionId: string = '') {\n const response = await client.query({\n query: gql`\n query BuildingInspection($buildingInspectionId: String!) {\n buildingInspection(id: $buildingInspectionId) {\n id\n status\n requestDate\n checklist {\n id\n }\n buildingLevel {\n id\n floor\n building {\n id\n name\n buildingComplex {\n id\n }\n }\n }\n }\n }\n `,\n variables: {\n buildingInspectionId\n }\n })\n\n if (response.errors) return\n\n this.buildingInspection = response.data.buildingInspection\n\n await this._getProjectByBuildingComplexId(this.buildingInspection?.buildingLevel?.building?.buildingComplex?.id)\n }\n\n private async _getProjectByBuildingComplexId(buildingComplexId) {\n const response = await client.query({\n query: gql`\n query ProjectByBuildingComplexId($buildingComplexId: String!) {\n project: projectByBuildingComplexId(buildingComplexId: $buildingComplexId) {\n id\n name\n }\n }\n `,\n variables: {\n buildingComplexId\n }\n })\n\n if (response.errors) return\n\n this.project = response.data.project\n }\n\n private _onImageSelected(event: Event) {\n const input = event.target as HTMLInputElement\n const file = input?.files?.[0]\n if (!file) return\n\n // Only allow video files\n if (!file.type.startsWith('image/')) {\n console.warn('선택된 파일이 이미지가 아닙니다.')\n return\n }\n\n // Revoke old object URL if exists\n if (this.capturedImageUrl) {\n URL.revokeObjectURL(this.capturedImageUrl)\n }\n\n this.imageFile = file\n this.capturedImageUrl = URL.createObjectURL(file)\n this.isSaved = false // 새 이미지 선택 시 저장 상태 초기화\n }\n\n private _onRetry() {\n // Clear current selection and reopen camera\n if (this.capturedImageUrl) {\n URL.revokeObjectURL(this.capturedImageUrl)\n }\n this.capturedImageUrl = null\n this.imageFile = null\n this.isSaved = false // 초기화 시 저장 상태도 리셋\n this.imageInputEl.value = ''\n }\n\n async _savePhoto() {\n if (!this.imageFile) {\n notify({ message: '사진을 선택한 후 저장할 수 있습니다.', level: 'warn' })\n return\n }\n\n const checklistId = this.buildingInspection?.checklist?.id\n const file = this.imageFile\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($attachments: [NewAttachment!]!) {\n createAttachments(attachments: $attachments) {\n id\n }\n }\n `,\n variables: {\n attachments: [{ file, refBy: checklistId, refType: 'Checklist', description: this.buildingInspection?.status }]\n },\n context: { hasUpload: true }\n })\n\n if (!response.errors) {\n notify({ message: '사진 대지를 저장하였습니다.', level: 'info' })\n this.isSaved = true // 저장 성공 시 상태 업데이트\n return\n }\n\n return response.data.createAttachments\n }\n}\n"]}
@@ -3,6 +3,8 @@ import '@operato/data-grist';
3
3
  import { PageView } from '@operato/shell';
4
4
  import { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view';
5
5
  import './component/building-inspection-detail-header';
6
+ import './component/inspection-document/inspection-request-document';
7
+ import './component/inspection-document/inspection-result-notification';
6
8
  import '../checklist/checklist-view';
7
9
  export declare class BuildingInspectionDetailChecklist extends PageView {
8
10
  static styles: import("lit").CSSResult[];
@@ -17,4 +19,13 @@ export declare class BuildingInspectionDetailChecklist extends PageView {
17
19
  private _getProjectByBuildingComplexId;
18
20
  private _onClickModifyChecklist;
19
21
  private validateChecklist;
22
+ private _showInspectionRequestDocument;
23
+ private _showInspectionResultNotification;
24
+ private _toISODate;
25
+ private _onRequestDateChange;
26
+ private _onInspectionMemoChange;
27
+ private _onInspectionResultChange;
28
+ private _onInspectionTypeChange;
29
+ private _onInstructionsChange;
30
+ private _uploadNameListFile;
20
31
  }