@dssp/supervision 0.0.8 → 0.0.10

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 (224) hide show
  1. package/client/pages/building-inspection/building-inspection-detail-checklist.ts +186 -0
  2. package/client/pages/building-inspection/building-inspection-detail-drawing.ts +160 -0
  3. package/client/pages/building-inspection/building-inspection-list.ts +430 -0
  4. package/client/pages/building-inspection/component/building-inspection-detail-header.ts +94 -0
  5. package/client/pages/building-inspection/inspection-create-popup.ts +696 -0
  6. package/client/pages/checklist/checklist-view.ts +443 -0
  7. package/client/pages/checklist-template/checklist-template-item.ts +240 -0
  8. package/client/pages/checklist-template/checklist-template-list.ts +271 -0
  9. package/client/pages/checklist-template/checklist-type-management.ts +242 -0
  10. package/client/route.ts +14 -18
  11. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +21 -0
  12. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +187 -0
  13. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -0
  14. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.d.ts +21 -0
  15. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js +169 -0
  16. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.js.map +1 -0
  17. package/dist-client/pages/building-inspection/building-inspection-list.d.ts +67 -0
  18. package/dist-client/pages/building-inspection/building-inspection-list.js +434 -0
  19. package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -0
  20. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.d.ts +1 -0
  21. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js +118 -0
  22. package/dist-client/pages/building-inspection/component/building-inspection-detail-header.js.map +1 -0
  23. package/dist-client/pages/building-inspection/inspection-create-popup.d.ts +3 -0
  24. package/dist-client/pages/building-inspection/inspection-create-popup.js +735 -0
  25. package/dist-client/pages/building-inspection/inspection-create-popup.js.map +1 -0
  26. package/dist-client/pages/checklist/checklist-view.d.ts +6 -0
  27. package/dist-client/pages/checklist/checklist-view.js +434 -0
  28. package/dist-client/pages/checklist/checklist-view.js.map +1 -0
  29. package/dist-client/pages/checklist-template/checklist-template-item.d.ts +2 -0
  30. package/dist-client/pages/checklist-template/checklist-template-item.js +237 -0
  31. package/dist-client/pages/checklist-template/checklist-template-item.js.map +1 -0
  32. package/dist-client/pages/{check-item/check-item-list-page.d.ts → checklist-template/checklist-template-list.d.ts} +8 -27
  33. package/dist-client/pages/checklist-template/checklist-template-list.js +259 -0
  34. package/dist-client/pages/checklist-template/checklist-template-list.js.map +1 -0
  35. package/dist-client/pages/checklist-template/checklist-type-management.d.ts +48 -0
  36. package/dist-client/pages/checklist-template/checklist-type-management.js +229 -0
  37. package/dist-client/pages/checklist-template/checklist-type-management.js.map +1 -0
  38. package/dist-client/route.d.ts +1 -1
  39. package/dist-client/route.js +10 -13
  40. package/dist-client/route.js.map +1 -1
  41. package/dist-client/tsconfig.tsbuildinfo +1 -1
  42. package/dist-server/index.d.ts +1 -1
  43. package/dist-server/index.js +1 -1
  44. package/dist-server/index.js.map +1 -1
  45. package/dist-server/service/building-inspection/building-inspection-history.d.ts +17 -0
  46. package/dist-server/service/building-inspection/building-inspection-history.js +85 -0
  47. package/dist-server/service/building-inspection/building-inspection-history.js.map +1 -0
  48. package/dist-server/service/building-inspection/building-inspection-mutation.d.ts +8 -0
  49. package/dist-server/service/building-inspection/building-inspection-mutation.js +148 -0
  50. package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -0
  51. package/dist-server/service/building-inspection/building-inspection-query.d.ts +20 -0
  52. package/dist-server/service/building-inspection/building-inspection-query.js +235 -0
  53. package/dist-server/service/building-inspection/building-inspection-query.js.map +1 -0
  54. package/dist-server/service/building-inspection/building-inspection-type.d.ts +43 -0
  55. package/dist-server/service/building-inspection/building-inspection-type.js +153 -0
  56. package/dist-server/service/building-inspection/building-inspection-type.js.map +1 -0
  57. package/dist-server/service/building-inspection/building-inspection.d.ts +26 -0
  58. package/dist-server/service/building-inspection/building-inspection.js +113 -0
  59. package/dist-server/service/building-inspection/building-inspection.js.map +1 -0
  60. package/dist-server/service/building-inspection/event-subscriber.d.ts +7 -0
  61. package/dist-server/service/building-inspection/event-subscriber.js +21 -0
  62. package/dist-server/service/building-inspection/event-subscriber.js.map +1 -0
  63. package/dist-server/service/building-inspection/index.d.ts +10 -0
  64. package/dist-server/service/building-inspection/index.js +14 -0
  65. package/dist-server/service/building-inspection/index.js.map +1 -0
  66. package/dist-server/service/checklist/checklist-history.d.ts +24 -0
  67. package/dist-server/service/checklist/checklist-history.js +120 -0
  68. package/dist-server/service/checklist/checklist-history.js.map +1 -0
  69. package/dist-server/service/checklist/checklist-mutation.d.ts +8 -0
  70. package/dist-server/service/checklist/checklist-mutation.js +96 -0
  71. package/dist-server/service/checklist/checklist-mutation.js.map +1 -0
  72. package/dist-server/service/checklist/checklist-query.d.ts +12 -0
  73. package/dist-server/service/checklist/checklist-query.js +83 -0
  74. package/dist-server/service/checklist/checklist-query.js.map +1 -0
  75. package/dist-server/service/checklist/checklist-type.d.ts +18 -0
  76. package/dist-server/service/checklist/checklist-type.js +69 -0
  77. package/dist-server/service/checklist/checklist-type.js.map +1 -0
  78. package/dist-server/service/checklist/checklist.d.ts +31 -0
  79. package/dist-server/service/checklist/checklist.js +143 -0
  80. package/dist-server/service/checklist/checklist.js.map +1 -0
  81. package/dist-server/service/checklist/event-subscriber.d.ts +7 -0
  82. package/dist-server/service/checklist/event-subscriber.js +21 -0
  83. package/dist-server/service/checklist/event-subscriber.js.map +1 -0
  84. package/dist-server/service/checklist/index.d.ts +8 -0
  85. package/dist-server/service/checklist/index.js +12 -0
  86. package/dist-server/service/checklist/index.js.map +1 -0
  87. package/dist-server/service/checklist-item/checklist-item-mutation.d.ts +2 -0
  88. package/dist-server/service/checklist-item/checklist-item-mutation.js +13 -0
  89. package/dist-server/service/checklist-item/checklist-item-mutation.js.map +1 -0
  90. package/dist-server/service/checklist-item/checklist-item-query.d.ts +10 -0
  91. package/dist-server/service/checklist-item/checklist-item-query.js +68 -0
  92. package/dist-server/service/checklist-item/checklist-item-query.js.map +1 -0
  93. package/dist-server/service/checklist-item/checklist-item-type.d.ts +5 -0
  94. package/dist-server/service/checklist-item/checklist-item-type.js +21 -0
  95. package/dist-server/service/checklist-item/checklist-item-type.js.map +1 -0
  96. package/dist-server/service/checklist-item/checklist-item.d.ts +26 -0
  97. package/dist-server/service/checklist-item/checklist-item.js +113 -0
  98. package/dist-server/service/checklist-item/checklist-item.js.map +1 -0
  99. package/dist-server/service/checklist-item/index.d.ts +5 -0
  100. package/dist-server/service/checklist-item/index.js +10 -0
  101. package/dist-server/service/checklist-item/index.js.map +1 -0
  102. package/dist-server/service/checklist-template/checklist-template-mutation.d.ts +6 -0
  103. package/dist-server/service/checklist-template/checklist-template-mutation.js +64 -0
  104. package/dist-server/service/checklist-template/checklist-template-mutation.js.map +1 -0
  105. package/dist-server/service/checklist-template/checklist-template-query.d.ts +10 -0
  106. package/dist-server/service/checklist-template/checklist-template-query.js +65 -0
  107. package/dist-server/service/checklist-template/checklist-template-query.js.map +1 -0
  108. package/dist-server/service/checklist-template/checklist-template-type.d.ts +10 -0
  109. package/dist-server/service/checklist-template/checklist-template-type.js +39 -0
  110. package/dist-server/service/checklist-template/checklist-template-type.js.map +1 -0
  111. package/dist-server/service/checklist-template/checklist-template.d.ts +17 -0
  112. package/dist-server/service/checklist-template/checklist-template.js +78 -0
  113. package/dist-server/service/checklist-template/checklist-template.js.map +1 -0
  114. package/dist-server/service/checklist-template/index.d.ts +5 -0
  115. package/dist-server/service/checklist-template/index.js +9 -0
  116. package/dist-server/service/checklist-template/index.js.map +1 -0
  117. package/dist-server/service/checklist-template-item/checklist-template-item-mutation.d.ts +7 -0
  118. package/dist-server/service/checklist-template-item/checklist-template-item-mutation.js +68 -0
  119. package/dist-server/service/checklist-template-item/checklist-template-item-mutation.js.map +1 -0
  120. package/dist-server/service/checklist-template-item/checklist-template-item-query.d.ts +10 -0
  121. package/dist-server/service/checklist-template-item/checklist-template-item-query.js +66 -0
  122. package/dist-server/service/checklist-template-item/checklist-template-item-query.js.map +1 -0
  123. package/dist-server/service/checklist-template-item/checklist-template-item-type.d.ts +16 -0
  124. package/dist-server/service/checklist-template-item/checklist-template-item-type.js +60 -0
  125. package/dist-server/service/checklist-template-item/checklist-template-item-type.js.map +1 -0
  126. package/dist-server/service/checklist-template-item/checklist-template-item.d.ts +19 -0
  127. package/dist-server/service/checklist-template-item/checklist-template-item.js +87 -0
  128. package/dist-server/service/checklist-template-item/checklist-template-item.js.map +1 -0
  129. package/dist-server/service/checklist-template-item/index.d.ts +5 -0
  130. package/dist-server/service/checklist-template-item/index.js +9 -0
  131. package/dist-server/service/checklist-template-item/index.js.map +1 -0
  132. package/dist-server/service/checklist-type/checklist-type-mutation.d.ts +6 -0
  133. package/dist-server/service/checklist-type/checklist-type-mutation.js +64 -0
  134. package/dist-server/service/checklist-type/checklist-type-mutation.js.map +1 -0
  135. package/dist-server/service/checklist-type/checklist-type-query.d.ts +10 -0
  136. package/dist-server/service/checklist-type/checklist-type-query.js +65 -0
  137. package/dist-server/service/checklist-type/checklist-type-query.js.map +1 -0
  138. package/dist-server/service/checklist-type/checklist-type-type.d.ts +11 -0
  139. package/dist-server/service/checklist-type/checklist-type-type.js +43 -0
  140. package/dist-server/service/checklist-type/checklist-type-type.js.map +1 -0
  141. package/dist-server/service/checklist-type/checklist-type.d.ts +19 -0
  142. package/dist-server/service/checklist-type/checklist-type.js +78 -0
  143. package/dist-server/service/checklist-type/checklist-type.js.map +1 -0
  144. package/dist-server/service/checklist-type/index.d.ts +5 -0
  145. package/dist-server/service/checklist-type/index.js +9 -0
  146. package/dist-server/service/checklist-type/index.js.map +1 -0
  147. package/dist-server/service/index.d.ts +8 -3
  148. package/dist-server/service/index.js +25 -5
  149. package/dist-server/service/index.js.map +1 -1
  150. package/dist-server/service/issue/issue.d.ts +1 -3
  151. package/dist-server/service/issue/issue.js +1 -7
  152. package/dist-server/service/issue/issue.js.map +1 -1
  153. package/dist-server/service/supervisor/supervisor.d.ts +1 -3
  154. package/dist-server/service/supervisor/supervisor.js +1 -7
  155. package/dist-server/service/supervisor/supervisor.js.map +1 -1
  156. package/dist-server/tsconfig.tsbuildinfo +1 -1
  157. package/helps/supervision/checklist-item.md +160 -0
  158. package/helps/supervision/checklist.md +160 -0
  159. package/package.json +11 -7
  160. package/server/index.ts +1 -1
  161. package/server/service/building-inspection/building-inspection-history.ts +70 -0
  162. package/server/service/building-inspection/building-inspection-mutation.ts +147 -0
  163. package/server/service/building-inspection/building-inspection-query.ts +202 -0
  164. package/server/service/building-inspection/building-inspection-type.ts +101 -0
  165. package/server/service/building-inspection/building-inspection.ts +106 -0
  166. package/server/service/building-inspection/event-subscriber.ts +20 -0
  167. package/server/service/building-inspection/index.ts +11 -0
  168. package/server/service/checklist/checklist-history.ts +96 -0
  169. package/server/service/checklist/checklist-mutation.ts +103 -0
  170. package/server/service/checklist/checklist-query.ts +52 -0
  171. package/server/service/{check-item/check-item-type.ts → checklist/checklist-type.ts} +6 -18
  172. package/server/service/checklist/checklist.ts +127 -0
  173. package/server/service/checklist/event-subscriber.ts +17 -0
  174. package/server/service/checklist/index.ts +9 -0
  175. package/server/service/checklist-item/checklist-item-mutation.ts +5 -0
  176. package/server/service/checklist-item/checklist-item-query.ts +43 -0
  177. package/server/service/checklist-item/checklist-item-type.ts +12 -0
  178. package/server/service/checklist-item/checklist-item.ts +100 -0
  179. package/server/service/checklist-item/index.ts +7 -0
  180. package/server/service/checklist-template/checklist-template-mutation.ts +66 -0
  181. package/server/service/checklist-template/checklist-template-query.ts +39 -0
  182. package/server/service/checklist-template/checklist-template-type.ts +23 -0
  183. package/server/service/checklist-template/checklist-template.ts +71 -0
  184. package/server/service/checklist-template/index.ts +6 -0
  185. package/server/service/checklist-template-item/checklist-template-item-mutation.ts +64 -0
  186. package/server/service/checklist-template-item/checklist-template-item-query.ts +39 -0
  187. package/server/service/checklist-template-item/checklist-template-item-type.ts +39 -0
  188. package/server/service/checklist-template-item/checklist-template-item.ts +67 -0
  189. package/server/service/checklist-template-item/index.ts +6 -0
  190. package/server/service/checklist-type/checklist-type-mutation.ts +66 -0
  191. package/server/service/checklist-type/checklist-type-query.ts +39 -0
  192. package/server/service/checklist-type/checklist-type-type.ts +26 -0
  193. package/server/service/checklist-type/checklist-type.ts +64 -0
  194. package/server/service/checklist-type/index.ts +6 -0
  195. package/server/service/index.ts +59 -23
  196. package/server/service/issue/issue.ts +1 -6
  197. package/server/service/supervisor/supervisor.ts +1 -6
  198. package/things-factory.config.js +11 -7
  199. package/client/pages/check-item/check-item-importer.ts +0 -94
  200. package/client/pages/check-item/check-item-list-page.ts +0 -340
  201. package/dist-client/pages/check-item/check-item-importer.d.ts +0 -10
  202. package/dist-client/pages/check-item/check-item-importer.js +0 -101
  203. package/dist-client/pages/check-item/check-item-importer.js.map +0 -1
  204. package/dist-client/pages/check-item/check-item-list-page.js +0 -323
  205. package/dist-client/pages/check-item/check-item-list-page.js.map +0 -1
  206. package/dist-server/service/check-item/check-item-mutation.d.ts +0 -10
  207. package/dist-server/service/check-item/check-item-mutation.js +0 -168
  208. package/dist-server/service/check-item/check-item-mutation.js.map +0 -1
  209. package/dist-server/service/check-item/check-item-query.d.ts +0 -12
  210. package/dist-server/service/check-item/check-item-query.js +0 -97
  211. package/dist-server/service/check-item/check-item-query.js.map +0 -1
  212. package/dist-server/service/check-item/check-item-type.d.ts +0 -23
  213. package/dist-server/service/check-item/check-item-type.js +0 -86
  214. package/dist-server/service/check-item/check-item-type.js.map +0 -1
  215. package/dist-server/service/check-item/check-item.d.ts +0 -28
  216. package/dist-server/service/check-item/check-item.js +0 -117
  217. package/dist-server/service/check-item/check-item.js.map +0 -1
  218. package/dist-server/service/check-item/index.d.ts +0 -6
  219. package/dist-server/service/check-item/index.js +0 -10
  220. package/dist-server/service/check-item/index.js.map +0 -1
  221. package/server/service/check-item/check-item-mutation.ts +0 -198
  222. package/server/service/check-item/check-item-query.ts +0 -62
  223. package/server/service/check-item/check-item.ts +0 -111
  224. package/server/service/check-item/index.ts +0 -7
@@ -0,0 +1,696 @@
1
+ import '@material/web/icon/icon.js'
2
+ import '@operato/data-grist/ox-grist.js'
3
+
4
+ import gql from 'graphql-tag'
5
+ import { css, html, LitElement } from 'lit'
6
+ import { customElement, property, query, state } from 'lit/decorators.js'
7
+ import { DataGrist } from '@operato/data-grist/ox-grist.js'
8
+ import { client } from '@operato/graphql'
9
+ import { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles'
10
+ import { notify } from '@operato/layout'
11
+ import { CHECKLIST_MAIN_TYPE_LIST } from './building-inspection-list'
12
+ import '../checklist/checklist-view'
13
+ import { ChecklistMode } from '../checklist/checklist-view'
14
+
15
+ @customElement('inspection-create-popup')
16
+ class InspectionCreatePopup extends LitElement {
17
+ static styles = [
18
+ ButtonContainerStyles,
19
+ ScrollbarStyles,
20
+ css`
21
+ :host {
22
+ display: flex;
23
+ flex-direction: column;
24
+
25
+ background-color: var(--md-sys-color-surface);
26
+ }
27
+
28
+ md-filled-select {
29
+ width: auto;
30
+ min-width: 150px;
31
+ --md-filled-select-text-field-container-color: transparent;
32
+ --md-filled-select-text-field-active-indicator-color: #999;
33
+ --md-filled-select-text-field-input-text-size: 14px;
34
+ --md-filled-select-text-field-input-text-weight: bold;
35
+ --md-filled-select-text-field-input-text-line-height: 6px;
36
+ }
37
+ md-filled-select[level] {
38
+ min-width: 110px;
39
+ margin-left: 20px;
40
+ }
41
+
42
+ checklist-view {
43
+ pointer-events: none;
44
+ transform-origin: top left;
45
+ }
46
+
47
+ div[body] {
48
+ display: flex;
49
+ height: 100%;
50
+ gap: 15px;
51
+ justify-content: flex-start;
52
+ overflow-y: auto;
53
+
54
+ div[left] {
55
+ width: 60%;
56
+
57
+ div[block-name] {
58
+ position: relative;
59
+
60
+ hr {
61
+ position: absolute;
62
+ width: 100%;
63
+ margin-block: 0;
64
+ top: 50%;
65
+ }
66
+ span {
67
+ position: relative;
68
+ background-color: var(--md-sys-color-surface);
69
+ margin-left: 1rem;
70
+ }
71
+ }
72
+ }
73
+
74
+ div[right] {
75
+ display: flex;
76
+ overflow-y: auto;
77
+ overflow-x: hidden;
78
+ max-width: calc(40% - 15px);
79
+ }
80
+ }
81
+ `
82
+ ]
83
+
84
+ @property({ type: Object }) gristConfig: any
85
+ @property({ type: Object }) checklistDetailTypes: any
86
+ @property({ type: String }) projectId: string = ''
87
+ @property({ type: String }) checklistTemplateId: string = ''
88
+ @property({ type: String }) selectedBuildingId: string = ''
89
+ @property({ type: String }) selectedBuildingLevelId: string = ''
90
+
91
+ @state() buildings: any = []
92
+ @state() selectedBuilding: any = {}
93
+ @state() selectedLevel: any = {}
94
+
95
+ @state() constructionTypes: any = []
96
+ @state() selectedConstructionType: any = {}
97
+ @state() selectedConstructionDetailType: any = {}
98
+
99
+ @state() inspectionDrawingTypes: any = []
100
+ @state() selectedInspectionDrawingType: any = {}
101
+ @state() selectedInspectionParts: Array<string> = []
102
+
103
+ @state() checklistTemplates: any = []
104
+ @state() checklist: any = {}
105
+
106
+ @query('md-filled-select[building]') htmlSelectBuilding
107
+ @query('md-filled-select[level]') htmlSelectLevel
108
+ @query('md-filled-select[constructionType]') htmlSelectConstructionType
109
+ @query('md-filled-select[constructionDetailType]') htmlSelectConstructionDetailType
110
+ @query('md-filled-select[inspectionDrawingType]') htmlSelectInspectionDrawingType
111
+ @query('md-filled-select[inspectionPart]') htmlSelectInspectionPart
112
+ @query('md-filled-select[checklistTemplate]') htmlSelectChecklistTemplate
113
+ @query('ox-grist') grist!: DataGrist
114
+ @query('div[right]') checklistViewContainer!: HTMLDivElement
115
+ @query('checklist-view') checklistView!: HTMLElement
116
+
117
+ render() {
118
+ return html`
119
+ <div body>
120
+ <div left>
121
+ <div block-name>
122
+ <hr />
123
+ <span>세부 정보</span>
124
+ </div>
125
+
126
+ <div>
127
+ <md-filled-select label="공종" constructionType @change=${this._onSelectConstructionType}>
128
+ ${this.constructionTypes?.map(constructionType => {
129
+ const selected = constructionType.id === this.selectedConstructionType?.id
130
+ return html`<md-select-option ?selected=${selected} .value=${constructionType.id}>
131
+ <div slot="headline">${constructionType.name}</div>
132
+ </md-select-option>`
133
+ })}
134
+ </md-filled-select>
135
+
136
+ <md-filled-select label="세부 공종" constructionDetailType @change=${this._onSelectConstructionDetailType}>
137
+ ${this.selectedConstructionType?.constructionDetailTypes?.map(constructionDetailType => {
138
+ const selected = constructionDetailType.id === this.selectedConstructionDetailType.id
139
+ return html`<md-select-option ?selected=${selected} .value=${constructionDetailType.id}>
140
+ <div slot="headline">${constructionDetailType.name}</div>
141
+ </md-select-option>`
142
+ })}
143
+ </md-filled-select>
144
+ </div>
145
+
146
+ <div>
147
+ <md-filled-select label="동" building @change=${this._onSelectBuilding}>
148
+ ${this.buildings?.map(building => {
149
+ return html` <md-select-option .value=${building.id}>
150
+ <div slot="headline">${building.name}</div>
151
+ </md-select-option>`
152
+ })}
153
+ </md-filled-select>
154
+
155
+ <md-filled-select label="층" level @change=${this._onSelectBuildingLevel}>
156
+ ${this.selectedBuilding?.buildingLevels?.map(level => {
157
+ return html`<md-select-option .value=${level.id}>
158
+ <div slot="headline">${level.floor}</div>
159
+ </md-select-option>`
160
+ })}
161
+ </md-filled-select>
162
+ </div>
163
+
164
+ <div>
165
+ <md-filled-select label="검측 도면" inspectionDrawingType @change=${this._onSelectInspectionDrawingType}>
166
+ ${this.inspectionDrawingTypes?.map(inspectionDrawingType => {
167
+ return html` <md-select-option .value=${inspectionDrawingType.id}>
168
+ <div slot="headline">${inspectionDrawingType.name}</div>
169
+ </md-select-option>`
170
+ })}
171
+ </md-filled-select>
172
+
173
+ <md-filled-select label="검측 부위" inspectionParts>
174
+ <div slot="label">${this.selectedInspectionParts?.join(', ') || ''}</div>
175
+
176
+ ${this.selectedInspectionDrawingType?.inspectionParts?.map(inspectionPart => {
177
+ return html`
178
+ <md-list-option @click=${() => this._onSelectInspectionPart(inspectionPart)}>
179
+ <md-checkbox ?checked="${this.isSelected(inspectionPart)}"></md-checkbox>
180
+ ${inspectionPart.name}
181
+ </md-list-option>
182
+ `
183
+ })}
184
+ </md-filled-select>
185
+ </div>
186
+
187
+ <div block-name>
188
+ <hr />
189
+ <span>체크리스트</span>
190
+ </div>
191
+
192
+ <div>
193
+ <label>체크리스트 템플릿 불러오기</label>
194
+
195
+ <md-filled-select label="템플릿" checklistTemplate @change=${this._onSelectChecklistTemplate}>
196
+ <md-select-option></md-select-option>
197
+ ${this.checklistTemplates?.map((checklistTemplate, idx) => {
198
+ return html` <md-select-option .value=${checklistTemplate.id}>
199
+ <div slot="headline">${checklistTemplate.name}</div>
200
+ </md-select-option>`
201
+ })}
202
+ </md-filled-select>
203
+ </div>
204
+
205
+ <div>
206
+ <md-filled-text-field
207
+ name="checklistName"
208
+ type="text"
209
+ label="체크리스트 이름"
210
+ .value=${this.checklist?.name || ''}
211
+ @input=${this._onInputChange}
212
+ >
213
+ </md-filled-text-field>
214
+ </div>
215
+
216
+ <ox-grist
217
+ .mode=${'GRID'}
218
+ .config=${this.gristConfig}
219
+ .fetchHandler=${this.fetchHandler.bind(this)}
220
+ @field-change=${this.onChangeGird}
221
+ >
222
+ </ox-grist>
223
+
224
+ <div button-container>
225
+ <md-elevated-button @click=${this._createInspection}>
226
+ <md-icon slot="icon">add</md-icon>검측 요청서 등록
227
+ </md-elevated-button>
228
+ </div>
229
+ </div>
230
+
231
+ <div right>
232
+ <checklist-view .mode=${ChecklistMode.VIEWER} .checklist=${this.checklist}></checklist-view>
233
+ </div>
234
+ </div>
235
+ `
236
+ }
237
+
238
+ updated() {
239
+ const ratio = Math.round((this.checklistViewContainer?.offsetWidth / this.checklistView?.offsetWidth) * 100) / 100 || 1
240
+ this.checklistView.style.transform = `scale(${ratio})`
241
+ }
242
+
243
+ async firstUpdated() {
244
+ const response = await client.query({
245
+ query: gql`
246
+ query Project($id: String!) {
247
+ project(id: $id) {
248
+ id
249
+ name
250
+ buildingComplex {
251
+ id
252
+ buildings {
253
+ id
254
+ name
255
+ }
256
+ }
257
+ }
258
+
259
+ constructionTypes {
260
+ items {
261
+ name
262
+ id
263
+ }
264
+ }
265
+
266
+ inspectionDrawingTypes {
267
+ items {
268
+ name
269
+ id
270
+ }
271
+ }
272
+
273
+ checklistTemplates {
274
+ items {
275
+ id
276
+ name
277
+ }
278
+ }
279
+
280
+ checklistTypes {
281
+ items {
282
+ id
283
+ mainType
284
+ detailType
285
+ }
286
+ }
287
+ }
288
+ `,
289
+ variables: {
290
+ id: this.projectId
291
+ }
292
+ })
293
+
294
+ if (response.errors) return
295
+
296
+ const project = response.data?.project
297
+ const constructionTypes = response.data?.constructionTypes?.items || []
298
+ const inspectionDrawingTypes = response.data?.inspectionDrawingTypes?.items || []
299
+ const checklistTemplates = response.data?.checklistTemplates?.items || []
300
+ this.checklistDetailTypes = response.data.checklistTypes?.items?.map(v => {
301
+ return {
302
+ display: v.detailType,
303
+ value: v.id,
304
+ mainType: v.mainType
305
+ }
306
+ })
307
+
308
+ this.buildings = [...(project?.buildingComplex?.buildings || [])]
309
+ this.constructionTypes = [...constructionTypes]
310
+ this.inspectionDrawingTypes = [...inspectionDrawingTypes]
311
+ this.checklistTemplates = [...checklistTemplates]
312
+
313
+ // selectedBuildingId가 있으면 해당 빌딩 선택, 없으면 첫번째 빌딩 선택
314
+ this.selectedBuilding = this.selectedBuildingId
315
+ ? this.buildings.find(building => building.id == this.selectedBuildingId)
316
+ : this.buildings[0]
317
+
318
+ this.selectedConstructionType = constructionTypes?.[0]
319
+ this.selectedInspectionDrawingType = inspectionDrawingTypes?.[0]
320
+
321
+ // 선택된 동의 층 리스트 가져오기
322
+ this.selectedBuilding = await this._getBuilding(this.selectedBuilding.id)
323
+ this.selectedConstructionType = await this._getConstructionType(this.selectedConstructionType.id)
324
+ this.selectedInspectionDrawingType = await this._getInspectionDrawingType(this.selectedInspectionDrawingType.id)
325
+
326
+ // selectedBuildingLevelId가 있으면 선택된 층, 없으면 첫번째 층 선택
327
+ this.selectedLevel = this.selectedBuildingLevelId
328
+ ? this.selectedBuilding?.buildingLevels?.find(level => level.id == this.selectedBuildingLevelId)
329
+ : this.selectedBuilding?.buildingLevels?.[0]
330
+
331
+ this.selectedConstructionDetailType = this.selectedConstructionType?.constructionDetailTypes?.[0]
332
+ this.selectedInspectionParts = []
333
+
334
+ // 동, 층이 랜더링 된 후에 select를 위해 이 시점에서 랜더링
335
+ this.selectedBuilding = await { ...this.selectedBuilding }
336
+ this.selectedConstructionType = await { ...this.selectedConstructionType }
337
+
338
+ // 기본 값 셋팅 select
339
+ await this.htmlSelectBuilding.select(this.selectedBuilding.id)
340
+ await this.htmlSelectLevel.select(this.selectedLevel.id)
341
+ await this.htmlSelectConstructionType.select(this.selectedConstructionType.id)
342
+ await this.htmlSelectConstructionDetailType.select(this.selectedConstructionDetailType.id)
343
+ await this.htmlSelectInspectionDrawingType.select(this.selectedInspectionDrawingType.id)
344
+ await this.htmlSelectChecklistTemplate.selectIndex(0)
345
+
346
+ this.checklist = {
347
+ constructionType: this.selectedConstructionType?.name,
348
+ constructionDetailType: this.selectedConstructionDetailType?.name,
349
+ location: `${this.selectedBuilding?.name || ''} ${this.selectedLevel.floor || ''}층`,
350
+ documentNo: '0000-000-000000'
351
+ }
352
+
353
+ // 그리드 셋팅
354
+ this.setGristConfig()
355
+ }
356
+
357
+ async _getBuilding(buildingId: string = '') {
358
+ const response = await client.query({
359
+ query: gql`
360
+ query Building($id: String!) {
361
+ building(id: $id) {
362
+ id
363
+ name
364
+ buildingLevels {
365
+ id
366
+ floor
367
+ mainDrawing {
368
+ id
369
+ name
370
+ fullpath
371
+ }
372
+ mainDrawingImage
373
+ }
374
+ }
375
+ }
376
+ `,
377
+ variables: {
378
+ id: buildingId
379
+ }
380
+ })
381
+
382
+ if (response.errors) return
383
+
384
+ return response.data?.building || {}
385
+ }
386
+
387
+ async _getConstructionType(id: string = '') {
388
+ const response = await client.query({
389
+ query: gql`
390
+ query ConstructionType($id: String!) {
391
+ constructionType(id: $id) {
392
+ id
393
+ name
394
+ description
395
+ constructionDetailTypes {
396
+ id
397
+ name
398
+ }
399
+ }
400
+ }
401
+ `,
402
+ variables: { id }
403
+ })
404
+
405
+ if (response.errors) return
406
+
407
+ return response.data?.constructionType || {}
408
+ }
409
+
410
+ async _getInspectionDrawingType(id: string = '') {
411
+ const response = await client.query({
412
+ query: gql`
413
+ query InspectionDrawingType($id: String!) {
414
+ inspectionDrawingType(id: $id) {
415
+ id
416
+ name
417
+ inspectionParts {
418
+ id
419
+ name
420
+ }
421
+ }
422
+ }
423
+ `,
424
+ variables: { id }
425
+ })
426
+
427
+ if (response.errors) return
428
+
429
+ return response.data?.inspectionDrawingType || {}
430
+ }
431
+
432
+ private async _onSelectBuilding(e) {
433
+ const buildingId = e.target.value
434
+ this.selectedBuilding = await this._getBuilding(buildingId)
435
+ this.selectedLevel = await { ...this.selectedBuilding?.buildingLevels?.[0] }
436
+ this.checklist = { ...this.checklist, location: `${this.selectedBuilding?.name || ''} ${this.selectedLevel.floor || ''}층` }
437
+
438
+ await this.htmlSelectLevel.selectIndex(0)
439
+ }
440
+
441
+ private _onSelectBuildingLevel(e) {
442
+ const buildingLevelId = e.target.value
443
+ this.selectedLevel = {
444
+ ...(this.selectedBuilding?.buildingLevels?.find(v => v.id == buildingLevelId) || {})
445
+ }
446
+ this.checklist = { ...this.checklist, location: `${this.selectedBuilding?.name || ''} ${this.selectedLevel.floor || ''}층` }
447
+ }
448
+
449
+ private async _onSelectConstructionType(e) {
450
+ const constructionTypeId = e.target.value
451
+ this.selectedConstructionType = await this._getConstructionType(constructionTypeId)
452
+ this.selectedConstructionDetailType = await { ...this.selectedConstructionType?.constructionDetailTypes?.[0] }
453
+ this.checklist = {
454
+ ...this.checklist,
455
+ constructionType: this.selectedConstructionType?.name,
456
+ constructionDetailType: this.selectedConstructionDetailType?.name
457
+ }
458
+
459
+ await this.htmlSelectConstructionDetailType.selectIndex(0)
460
+ }
461
+
462
+ private _onSelectConstructionDetailType(e) {
463
+ const constructionDetailTypeId = e.target.value
464
+ this.selectedConstructionDetailType = {
465
+ ...(this.selectedConstructionType?.constructionDetailTypes?.find(v => v.id == constructionDetailTypeId) || {})
466
+ }
467
+ this.checklist = {
468
+ ...this.checklist,
469
+ constructionType: this.selectedConstructionType?.name,
470
+ constructionDetailType: this.selectedConstructionDetailType?.name
471
+ }
472
+ }
473
+
474
+ private async _onSelectInspectionDrawingType(e) {
475
+ const inspectionDrawingTypeId = e.target.value
476
+ this.selectedInspectionDrawingType = await this._getInspectionDrawingType(inspectionDrawingTypeId)
477
+ this.selectedInspectionParts = []
478
+ this.checklist = {
479
+ ...this.checklist,
480
+ inspectionParts: this.selectedInspectionParts
481
+ }
482
+ }
483
+
484
+ private async _onSelectInspectionPart(part) {
485
+ if (this.selectedInspectionParts.includes(part.name)) {
486
+ this.selectedInspectionParts = this.selectedInspectionParts.filter(item => item !== part.name)
487
+ } else {
488
+ this.selectedInspectionParts.push(part.name)
489
+ }
490
+
491
+ this.selectedInspectionParts = [...this.selectedInspectionParts]
492
+ this.checklist = {
493
+ ...this.checklist,
494
+ inspectionParts: this.selectedInspectionParts
495
+ }
496
+ }
497
+
498
+ isSelected(option: any): boolean {
499
+ return this.selectedInspectionParts.includes(option.name)
500
+ }
501
+
502
+ requestRefresh() {
503
+ this.dispatchEvent(new CustomEvent('requestRefresh'))
504
+ }
505
+
506
+ private _close() {
507
+ history.back()
508
+ }
509
+
510
+ setGristConfig() {
511
+ this.gristConfig = {
512
+ columns: [
513
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
514
+ {
515
+ type: 'gutter',
516
+ gutterName: 'button',
517
+ icon: 'arrow_upward',
518
+ handlers: {
519
+ click: 'move-up'
520
+ }
521
+ },
522
+ {
523
+ type: 'gutter',
524
+ gutterName: 'button',
525
+ icon: 'arrow_downward',
526
+ handlers: {
527
+ click: 'move-down'
528
+ }
529
+ },
530
+ {
531
+ type: 'select',
532
+ name: 'mainType',
533
+ header: '구분',
534
+ record: {
535
+ editable: true,
536
+ options: [{ display: '', value: '' }].concat(
537
+ Object.keys(CHECKLIST_MAIN_TYPE_LIST).map(key => ({ display: CHECKLIST_MAIN_TYPE_LIST[key], value: key }))
538
+ )
539
+ },
540
+ width: 100
541
+ },
542
+ {
543
+ type: 'select',
544
+ name: 'detailType',
545
+ header: '상세 구분',
546
+ record: {
547
+ editable: true,
548
+ options: (columns, data, column) => [
549
+ { display: '', value: '' },
550
+ ...this.checklistDetailTypes.filter(v => v.mainType == column.mainType)
551
+ ]
552
+ },
553
+ width: 200
554
+ },
555
+ {
556
+ type: 'string',
557
+ name: 'name',
558
+ header: '검사 항목',
559
+ record: {
560
+ editable: true
561
+ },
562
+ width: 200
563
+ },
564
+ {
565
+ type: 'string',
566
+ name: 'inspctionCriteria',
567
+ header: '검사 기준',
568
+ record: {
569
+ editable: true
570
+ },
571
+ width: 200
572
+ }
573
+ ],
574
+ pagination: {
575
+ infinite: true
576
+ },
577
+ sorters: [{ name: 'mainType' }, { name: 'sequence' }]
578
+ }
579
+ }
580
+
581
+ async fetchHandler() {
582
+ if (!this.checklistTemplateId) return []
583
+
584
+ const response = await client.query({
585
+ query: gql`
586
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
587
+ checklistTemplateItems(filters: $filters, pagination: $pagination, sortings: $sortings) {
588
+ items {
589
+ id
590
+ sequence
591
+ name
592
+ inspctionCriteria
593
+ mainType
594
+ detailType
595
+ }
596
+ }
597
+ }
598
+ `,
599
+ variables: {
600
+ filters: {
601
+ name: 'checklistTemplateId',
602
+ value: this.checklistTemplateId,
603
+ operator: 'eq'
604
+ },
605
+ sortings: [{ name: 'mainType' }, { name: 'sequence' }]
606
+ }
607
+ })
608
+
609
+ return {
610
+ records: response.data.checklistTemplateItems.items || []
611
+ }
612
+ }
613
+
614
+ private _onSelectChecklistTemplate(e) {
615
+ const checklistTemplateId = e.target.value
616
+
617
+ // 그리드 아이템 셋팅
618
+ if (checklistTemplateId) {
619
+ this.checklistTemplateId = checklistTemplateId
620
+ this.grist.fetch()
621
+ }
622
+
623
+ // 체크 리스트 이름 셋팅
624
+ this.checklist = { ...this.checklist, name: e.target.displayText }
625
+
626
+ // 체크리스트 아이템 데이터 갱신
627
+ this.onChangeGird()
628
+ }
629
+
630
+ async _createInspection() {
631
+ let patch: any = {}
632
+
633
+ patch.buildingLevelId = this.htmlSelectLevel.value
634
+ patch.checklist = {
635
+ name: this.checklist.name,
636
+ constructionType: this.htmlSelectConstructionType.displayText,
637
+ constructionDetailType: this.htmlSelectConstructionDetailType.displayText,
638
+ location: `${this.htmlSelectBuilding.displayText} ${this.htmlSelectLevel.displayText}층`,
639
+ inspectionDrawingType: this.selectedInspectionDrawingType.name,
640
+ inspectionParts: this.checklist.inspectionParts
641
+ }
642
+ patch.checklistItem = this.checklist.checklistItems?.map(item => {
643
+ return {
644
+ name: item.name,
645
+ mainType: item.mainType,
646
+ detailType: item.detailType,
647
+ inspctionCriteria: item.inspctionCriteria
648
+ }
649
+ })
650
+
651
+ const response = await client.mutate({
652
+ mutation: gql`
653
+ mutation CreateBuildingInspection($patch: NewBuildingInspection!) {
654
+ createBuildingInspection(patch: $patch) {
655
+ id
656
+ }
657
+ }
658
+ `,
659
+ variables: {
660
+ patch
661
+ }
662
+ })
663
+
664
+ if (!response.errors) {
665
+ notify({ message: '검측 요청서를 등록하였습니다.' })
666
+ this.requestRefresh()
667
+ this._close()
668
+ } else {
669
+ notify({ message: response.errors?.[0]?.message || '검측 요청서 등록에 실패하였습니다.', level: 'error' })
670
+ }
671
+ }
672
+ // Input 요소의 값이 변경될 때 호출되는 콜백 함수
673
+ private _onInputChange(event: InputEvent) {
674
+ const target = event.target as HTMLInputElement
675
+ this[target.name] = target.value
676
+ this.checklist = { ...this.checklist, name: target.value }
677
+ }
678
+
679
+ // 체크리스트 아이템 데이터 갱신
680
+ private onChangeGird() {
681
+ const checklistDetailTypes = Object.fromEntries(this.checklistDetailTypes.map(item => [item.value, item.display]))
682
+ const grist = this.grist
683
+
684
+ // grist field-change가 오는 시점이 데이터 변경 전이라 setTimeout으로 변경
685
+ setTimeout(() => {
686
+ this.checklist.checklistItems = grist.dirtyData.records.map((row, idx) => {
687
+ return {
688
+ ...row,
689
+ detailType: checklistDetailTypes[row.detailType],
690
+ sequence: idx
691
+ }
692
+ })
693
+ this.checklist = { ...this.checklist }
694
+ }, 100)
695
+ }
696
+ }