@dssp/project 0.0.2

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 (195) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/assets/images/hatiolab-logo.png +0 -0
  3. package/assets/images/o-mark.png +0 -0
  4. package/assets/images/x-mark.png +0 -0
  5. package/client/bootstrap.ts +0 -0
  6. package/client/index.ts +0 -0
  7. package/client/pages/checklist/checklist-importer.ts +96 -0
  8. package/client/pages/checklist/checklist-list-page.ts +355 -0
  9. package/client/pages/lib/waether.ts +159 -0
  10. package/client/pages/project/ox-progress-circle.ts +133 -0
  11. package/client/pages/project/project-create-popup.ts +148 -0
  12. package/client/pages/project/project-detail.ts +618 -0
  13. package/client/pages/project/project-list.ts +354 -0
  14. package/client/pages/project/project-plan-management.ts +437 -0
  15. package/client/pages/project/project-schedule-list.ts +280 -0
  16. package/client/pages/project/project-schedule.ts +248 -0
  17. package/client/pages/project/project-setting-list.ts +298 -0
  18. package/client/pages/project/project-update.ts +797 -0
  19. package/client/pages/resource/resource-importer.ts +96 -0
  20. package/client/pages/resource/resource-list-page.ts +355 -0
  21. package/client/pages/task/task-importer.ts +96 -0
  22. package/client/pages/task/task-list-page.ts +355 -0
  23. package/client/route.ts +39 -0
  24. package/client/tsconfig.json +11 -0
  25. package/dist-client/bootstrap.d.ts +0 -0
  26. package/dist-client/bootstrap.js +2 -0
  27. package/dist-client/bootstrap.js.map +1 -0
  28. package/dist-client/index.d.ts +0 -0
  29. package/dist-client/index.js +2 -0
  30. package/dist-client/index.js.map +1 -0
  31. package/dist-client/pages/checklist/checklist-importer.d.ts +9 -0
  32. package/dist-client/pages/checklist/checklist-importer.js +100 -0
  33. package/dist-client/pages/checklist/checklist-importer.js.map +1 -0
  34. package/dist-client/pages/checklist/checklist-list-page.d.ts +62 -0
  35. package/dist-client/pages/checklist/checklist-list-page.js +331 -0
  36. package/dist-client/pages/checklist/checklist-list-page.js.map +1 -0
  37. package/dist-client/pages/lib/waether.d.ts +6 -0
  38. package/dist-client/pages/lib/waether.js +152 -0
  39. package/dist-client/pages/lib/waether.js.map +1 -0
  40. package/dist-client/pages/project/ox-progress-circle.d.ts +41 -0
  41. package/dist-client/pages/project/ox-progress-circle.js +182 -0
  42. package/dist-client/pages/project/ox-progress-circle.js.map +1 -0
  43. package/dist-client/pages/project/project-create-popup.d.ts +14 -0
  44. package/dist-client/pages/project/project-create-popup.js +153 -0
  45. package/dist-client/pages/project/project-create-popup.js.map +1 -0
  46. package/dist-client/pages/project/project-detail.d.ts +35 -0
  47. package/dist-client/pages/project/project-detail.js +617 -0
  48. package/dist-client/pages/project/project-detail.js.map +1 -0
  49. package/dist-client/pages/project/project-list.d.ts +88 -0
  50. package/dist-client/pages/project/project-list.js +303 -0
  51. package/dist-client/pages/project/project-list.js.map +1 -0
  52. package/dist-client/pages/project/project-plan-management.d.ts +27 -0
  53. package/dist-client/pages/project/project-plan-management.js +438 -0
  54. package/dist-client/pages/project/project-plan-management.js.map +1 -0
  55. package/dist-client/pages/project/project-schedule-list.d.ts +18 -0
  56. package/dist-client/pages/project/project-schedule-list.js +292 -0
  57. package/dist-client/pages/project/project-schedule-list.js.map +1 -0
  58. package/dist-client/pages/project/project-schedule.d.ts +23 -0
  59. package/dist-client/pages/project/project-schedule.js +256 -0
  60. package/dist-client/pages/project/project-schedule.js.map +1 -0
  61. package/dist-client/pages/project/project-setting-list.d.ts +23 -0
  62. package/dist-client/pages/project/project-setting-list.js +307 -0
  63. package/dist-client/pages/project/project-setting-list.js.map +1 -0
  64. package/dist-client/pages/project/project-update.d.ts +24 -0
  65. package/dist-client/pages/project/project-update.js +797 -0
  66. package/dist-client/pages/project/project-update.js.map +1 -0
  67. package/dist-client/pages/resource/resource-importer.d.ts +9 -0
  68. package/dist-client/pages/resource/resource-importer.js +100 -0
  69. package/dist-client/pages/resource/resource-importer.js.map +1 -0
  70. package/dist-client/pages/resource/resource-list-page.d.ts +62 -0
  71. package/dist-client/pages/resource/resource-list-page.js +331 -0
  72. package/dist-client/pages/resource/resource-list-page.js.map +1 -0
  73. package/dist-client/pages/task/task-importer.d.ts +9 -0
  74. package/dist-client/pages/task/task-importer.js +100 -0
  75. package/dist-client/pages/task/task-importer.js.map +1 -0
  76. package/dist-client/pages/task/task-list-page.d.ts +62 -0
  77. package/dist-client/pages/task/task-list-page.js +331 -0
  78. package/dist-client/pages/task/task-list-page.js.map +1 -0
  79. package/dist-client/route.d.ts +1 -0
  80. package/dist-client/route.js +32 -0
  81. package/dist-client/route.js.map +1 -0
  82. package/dist-client/tsconfig.tsbuildinfo +1 -0
  83. package/dist-server/controllers/index.js +1 -0
  84. package/dist-server/controllers/index.js.map +1 -0
  85. package/dist-server/controllers/project-to-excel.js +30 -0
  86. package/dist-server/controllers/project-to-excel.js.map +1 -0
  87. package/dist-server/index.js +6 -0
  88. package/dist-server/index.js.map +1 -0
  89. package/dist-server/middlewares/index.js +8 -0
  90. package/dist-server/middlewares/index.js.map +1 -0
  91. package/dist-server/routes.js +105 -0
  92. package/dist-server/routes.js.map +1 -0
  93. package/dist-server/service/check-item/check-item-mutation.js +129 -0
  94. package/dist-server/service/check-item/check-item-mutation.js.map +1 -0
  95. package/dist-server/service/check-item/check-item-query.js +86 -0
  96. package/dist-server/service/check-item/check-item-query.js.map +1 -0
  97. package/dist-server/service/check-item/check-item-type.js +69 -0
  98. package/dist-server/service/check-item/check-item-type.js.map +1 -0
  99. package/dist-server/service/check-item/check-item.js +84 -0
  100. package/dist-server/service/check-item/check-item.js.map +1 -0
  101. package/dist-server/service/check-item/index.js +9 -0
  102. package/dist-server/service/check-item/index.js.map +1 -0
  103. package/dist-server/service/checklist/checklist-mutation.js +129 -0
  104. package/dist-server/service/checklist/checklist-mutation.js.map +1 -0
  105. package/dist-server/service/checklist/checklist-query.js +86 -0
  106. package/dist-server/service/checklist/checklist-query.js.map +1 -0
  107. package/dist-server/service/checklist/checklist-type.js +69 -0
  108. package/dist-server/service/checklist/checklist-type.js.map +1 -0
  109. package/dist-server/service/checklist/checklist.js +120 -0
  110. package/dist-server/service/checklist/checklist.js.map +1 -0
  111. package/dist-server/service/checklist/index.js +9 -0
  112. package/dist-server/service/checklist/index.js.map +1 -0
  113. package/dist-server/service/index.js +36 -0
  114. package/dist-server/service/index.js.map +1 -0
  115. package/dist-server/service/project/index.js +11 -0
  116. package/dist-server/service/project/index.js.map +1 -0
  117. package/dist-server/service/project/project-mutation.js +190 -0
  118. package/dist-server/service/project/project-mutation.js.map +1 -0
  119. package/dist-server/service/project/project-query.js +143 -0
  120. package/dist-server/service/project/project-query.js.map +1 -0
  121. package/dist-server/service/project/project-type.js +106 -0
  122. package/dist-server/service/project/project-type.js.map +1 -0
  123. package/dist-server/service/project/project.js +146 -0
  124. package/dist-server/service/project/project.js.map +1 -0
  125. package/dist-server/service/resource/index.js +9 -0
  126. package/dist-server/service/resource/index.js.map +1 -0
  127. package/dist-server/service/resource/resource-mutation.js +129 -0
  128. package/dist-server/service/resource/resource-mutation.js.map +1 -0
  129. package/dist-server/service/resource/resource-query.js +86 -0
  130. package/dist-server/service/resource/resource-query.js.map +1 -0
  131. package/dist-server/service/resource/resource-type.js +69 -0
  132. package/dist-server/service/resource/resource-type.js.map +1 -0
  133. package/dist-server/service/resource/resource.js +62 -0
  134. package/dist-server/service/resource/resource.js.map +1 -0
  135. package/dist-server/service/task/index.js +9 -0
  136. package/dist-server/service/task/index.js.map +1 -0
  137. package/dist-server/service/task/task-mutation.js +129 -0
  138. package/dist-server/service/task/task-mutation.js.map +1 -0
  139. package/dist-server/service/task/task-query.js +86 -0
  140. package/dist-server/service/task/task-query.js.map +1 -0
  141. package/dist-server/service/task/task-type.js +69 -0
  142. package/dist-server/service/task/task-type.js.map +1 -0
  143. package/dist-server/service/task/task.js +106 -0
  144. package/dist-server/service/task/task.js.map +1 -0
  145. package/dist-server/tsconfig.tsbuildinfo +1 -0
  146. package/helps/management/alarm.md +160 -0
  147. package/helps/management/alter-video.md +160 -0
  148. package/helps/management/cctv.md +160 -0
  149. package/helps/management/device.md +160 -0
  150. package/helps/management/parking.md +160 -0
  151. package/helps/management/site.md +160 -0
  152. package/helps/management/sun-pnl.md +160 -0
  153. package/helps/project/checklist.md +160 -0
  154. package/helps/project/project.md +160 -0
  155. package/helps/project/resource.md +160 -0
  156. package/helps/project/task.md +160 -0
  157. package/package.json +38 -0
  158. package/server/controllers/index.ts +0 -0
  159. package/server/controllers/project-to-excel.ts +40 -0
  160. package/server/index.ts +3 -0
  161. package/server/middlewares/index.ts +3 -0
  162. package/server/routes.ts +108 -0
  163. package/server/service/check-item/check-item-mutation.ts +142 -0
  164. package/server/service/check-item/check-item-query.ts +56 -0
  165. package/server/service/check-item/check-item-type.ts +49 -0
  166. package/server/service/check-item/check-item.ts +74 -0
  167. package/server/service/check-item/index.ts +6 -0
  168. package/server/service/checklist/checklist-mutation.ts +142 -0
  169. package/server/service/checklist/checklist-query.ts +56 -0
  170. package/server/service/checklist/checklist-type.ts +49 -0
  171. package/server/service/checklist/checklist.ts +105 -0
  172. package/server/service/checklist/index.ts +6 -0
  173. package/server/service/index.ts +35 -0
  174. package/server/service/project/index.ts +8 -0
  175. package/server/service/project/project-mutation.ts +201 -0
  176. package/server/service/project/project-query.ts +103 -0
  177. package/server/service/project/project-type.ts +71 -0
  178. package/server/service/project/project.ts +131 -0
  179. package/server/service/resource/index.ts +6 -0
  180. package/server/service/resource/resource-mutation.ts +139 -0
  181. package/server/service/resource/resource-query.ts +56 -0
  182. package/server/service/resource/resource-type.ts +49 -0
  183. package/server/service/resource/resource.ts +56 -0
  184. package/server/service/task/index.ts +6 -0
  185. package/server/service/task/task-mutation.ts +136 -0
  186. package/server/service/task/task-query.ts +56 -0
  187. package/server/service/task/task-type.ts +49 -0
  188. package/server/service/task/task.ts +97 -0
  189. package/server/tsconfig.json +10 -0
  190. package/things-factory.config.js +20 -0
  191. package/translations/en.json +1 -0
  192. package/translations/ja.json +1 -0
  193. package/translations/ko.json +9 -0
  194. package/translations/ms.json +1 -0
  195. package/translations/zh.json +1 -0
@@ -0,0 +1,354 @@
1
+ import { PageView } from '@operato/shell'
2
+ import { css, html } from 'lit'
3
+ import { customElement, state } from 'lit/decorators.js'
4
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements'
5
+ import { client } from '@operato/graphql'
6
+ import gql from 'graphql-tag'
7
+ import { Attachment } from '@things-factory/attachment-base'
8
+ import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
9
+
10
+ export enum ProjectStatus {
11
+ 'PROCEEDING' = '10',
12
+ 'COMPLICATED' = '20'
13
+ }
14
+ export enum InspectionType {
15
+ REQUEST = 'REQUEST',
16
+ PASS = 'PASS',
17
+ FAIL = 'FAIL'
18
+ }
19
+
20
+ export interface Project {
21
+ id?: string
22
+ name: string
23
+ startDate?: string
24
+ endDate?: string
25
+ mainPhoto?: Attachment
26
+ mainPhotoUpload?: FileUpload
27
+ totalProgress?: number
28
+ weeklyProgress?: number
29
+ kpi?: number
30
+ inspPassRate?: number
31
+ robotProgressRate?: number
32
+ structuralSafetyRate?: number
33
+ buildingComplex: BuildingComplex
34
+ }
35
+ export interface BuildingComplex {
36
+ id?: string
37
+ address?: string
38
+ latitude?: number
39
+ longitude?: number
40
+ area?: number
41
+ constructionCompany?: string
42
+ clientCompany?: string
43
+ designCompany?: string
44
+ supervisoryCompany?: string
45
+ drawing?: Attachment
46
+ drawingUpload?: FileUpload
47
+ constructionType?: string
48
+ constructionCost?: number
49
+ etc?: string
50
+ householdCount?: number
51
+ buildingCount?: number
52
+ notice?: string
53
+ planXScale?: number
54
+ planYScale?: number
55
+ buildings?: Building[]
56
+ }
57
+ export interface Building {
58
+ id?: string
59
+ name: string | undefined
60
+ floorCount: number | undefined
61
+ drawing?: Attachment
62
+ drawingUpload?: FileUpload
63
+ buildingLevels?: BuildingLevel[]
64
+ }
65
+
66
+ export interface BuildingLevel {
67
+ id?: string
68
+ floor?: number
69
+ mainDrawing?: Attachment
70
+ mainDrawingUpload?: FileUpload
71
+ buildingInspections?: BuildingInspection[]
72
+ }
73
+
74
+ export interface BuildingInspection {
75
+ id?: string
76
+ indexX?: number
77
+ indexY?: number
78
+ type?: InspectionType
79
+ detail?: string
80
+ // buildingInspectionAttachments?: BuildingInspectionAttachment[]
81
+ }
82
+
83
+ @customElement('project-list')
84
+ export class ProjectListPage extends ScopedElementsMixin(PageView) {
85
+ static styles = [
86
+ css`
87
+ :host {
88
+ display: flex;
89
+ flex-direction: column;
90
+ overflow-y: auto;
91
+
92
+ width: 100%;
93
+ height: 100%;
94
+ background-color: #f7f7f7;
95
+
96
+ --grid-record-emphasized-background-color: red;
97
+ --grid-record-emphasized-color: yellow;
98
+ }
99
+
100
+ div[header] {
101
+ display: flex;
102
+ height: 100px;
103
+ align-items: center;
104
+ background-color: #2ea4df1a;
105
+ border: 1px solid #2ea4df33;
106
+ margin: 15px 23px;
107
+ font-size: 18px;
108
+ padding: 7px;
109
+ border-radius: 5px;
110
+
111
+ md-filled-text-field[type='search'] {
112
+ margin-left: 5px;
113
+ margin-right: 26px;
114
+
115
+ --md-filled-text-field-container-shape: 0px;
116
+ --md-sys-color-primary: #006a6a;
117
+ --md-sys-color-surface-container-highest: transparent;
118
+ --md-filled-text-field-label-text-color: #999999;
119
+ --md-filled-text-field-input-text-color: #4e5055;
120
+ }
121
+
122
+ md-elevated-button[add-project] {
123
+ font-weight: bold;
124
+ font-size: 16px;
125
+ margin-left: 17px;
126
+ padding: 13px 20px;
127
+
128
+ --md-sys-color-surface-container-low: #24be7b;
129
+ --md-sys-color-primary: #ffffff;
130
+ --md-elevated-button-container-shape: 7px;
131
+ }
132
+ }
133
+
134
+ div[body] {
135
+ div[project-container] {
136
+ height: 140px;
137
+ margin: 17px 23px;
138
+ background-color: #ffffff;
139
+ border: 1px solid #cccccc80;
140
+ border-radius: 5px;
141
+
142
+ & > a {
143
+ display: flex;
144
+ width: 100%;
145
+ height: 100%;
146
+ text-decoration: none;
147
+ color: #000;
148
+ }
149
+
150
+ img[project-img] {
151
+ width: 285px;
152
+ background-color: #cccccc80;
153
+ }
154
+
155
+ span[project-info] {
156
+ flex: 0.45;
157
+ padding: 6px 15px;
158
+ font-size: 16px;
159
+
160
+ white-space: nowrap;
161
+ overflow: hidden;
162
+ text-overflow: ellipsis;
163
+
164
+ div[name] {
165
+ color: #2e79be;
166
+ font-weight: bold;
167
+ font-size: 19px;
168
+ margin-bottom: 2px;
169
+ }
170
+ }
171
+
172
+ span[project-state] {
173
+ flex: 0.55;
174
+ padding: 10px 20px;
175
+
176
+ & > div {
177
+ margin-bottom: 3px;
178
+ }
179
+
180
+ div[progress] {
181
+ position: relative;
182
+
183
+ md-linear-progress {
184
+ --md-linear-progress-track-height: 18px;
185
+ --md-linear-progress-active-indicator-height: 18px;
186
+ --md-linear-progress-track-shape: 5px;
187
+ --md-sys-color-primary: #0595e51a;
188
+ --md-sys-color-surface-container-highest: #0595e533;
189
+ }
190
+
191
+ span {
192
+ position: absolute;
193
+ top: 0;
194
+ left: 12px;
195
+ font-size: 12px;
196
+ font-weight: bold;
197
+ color: #2e79be;
198
+
199
+ &:last-child {
200
+ left: unset;
201
+ right: 12px;
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
207
+ }
208
+ `
209
+ ]
210
+
211
+ get context() {
212
+ return {
213
+ title: '진행중 프로젝트'
214
+ }
215
+ }
216
+
217
+ @state() private projectName: string = ''
218
+ @state() private projectList: Project[] = []
219
+ @state() private projectCount: number = 0
220
+
221
+ render() {
222
+ return html`
223
+ <div header>
224
+ <label>프로젝트 이름</label>
225
+ <md-filled-text-field
226
+ name="projectName"
227
+ type="search"
228
+ label="프로젝트 이름"
229
+ .value=${this.projectName}
230
+ @input=${this._onInputChange}
231
+ @keypress=${this._onKeypress}
232
+ >
233
+ <md-icon slot="leading-icon">search</md-icon>
234
+ </md-filled-text-field>
235
+
236
+ <strong>총 ${this.projectCount}개</strong>
237
+ </div>
238
+
239
+ <div body>
240
+ ${this.projectList?.map((project: Project) => {
241
+ return html`
242
+ <div project-container>
243
+ <a href=${`project-detail/${project.id}`}>
244
+ <img project-img src=${project.mainPhoto?.fullpath || ''} />
245
+
246
+ <span project-info>
247
+ <div name>${project.name}</div>
248
+ <div content>${project.buildingComplex.address}</div>
249
+ <div content>면적: ${project.buildingComplex.area}㎡</div>
250
+ <div content>착공~준공: ${project.startDate}~${project.endDate}</div>
251
+ <div content>발주처: <strong>${project.buildingComplex.clientCompany}</strong></div>
252
+ </span>
253
+
254
+ <span project-state>
255
+ <div progress>
256
+ <md-linear-progress buffer="100" max="100" value=${project.totalProgress || 0}>
257
+ </md-linear-progress>
258
+ <span>전체</span>
259
+ <span>${project.totalProgress || 0}%</span>
260
+ </div>
261
+ <div progress>
262
+ <md-linear-progress buffer="100" max="100" value=${project.weeklyProgress || 0}>
263
+ </md-linear-progress>
264
+ <span>주간</span>
265
+ <span>${project.weeklyProgress || 0}%</span>
266
+ </div>
267
+ <div progress>
268
+ <md-linear-progress buffer="100" max="100" value=${project.kpi || 0}> </md-linear-progress>
269
+ <span>KPI</span>
270
+ <span>${project.kpi || 0}%</span>
271
+ </div>
272
+ <div progress>
273
+ <md-linear-progress buffer="100" max="100" value=${project.inspPassRate || 0}> </md-linear-progress>
274
+ <span>Inspection Passing Rate</span>
275
+ <span>${project.inspPassRate || 0}%</span>
276
+ </div>
277
+ <div progress>
278
+ <md-linear-progress buffer="100" max="100" value=${project.robotProgressRate || 0}>
279
+ </md-linear-progress>
280
+ <span>Robot Progress</span>
281
+ <span>${project.robotProgressRate || 0}%</span>
282
+ </div>
283
+ <div progress>
284
+ <md-linear-progress buffer="100" max="100" value=${project.structuralSafetyRate || 0}>
285
+ </md-linear-progress>
286
+ <span>Structural safety</span>
287
+ <span>${project.structuralSafetyRate || 0}%</span>
288
+ </div>
289
+ </span>
290
+ </a>
291
+ </div>
292
+ `
293
+ })}
294
+ </div>
295
+ `
296
+ }
297
+
298
+ async pageInitialized(lifecycle: any) {
299
+ this.getProjectList()
300
+ }
301
+
302
+ async pageUpdated(changes: any, lifecycle: any) {}
303
+
304
+ async getProjectList() {
305
+ const response = await client.query({
306
+ query: gql`
307
+ query Projects($projectName: String!) {
308
+ projects(projectName: $projectName) {
309
+ items {
310
+ id
311
+ name
312
+ startDate
313
+ endDate
314
+ mainPhoto {
315
+ fullpath
316
+ }
317
+ totalProgress
318
+ weeklyProgress
319
+ kpi
320
+ inspPassRate
321
+ robotProgressRate
322
+ structuralSafetyRate
323
+ buildingComplex {
324
+ address
325
+ area
326
+ clientCompany
327
+ }
328
+ }
329
+ total
330
+ }
331
+ }
332
+ `,
333
+ variables: {
334
+ projectName: this.projectName || ''
335
+ }
336
+ })
337
+
338
+ this.projectList = response.data.projects?.items || []
339
+ this.projectCount = response.data.projects?.total || 0
340
+ }
341
+
342
+ // Input 요소의 값이 변경될 때 호출되는 콜백 함수
343
+ private _onInputChange(event: InputEvent) {
344
+ const target = event.target as HTMLInputElement
345
+ this[target.name] = target.value
346
+ }
347
+
348
+ // 검색창에서 엔터입력시 검색
349
+ private _onKeypress(event: KeyboardEvent) {
350
+ if (event.code === 'Enter') {
351
+ this.getProjectList()
352
+ }
353
+ }
354
+ }