@dssp/project 0.0.2 → 0.0.6

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 (196) hide show
  1. package/client/pages/checklist/checklist-importer.ts +6 -8
  2. package/client/pages/checklist/checklist-list-page.ts +10 -25
  3. package/client/pages/project/popup/popup-plan-upload.ts +138 -0
  4. package/client/pages/project/{project-create-popup.ts → popup/popup-project-create.ts} +2 -3
  5. package/client/pages/project/project-detail.ts +11 -11
  6. package/client/pages/project/project-list.ts +17 -10
  7. package/client/pages/project/project-plan-management.ts +117 -39
  8. package/client/pages/project/project-schedule-list.ts +2 -0
  9. package/client/pages/project/project-schedule.ts +296 -7
  10. package/client/pages/project/project-setting-list.ts +10 -6
  11. package/client/pages/project/project-update.ts +5 -2
  12. package/client/pages/resource/construction-type-management.ts +211 -0
  13. package/client/pages/resource/manager-management.ts +202 -0
  14. package/client/pages/resource/worker-type-management.ts +226 -0
  15. package/client/pages/task/task-importer.ts +6 -8
  16. package/client/pages/task/task-list-page.ts +10 -25
  17. package/client/route.ts +8 -4
  18. package/dist-client/pages/checklist/checklist-importer.d.ts +1 -0
  19. package/dist-client/pages/checklist/checklist-importer.js +3 -2
  20. package/dist-client/pages/checklist/checklist-importer.js.map +1 -1
  21. package/dist-client/pages/checklist/checklist-list-page.d.ts +1 -0
  22. package/dist-client/pages/checklist/checklist-list-page.js +8 -16
  23. package/dist-client/pages/checklist/checklist-list-page.js.map +1 -1
  24. package/dist-client/pages/project/popup/popup-plan-upload.d.ts +10 -0
  25. package/dist-client/pages/project/popup/popup-plan-upload.js +139 -0
  26. package/dist-client/pages/project/popup/popup-plan-upload.js.map +1 -0
  27. package/dist-client/pages/project/{project-create-popup.d.ts → popup/popup-project-create.d.ts} +1 -3
  28. package/dist-client/pages/project/{project-create-popup.js → popup/popup-project-create.js} +9 -10
  29. package/dist-client/pages/project/popup/popup-project-create.js.map +1 -0
  30. package/dist-client/pages/project/project-detail.d.ts +5 -4
  31. package/dist-client/pages/project/project-detail.js +9 -10
  32. package/dist-client/pages/project/project-detail.js.map +1 -1
  33. package/dist-client/pages/project/project-list.d.ts +12 -2
  34. package/dist-client/pages/project/project-list.js +11 -14
  35. package/dist-client/pages/project/project-list.js.map +1 -1
  36. package/dist-client/pages/project/project-plan-management.d.ts +9 -4
  37. package/dist-client/pages/project/project-plan-management.js +105 -35
  38. package/dist-client/pages/project/project-plan-management.js.map +1 -1
  39. package/dist-client/pages/project/project-schedule-list.d.ts +1 -0
  40. package/dist-client/pages/project/project-schedule-list.js +1 -0
  41. package/dist-client/pages/project/project-schedule-list.js.map +1 -1
  42. package/dist-client/pages/project/project-schedule.d.ts +10 -3
  43. package/dist-client/pages/project/project-schedule.js +294 -7
  44. package/dist-client/pages/project/project-schedule.js.map +1 -1
  45. package/dist-client/pages/project/project-setting-list.d.ts +3 -2
  46. package/dist-client/pages/project/project-setting-list.js +9 -6
  47. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  48. package/dist-client/pages/project/project-update.d.ts +3 -2
  49. package/dist-client/pages/project/project-update.js +4 -2
  50. package/dist-client/pages/project/project-update.js.map +1 -1
  51. package/dist-client/pages/resource/construction-type-management.d.ts +22 -0
  52. package/dist-client/pages/resource/construction-type-management.js +208 -0
  53. package/dist-client/pages/resource/construction-type-management.js.map +1 -0
  54. package/dist-client/pages/resource/manager-management.d.ts +31 -0
  55. package/dist-client/pages/resource/manager-management.js +196 -0
  56. package/dist-client/pages/resource/manager-management.js.map +1 -0
  57. package/dist-client/pages/resource/worker-type-management.d.ts +28 -0
  58. package/dist-client/pages/resource/worker-type-management.js +222 -0
  59. package/dist-client/pages/resource/worker-type-management.js.map +1 -0
  60. package/dist-client/pages/task/task-importer.d.ts +1 -0
  61. package/dist-client/pages/task/task-importer.js +3 -2
  62. package/dist-client/pages/task/task-importer.js.map +1 -1
  63. package/dist-client/pages/task/task-list-page.d.ts +1 -0
  64. package/dist-client/pages/task/task-list-page.js +8 -16
  65. package/dist-client/pages/task/task-list-page.js.map +1 -1
  66. package/dist-client/route.d.ts +1 -1
  67. package/dist-client/route.js +7 -4
  68. package/dist-client/route.js.map +1 -1
  69. package/dist-client/tsconfig.tsbuildinfo +1 -1
  70. package/dist-server/controllers/index.d.ts +0 -0
  71. package/dist-server/controllers/project-to-excel.d.ts +7 -0
  72. package/dist-server/index.d.ts +2 -0
  73. package/dist-server/middlewares/index.d.ts +1 -0
  74. package/dist-server/routes.d.ts +1 -0
  75. package/dist-server/service/check-item/check-item-mutation.d.ts +10 -0
  76. package/dist-server/service/check-item/check-item-query.d.ts +11 -0
  77. package/dist-server/service/check-item/check-item-type.d.ts +18 -0
  78. package/dist-server/service/check-item/check-item.d.ts +18 -0
  79. package/dist-server/service/check-item/index.d.ts +5 -0
  80. package/dist-server/service/checklist/checklist-mutation.d.ts +10 -0
  81. package/dist-server/service/checklist/checklist-query.d.ts +11 -0
  82. package/dist-server/service/checklist/checklist-type.d.ts +18 -0
  83. package/dist-server/service/checklist/checklist.d.ts +26 -0
  84. package/dist-server/service/checklist/index.d.ts +5 -0
  85. package/dist-server/service/construction-type/construction-type-mutation.d.ts +6 -0
  86. package/dist-server/service/construction-type/construction-type-mutation.js +64 -0
  87. package/dist-server/service/construction-type/construction-type-mutation.js.map +1 -0
  88. package/dist-server/service/construction-type/construction-type-query.d.ts +11 -0
  89. package/dist-server/service/construction-type/construction-type-query.js +78 -0
  90. package/dist-server/service/construction-type/construction-type-query.js.map +1 -0
  91. package/dist-server/service/construction-type/construction-type-type.d.ts +11 -0
  92. package/dist-server/service/construction-type/construction-type-type.js +43 -0
  93. package/dist-server/service/construction-type/construction-type-type.js.map +1 -0
  94. package/dist-server/service/construction-type/construction-type.d.ts +16 -0
  95. package/dist-server/service/construction-type/construction-type.js +77 -0
  96. package/dist-server/service/construction-type/construction-type.js.map +1 -0
  97. package/dist-server/service/construction-type/index.d.ts +5 -0
  98. package/dist-server/service/construction-type/index.js +9 -0
  99. package/dist-server/service/construction-type/index.js.map +1 -0
  100. package/dist-server/service/index.d.ts +12 -0
  101. package/dist-server/service/index.js +12 -4
  102. package/dist-server/service/index.js.map +1 -1
  103. package/dist-server/service/manager/index.d.ts +5 -0
  104. package/dist-server/service/manager/index.js +9 -0
  105. package/dist-server/service/manager/index.js.map +1 -0
  106. package/dist-server/service/manager/manager-mutation.d.ts +5 -0
  107. package/dist-server/service/manager/manager-mutation.js +39 -0
  108. package/dist-server/service/manager/manager-mutation.js.map +1 -0
  109. package/dist-server/service/manager/manager-query.d.ts +4 -0
  110. package/dist-server/service/manager/manager-query.js +39 -0
  111. package/dist-server/service/manager/manager-query.js.map +1 -0
  112. package/dist-server/service/manager/manager-type.d.ts +15 -0
  113. package/dist-server/service/manager/manager-type.js +62 -0
  114. package/dist-server/service/manager/manager-type.js.map +1 -0
  115. package/dist-server/service/manager/manager.d.ts +8 -0
  116. package/dist-server/service/manager/manager.js +41 -0
  117. package/dist-server/service/manager/manager.js.map +1 -0
  118. package/dist-server/service/project/index.d.ts +7 -0
  119. package/dist-server/service/project/project-mutation.d.ts +9 -0
  120. package/dist-server/service/project/project-mutation.js +61 -55
  121. package/dist-server/service/project/project-mutation.js.map +1 -1
  122. package/dist-server/service/project/project-query.d.ts +16 -0
  123. package/dist-server/service/project/project-query.js +3 -3
  124. package/dist-server/service/project/project-query.js.map +1 -1
  125. package/dist-server/service/project/project-type.d.ts +29 -0
  126. package/dist-server/service/project/project-type.js +1 -2
  127. package/dist-server/service/project/project-type.js.map +1 -1
  128. package/dist-server/service/project/project.d.ts +35 -0
  129. package/dist-server/service/project/project.js +1 -2
  130. package/dist-server/service/project/project.js.map +1 -1
  131. package/dist-server/service/task/index.d.ts +5 -0
  132. package/dist-server/service/task/task-mutation.d.ts +10 -0
  133. package/dist-server/service/task/task-query.d.ts +11 -0
  134. package/dist-server/service/task/task-type.d.ts +18 -0
  135. package/dist-server/service/task/task.d.ts +25 -0
  136. package/dist-server/service/worker-type/index.d.ts +5 -0
  137. package/dist-server/service/worker-type/index.js +9 -0
  138. package/dist-server/service/worker-type/index.js.map +1 -0
  139. package/dist-server/service/worker-type/worker-type-mutation.d.ts +6 -0
  140. package/dist-server/service/worker-type/worker-type-mutation.js +64 -0
  141. package/dist-server/service/worker-type/worker-type-mutation.js.map +1 -0
  142. package/dist-server/service/worker-type/worker-type-query.d.ts +11 -0
  143. package/dist-server/service/{resource/resource-query.js → worker-type/worker-type-query.js} +31 -39
  144. package/dist-server/service/worker-type/worker-type-query.js.map +1 -0
  145. package/dist-server/service/worker-type/worker-type-type.d.ts +11 -0
  146. package/dist-server/service/worker-type/worker-type-type.js +43 -0
  147. package/dist-server/service/worker-type/worker-type-type.js.map +1 -0
  148. package/dist-server/service/worker-type/worker-type.d.ts +16 -0
  149. package/dist-server/service/{resource/resource.js → worker-type/worker-type.js} +35 -20
  150. package/dist-server/service/worker-type/worker-type.js.map +1 -0
  151. package/dist-server/tsconfig.tsbuildinfo +1 -1
  152. package/package.json +3 -3
  153. package/server/service/construction-type/construction-type-mutation.ts +66 -0
  154. package/server/service/construction-type/construction-type-query.ts +47 -0
  155. package/server/service/construction-type/construction-type-type.ts +26 -0
  156. package/server/service/{resource/resource.ts → construction-type/construction-type.ts} +18 -6
  157. package/server/service/construction-type/index.ts +6 -0
  158. package/server/service/index.ts +12 -4
  159. package/server/service/manager/index.ts +6 -0
  160. package/server/service/manager/manager-mutation.ts +42 -0
  161. package/server/service/manager/manager-query.ts +28 -0
  162. package/server/service/manager/manager-type.ts +40 -0
  163. package/server/service/manager/manager.ts +29 -0
  164. package/server/service/project/project-mutation.ts +101 -79
  165. package/server/service/project/project-query.ts +5 -8
  166. package/server/service/worker-type/index.ts +6 -0
  167. package/server/service/worker-type/worker-type-mutation.ts +66 -0
  168. package/server/service/worker-type/worker-type-query.ts +47 -0
  169. package/server/service/worker-type/worker-type-type.ts +26 -0
  170. package/server/service/worker-type/worker-type.ts +68 -0
  171. package/things-factory.config.js +3 -0
  172. package/client/pages/project/ox-progress-circle.ts +0 -133
  173. package/client/pages/resource/resource-importer.ts +0 -96
  174. package/client/pages/resource/resource-list-page.ts +0 -355
  175. package/dist-client/pages/project/ox-progress-circle.d.ts +0 -41
  176. package/dist-client/pages/project/ox-progress-circle.js +0 -182
  177. package/dist-client/pages/project/ox-progress-circle.js.map +0 -1
  178. package/dist-client/pages/project/project-create-popup.js.map +0 -1
  179. package/dist-client/pages/resource/resource-importer.d.ts +0 -9
  180. package/dist-client/pages/resource/resource-importer.js +0 -100
  181. package/dist-client/pages/resource/resource-importer.js.map +0 -1
  182. package/dist-client/pages/resource/resource-list-page.d.ts +0 -62
  183. package/dist-client/pages/resource/resource-list-page.js +0 -331
  184. package/dist-client/pages/resource/resource-list-page.js.map +0 -1
  185. package/dist-server/service/resource/index.js +0 -9
  186. package/dist-server/service/resource/index.js.map +0 -1
  187. package/dist-server/service/resource/resource-mutation.js +0 -129
  188. package/dist-server/service/resource/resource-mutation.js.map +0 -1
  189. package/dist-server/service/resource/resource-query.js.map +0 -1
  190. package/dist-server/service/resource/resource-type.js +0 -69
  191. package/dist-server/service/resource/resource-type.js.map +0 -1
  192. package/dist-server/service/resource/resource.js.map +0 -1
  193. package/server/service/resource/index.ts +0 -6
  194. package/server/service/resource/resource-mutation.ts +0 -139
  195. package/server/service/resource/resource-query.ts +0 -56
  196. package/server/service/resource/resource-type.ts +0 -49
@@ -0,0 +1,202 @@
1
+ import '@operato/data-grist'
2
+
3
+ import { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'
4
+ import { PageView } from '@operato/shell'
5
+ import { css, html } from 'lit'
6
+ import { customElement, property, query } from 'lit/decorators.js'
7
+ import { DataGrist } from '@operato/data-grist'
8
+ import { client } from '@operato/graphql'
9
+ import { notify } from '@operato/layout'
10
+ import gql from 'graphql-tag'
11
+
12
+ @customElement('manager-management')
13
+ export class ManagerManagement extends PageView {
14
+ static styles = [
15
+ ScrollbarStyles,
16
+ CommonGristStyles,
17
+ css`
18
+ :host {
19
+ display: flex;
20
+ flex-direction: column;
21
+
22
+ width: 100%;
23
+
24
+ --grid-record-emphasized-background-color: red;
25
+ --grid-record-emphasized-color: yellow;
26
+ }
27
+
28
+ md-elevated-button {
29
+ margin: 0px 3px;
30
+
31
+ --md-elevated-button-container-height: 35px;
32
+ --md-elevated-button-label-text-size: 16px;
33
+ --md-elevated-button-container-color: #0595e5;
34
+
35
+ --md-elevated-button-label-text-color: #fff;
36
+ --md-elevated-button-hover-label-text-color: #fff;
37
+ --md-elevated-button-pressed-label-text-color: #fff;
38
+ --md-elevated-button-focus-label-text-color: #fff;
39
+ --md-elevated-button-icon-color: #fff;
40
+ --md-elevated-button-hover-icon-color: #fff;
41
+ --md-elevated-button-pressed-icon-color: #fff;
42
+ --md-elevated-button-focus-icon-color: #fff;
43
+ }
44
+
45
+ div[button-container] {
46
+ padding: 0 5px 10px 0;
47
+ text-align: right;
48
+ }
49
+ `
50
+ ]
51
+
52
+ @property({ type: Object }) gristConfig: any
53
+ @query('ox-grist') private grist!: DataGrist
54
+
55
+ get context() {
56
+ return {
57
+ title: '담당자 관리',
58
+ actions: [
59
+ {
60
+ title: '저장',
61
+ action: this._updateManagers.bind(this),
62
+ ...CommonButtonStyles.save
63
+ }
64
+ ]
65
+ }
66
+ }
67
+
68
+ render() {
69
+ return html`
70
+ <ox-grist .mode=${'GRID'} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}> </ox-grist>
71
+ <div button-container>
72
+ <md-elevated-button @click=${this._updateManagers.bind(this)}>
73
+ <md-icon slot="icon">save</md-icon>저장</md-elevated-button
74
+ >
75
+ </div>
76
+ `
77
+ }
78
+
79
+ async pageInitialized(lifecycle: any) {
80
+ this.gristConfig = {
81
+ columns: [
82
+ { type: 'gutter', gutterName: 'sequence' },
83
+ {
84
+ type: 'string',
85
+ name: 'name',
86
+ header: '이름',
87
+ record: {
88
+ editable: true
89
+ },
90
+ width: 150
91
+ },
92
+ {
93
+ type: 'string',
94
+ name: 'phone',
95
+ header: '휴대폰 번호',
96
+ record: {
97
+ editable: true
98
+ },
99
+ width: 150
100
+ },
101
+ {
102
+ type: 'string',
103
+ name: 'position',
104
+ header: '직위',
105
+ record: {
106
+ editable: true
107
+ },
108
+ width: 150
109
+ },
110
+ {
111
+ type: 'datetime',
112
+ name: 'updatedAt',
113
+ header: '수정 시간',
114
+ record: {
115
+ renderer: value => {
116
+ const date = new Date(value + ' UTC')
117
+
118
+ return new Intl.DateTimeFormat('ko-KR', {
119
+ timeZone: 'Asia/Seoul',
120
+ year: 'numeric',
121
+ month: '2-digit',
122
+ day: '2-digit',
123
+ hour: '2-digit',
124
+ minute: '2-digit',
125
+ second: '2-digit'
126
+ }).format(date)
127
+ }
128
+ },
129
+ width: 200
130
+ }
131
+ ],
132
+ rows: {
133
+ appendable: false
134
+ },
135
+ sorters: [{ name: 'name' }],
136
+ pagination: { infinite: true }
137
+ }
138
+ }
139
+
140
+ async fetchHandler() {
141
+ const response = await client.query({
142
+ query: gql`
143
+ query Managers {
144
+ managers {
145
+ id
146
+ phone
147
+ position
148
+ userId
149
+ name
150
+ updatedAt
151
+ }
152
+ }
153
+ `
154
+ })
155
+
156
+ console.log('response.data.managers :', response.data.managers)
157
+
158
+ if (response.errors) return {}
159
+
160
+ return {
161
+ total: response.data.managers.length || 0,
162
+ records: response.data.managers || []
163
+ }
164
+ }
165
+
166
+ async _updateManagers() {
167
+ let patches = this.grist.dirtyRecords
168
+ if (patches && patches.length) {
169
+ patches = patches.map(patch => {
170
+ let patchField: any = patch.userId ? { userId: patch.userId } : {}
171
+ if (patch.id) patchField['id'] = patch.id
172
+
173
+ const dirtyFields = patch.__dirtyfields__
174
+ for (let key in dirtyFields) {
175
+ patchField[key] = dirtyFields[key].after
176
+ }
177
+
178
+ return patchField
179
+ })
180
+
181
+ const response = await client.mutate({
182
+ mutation: gql`
183
+ mutation UpdateMultipleManager($patches: [ManagerPatch!]!) {
184
+ updateMultipleManager(patches: $patches) {
185
+ id
186
+ }
187
+ }
188
+ `,
189
+ variables: {
190
+ patches
191
+ }
192
+ })
193
+
194
+ if (!response.errors) {
195
+ this.grist.fetch()
196
+ notify({ message: '저장되었습니다.' })
197
+ } else {
198
+ notify({ message: '저장에 실패하였습니다.', level: 'error' })
199
+ }
200
+ }
201
+ }
202
+ }
@@ -0,0 +1,226 @@
1
+ import '@operato/data-grist'
2
+ import '@operato/context/ox-context-page-toolbar.js'
3
+
4
+ import { CommonGristStyles, ScrollbarStyles } from '@operato/styles'
5
+ import { PageView } from '@operato/shell'
6
+ import { css, html } from 'lit'
7
+ import { customElement, property, query } from 'lit/decorators.js'
8
+ import { DataGrist } from '@operato/data-grist'
9
+ import { client } from '@operato/graphql'
10
+ import { notify } from '@operato/layout'
11
+ import gql from 'graphql-tag'
12
+ import { FetchOption } from '@operato/data-grist'
13
+
14
+ @customElement('worker-type-management')
15
+ export class WorkerTypeManagement extends PageView {
16
+ static styles = [
17
+ ScrollbarStyles,
18
+ CommonGristStyles,
19
+ css`
20
+ :host {
21
+ display: flex;
22
+ flex-direction: column;
23
+
24
+ width: 100%;
25
+
26
+ --grid-record-emphasized-background-color: red;
27
+ --grid-record-emphasized-color: yellow;
28
+ }
29
+
30
+ md-elevated-button {
31
+ margin: 0px 3px;
32
+
33
+ --md-elevated-button-container-height: 35px;
34
+ --md-elevated-button-label-text-size: 16px;
35
+ --md-elevated-button-container-color: #0595e5;
36
+
37
+ --md-elevated-button-label-text-color: #fff;
38
+ --md-elevated-button-hover-label-text-color: #fff;
39
+ --md-elevated-button-pressed-label-text-color: #fff;
40
+ --md-elevated-button-focus-label-text-color: #fff;
41
+ --md-elevated-button-icon-color: #fff;
42
+ --md-elevated-button-hover-icon-color: #fff;
43
+ --md-elevated-button-pressed-icon-color: #fff;
44
+ --md-elevated-button-focus-icon-color: #fff;
45
+
46
+ &[red] {
47
+ --md-elevated-button-container-color: #e15757;
48
+ }
49
+ }
50
+
51
+ div[button-container] {
52
+ padding: 0 5px 10px 0;
53
+ text-align: right;
54
+ }
55
+ `
56
+ ]
57
+
58
+ @property({ type: Object }) gristConfig: any
59
+ @query('ox-grist') private grist!: DataGrist
60
+
61
+ get context() {
62
+ return {
63
+ title: '인력 관리',
64
+ actions: [
65
+ {
66
+ title: '저장',
67
+ action: this._updateWorkerTypes.bind(this),
68
+ icon: 'save'
69
+ },
70
+ {
71
+ title: '삭제',
72
+ action: this._deleteWorkerTypes.bind(this),
73
+ icon: 'delete'
74
+ }
75
+ ]
76
+ }
77
+ }
78
+
79
+ render() {
80
+ return html`
81
+ <ox-grist .mode=${'GRID'} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}> </ox-grist>
82
+ <div button-container>
83
+ <md-elevated-button @click=${this._updateWorkerTypes.bind(this)}>
84
+ <md-icon slot="icon">save</md-icon>저장</md-elevated-button
85
+ >
86
+ <md-elevated-button red @click=${this._deleteWorkerTypes.bind(this)}>
87
+ <md-icon slot="icon">delete</md-icon>삭제</md-elevated-button
88
+ >
89
+ </div>
90
+ `
91
+ }
92
+
93
+ async pageInitialized(lifecycle: any) {
94
+ this.gristConfig = {
95
+ columns: [
96
+ { type: 'gutter', gutterName: 'sequence' },
97
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
98
+ {
99
+ type: 'string',
100
+ name: 'name',
101
+ header: '이름',
102
+ record: {
103
+ editable: true
104
+ },
105
+ width: 150
106
+ },
107
+ {
108
+ type: 'string',
109
+ name: 'description',
110
+ header: '설명',
111
+ record: {
112
+ editable: true
113
+ },
114
+ width: 200
115
+ },
116
+ {
117
+ type: 'datetime',
118
+ name: 'createdAt',
119
+ header: '생성 시간',
120
+ width: 200
121
+ },
122
+ {
123
+ type: 'datetime',
124
+ name: 'updatedAt',
125
+ header: '수정 시간',
126
+ width: 200
127
+ }
128
+ ],
129
+ rows: {
130
+ selectable: {
131
+ multiple: true
132
+ }
133
+ },
134
+ pagination: { infinite: true }
135
+ }
136
+ }
137
+
138
+ async fetchHandler(_: FetchOption) {
139
+ const response = await client.query({
140
+ query: gql`
141
+ query WorkerTypes {
142
+ workerTypes {
143
+ items {
144
+ id
145
+ name
146
+ description
147
+ createdAt
148
+ updatedAt
149
+ }
150
+ total
151
+ }
152
+ }
153
+ `
154
+ })
155
+
156
+ if (response.errors) return {}
157
+
158
+ return {
159
+ total: response.data.workerTypes.total || 0,
160
+ records: response.data.workerTypes.items || []
161
+ }
162
+ }
163
+
164
+ async _updateWorkerTypes() {
165
+ let patches = this.grist.dirtyRecords
166
+ if (patches && patches.length) {
167
+ patches = patches.map(patch => {
168
+ let patchField: any = patch.id ? { id: patch.id } : {}
169
+ const dirtyFields = patch.__dirtyfields__
170
+ for (let key in dirtyFields) {
171
+ patchField[key] = dirtyFields[key].after
172
+ }
173
+ patchField.cuFlag = patch.__dirty__
174
+
175
+ return patchField
176
+ })
177
+
178
+ const response = await client.mutate({
179
+ mutation: gql`
180
+ mutation UpdateMultipleWorkerType($patches: [WorkerTypePatch!]!) {
181
+ updateMultipleWorkerType(patches: $patches) {
182
+ id
183
+ }
184
+ }
185
+ `,
186
+ variables: {
187
+ patches
188
+ }
189
+ })
190
+
191
+ if (!response.errors) {
192
+ this.grist.fetch()
193
+ notify({ message: '저장되었습니다.' })
194
+ } else {
195
+ notify({ message: '저장에 실패하였습니다.', level: 'error' })
196
+ }
197
+ }
198
+ }
199
+
200
+ async _deleteWorkerTypes() {
201
+ if (confirm('삭제하시겠습니까?')) {
202
+ const a = this.grist
203
+ console.log('this.grist :', a)
204
+ console.log('selected : ', a.selected)
205
+
206
+ const ids = this.grist.selected.map(record => record.id)
207
+ if (ids && ids.length > 0) {
208
+ const response = await client.mutate({
209
+ mutation: gql`
210
+ mutation DeleteWorkerTypes($ids: [String!]!) {
211
+ deleteWorkerTypes(ids: $ids)
212
+ }
213
+ `,
214
+ variables: {
215
+ ids
216
+ }
217
+ })
218
+
219
+ if (!response.errors) {
220
+ this.grist.fetch()
221
+ notify({ message: '삭제되었습니다.' })
222
+ }
223
+ }
224
+ }
225
+ }
226
+ }
@@ -1,3 +1,4 @@
1
+ import '@material/web/button/elevated-button.js'
1
2
  import '@operato/data-grist'
2
3
 
3
4
  import gql from 'graphql-tag'
@@ -28,7 +29,7 @@ export class TaskImporter extends LitElement {
28
29
  padding: var(--padding-default);
29
30
  }
30
31
 
31
- mwc-button {
32
+ md-elevated-button {
32
33
  margin-left: var(--margin-default);
33
34
  }
34
35
  `
@@ -65,15 +66,13 @@ export class TaskImporter extends LitElement {
65
66
  <ox-grist
66
67
  .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
67
68
  .config=${this.columns}
68
- .data=${
69
- {
70
- records: this.tasks
71
- }
72
- }
69
+ .data=${{
70
+ records: this.tasks
71
+ }}
73
72
  ></ox-grist>
74
73
 
75
74
  <div class="button-container">
76
- <mwc-button raised @click="${this.save.bind(this)}">${i18next.t('button.save')}</mwc-button>
75
+ <md-elevated-button raised @click="${this.save.bind(this)}">${i18next.t('button.save')}</md-elevated-button>
77
76
  </div>
78
77
  `
79
78
  }
@@ -93,4 +92,3 @@ export class TaskImporter extends LitElement {
93
92
  this.dispatchEvent(new CustomEvent('imported'))
94
93
  }
95
94
  }
96
-
@@ -1,3 +1,4 @@
1
+ import '@material/web/icon/icon.js'
1
2
  import '@operato/data-grist'
2
3
 
3
4
  import { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'
@@ -5,12 +6,7 @@ import { PageView, store } from '@operato/shell'
5
6
  import { css, html } from 'lit'
6
7
  import { customElement, property, query, state } from 'lit/decorators.js'
7
8
  import { ScopedElementsMixin } from '@open-wc/scoped-elements'
8
- import {
9
- ColumnConfig,
10
- DataGrist,
11
- FetchOption,
12
- SortersControl
13
- } from '@operato/data-grist'
9
+ import { ColumnConfig, DataGrist, FetchOption, SortersControl } from '@operato/data-grist'
14
10
  import { client } from '@operato/graphql'
15
11
  import { i18next, localize } from '@operato/i18n'
16
12
  import { notify, openPopup } from '@operato/layout'
@@ -24,7 +20,6 @@ import { TaskImporter } from './task-importer'
24
20
 
25
21
  @customElement('task-list-page')
26
22
  export class TaskListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
27
-
28
23
  static styles = [
29
24
  ScrollbarStyles,
30
25
  CommonGristStyles,
@@ -93,11 +88,7 @@ export class TaskListPage extends connect(store)(localize(i18next)(ScopedElement
93
88
  const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
94
89
 
95
90
  return html`
96
- <ox-grist
97
- .mode=${mode}
98
- .config=${this.gristConfig}
99
- .fetchHandler=${this.fetchHandler.bind(this)}
100
- >
91
+ <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
101
92
  <div slot="headroom">
102
93
  <div id="filters">
103
94
  <ox-filters-form autofocus></ox-filters-form>
@@ -105,7 +96,7 @@ export class TaskListPage extends connect(store)(localize(i18next)(ScopedElement
105
96
 
106
97
  <div id="sorters">
107
98
  Sort
108
- <mwc-icon
99
+ <md-icon
109
100
  @click=${e => {
110
101
  const target = e.currentTarget
111
102
  this.sortersControl.open({
@@ -113,7 +104,7 @@ export class TaskListPage extends connect(store)(localize(i18next)(ScopedElement
113
104
  top: target.offsetTop + target.offsetHeight
114
105
  })
115
106
  }}
116
- >expand_more</mwc-icon
107
+ >expand_more</md-icon
117
108
  >
118
109
  <ox-popup id="sorter-control">
119
110
  <ox-sorters-control> </ox-sorters-control>
@@ -121,9 +112,9 @@ export class TaskListPage extends connect(store)(localize(i18next)(ScopedElement
121
112
  </div>
122
113
 
123
114
  <div id="modes">
124
- <mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>
125
- <mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>
126
- <mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
115
+ <md-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</md-icon>
116
+ <md-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</md-icon>
117
+ <md-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>
127
118
  </div>
128
119
  </div>
129
120
  </ox-grist>
@@ -312,12 +303,7 @@ export class TaskListPage extends connect(store)(localize(i18next)(ScopedElement
312
303
 
313
304
  private async exportHandler() {
314
305
  const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
315
- const targetFieldSet = new Set([
316
- 'id',
317
- 'name',
318
- 'description',
319
- 'active'
320
- ])
306
+ const targetFieldSet = new Set(['id', 'name', 'description', 'active'])
321
307
 
322
308
  return exportTargets.map(task => {
323
309
  let tempObj = {}
@@ -346,10 +332,9 @@ export class TaskListPage extends connect(store)(localize(i18next)(ScopedElement
346
332
  title: i18next.t('title.import task')
347
333
  }
348
334
  )
349
-
335
+
350
336
  popup.onclosed = () => {
351
337
  this.grist.fetch()
352
338
  }
353
339
  }
354
340
  }
355
-
package/client/route.ts CHANGED
@@ -28,12 +28,16 @@ export default function route(page: string) {
28
28
  import('./pages/project/project-plan-management')
29
29
  return page
30
30
 
31
- case 'checklist-list':
32
- import('./pages/checklist/checklist-list-page')
31
+ case 'manager-management':
32
+ import('./pages/resource/manager-management')
33
33
  return page
34
34
 
35
- case 'resource-list':
36
- import('./pages/resource/resource-list-page')
35
+ case 'worker-type-management':
36
+ import('./pages/resource/worker-type-management')
37
+
38
+ return page
39
+ case 'construction-type-management':
40
+ import('./pages/resource/construction-type-management')
37
41
  return page
38
42
  }
39
43
  }
@@ -1,3 +1,4 @@
1
+ import '@material/web/button/elevated-button.js';
1
2
  import '@operato/data-grist';
2
3
  import { LitElement } from 'lit';
3
4
  export declare class ChecklistImporter extends LitElement {
@@ -1,4 +1,5 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/button/elevated-button.js';
2
3
  import '@operato/data-grist';
3
4
  import gql from 'graphql-tag';
4
5
  import { css, html, LitElement } from 'lit';
@@ -46,7 +47,7 @@ export class ChecklistImporter extends LitElement {
46
47
  ></ox-grist>
47
48
 
48
49
  <div class="button-container">
49
- <mwc-button raised @click="${this.save.bind(this)}">${i18next.t('button.save')}</mwc-button>
50
+ <md-elevated-button raised @click="${this.save.bind(this)}">${i18next.t('button.save')}</md-elevated-button>
50
51
  </div>
51
52
  `;
52
53
  }
@@ -84,7 +85,7 @@ ChecklistImporter.styles = [
84
85
  padding: var(--padding-default);
85
86
  }
86
87
 
87
- mwc-button {
88
+ md-elevated-button {
88
89
  margin-left: var(--margin-default);
89
90
  }
90
91
  `
@@ -1 +1 @@
1
- {"version":3,"file":"checklist-importer.js","sourceRoot":"","sources":["../../../client/pages/checklist/checklist-importer.ts"],"names":[],"mappings":";AAAA,OAAO,qBAAqB,CAAA;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAY,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAAjD;;QA0BmB,eAAU,GAAU,EAAE,CAAA;QACtB,YAAO,GAAG;YACzB,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;YACzC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,aAAa;oBACnB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;oBACtC,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjC,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAA;IAkCH,CAAC;IAhCC,MAAM;QACJ,OAAO,IAAI,CAAA;;gBAEC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;kBAChC,IAAI,CAAC,OAAO;gBAEpB;YACE,OAAO,EAAE,IAAI,CAAC,UAAU;SAE5B;;;;qCAI6B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;KAEjF,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,IAAI;;QAChB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;SAC3C,CAAC,CAAA;QAEF,IAAI,MAAA,QAAQ,CAAC,MAAM,0CAAE,MAAM;YAAE,OAAM;QAEnC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;;AAlFM,wBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;KAqBF;CACF,CAAA;AAED;IAAC,KAAK,EAAE;;qDAA+B;AACvC;IAAC,KAAK,EAAE;;kDAuBP","sourcesContent":["import '@operato/data-grist'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { property, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\n\nexport class ChecklistImporter extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: #fff;\n }\n\n ox-grist {\n flex: 1;\n }\n\n .button-container {\n display: flex;\n margin-left: auto;\n padding: var(--padding-default);\n }\n\n mwc-button {\n margin-left: var(--margin-default);\n }\n `\n ]\n\n @state() private checklists: any[] = []\n @state() private columns = {\n list: { fields: ['name', 'description'] },\n pagination: { infinite: true },\n columns: [\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n width: 150\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n width: 200\n },\n {\n type: 'checkbox',\n name: 'active',\n header: i18next.t('field.active'),\n width: 60\n }\n ]\n }\n\n render() {\n return html`\n <ox-grist\n .mode=${isMobileDevice() ? 'LIST' : 'GRID'}\n .config=${this.columns}\n .data=${\n { \n records: this.checklists \n }\n }\n ></ox-grist>\n\n <div class=\"button-container\">\n <mwc-button raised @click=\"${this.save.bind(this)}\">${i18next.t('button.save')}</mwc-button>\n </div>\n `\n }\n\n private async save() {\n const response = await client.mutate({\n mutation: gql`\n mutation importChecklists($checklists: [ChecklistPatch!]!) {\n importChecklists(checklists: $checklists)\n }\n `,\n variables: { checklists: this.checklists }\n })\n\n if (response.errors?.length) return\n\n this.dispatchEvent(new CustomEvent('imported'))\n }\n}\n\n"]}
1
+ {"version":3,"file":"checklist-importer.js","sourceRoot":"","sources":["../../../client/pages/checklist/checklist-importer.ts"],"names":[],"mappings":";AAAA,OAAO,yCAAyC,CAAA;AAChD,OAAO,qBAAqB,CAAA;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAY,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAAjD;;QA0BmB,eAAU,GAAU,EAAE,CAAA;QACtB,YAAO,GAAG;YACzB,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;YACzC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,aAAa;oBACnB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;oBACtC,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjC,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAA;IAgCH,CAAC;IA9BC,MAAM;QACJ,OAAO,IAAI,CAAA;;gBAEC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;kBAChC,IAAI,CAAC,OAAO;gBACd;YACN,OAAO,EAAE,IAAI,CAAC,UAAU;SACzB;;;;6CAIoC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;KAEzF,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,IAAI;;QAChB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;SAC3C,CAAC,CAAA;QAEF,IAAI,MAAA,QAAQ,CAAC,MAAM,0CAAE,MAAM;YAAE,OAAM;QAEnC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;;AAhFM,wBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;KAqBF;CACF,CAAA;AAED;IAAC,KAAK,EAAE;;qDAA+B;AACvC;IAAC,KAAK,EAAE;;kDAuBP","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@operato/data-grist'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { property, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\n\nexport class ChecklistImporter extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: #fff;\n }\n\n ox-grist {\n flex: 1;\n }\n\n .button-container {\n display: flex;\n margin-left: auto;\n padding: var(--padding-default);\n }\n\n md-elevated-button {\n margin-left: var(--margin-default);\n }\n `\n ]\n\n @state() private checklists: any[] = []\n @state() private columns = {\n list: { fields: ['name', 'description'] },\n pagination: { infinite: true },\n columns: [\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n width: 150\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n width: 200\n },\n {\n type: 'checkbox',\n name: 'active',\n header: i18next.t('field.active'),\n width: 60\n }\n ]\n }\n\n render() {\n return html`\n <ox-grist\n .mode=${isMobileDevice() ? 'LIST' : 'GRID'}\n .config=${this.columns}\n .data=${{\n records: this.checklists\n }}\n ></ox-grist>\n\n <div class=\"button-container\">\n <md-elevated-button raised @click=\"${this.save.bind(this)}\">${i18next.t('button.save')}</md-elevated-button>\n </div>\n `\n }\n\n private async save() {\n const response = await client.mutate({\n mutation: gql`\n mutation importChecklists($checklists: [ChecklistPatch!]!) {\n importChecklists(checklists: $checklists)\n }\n `,\n variables: { checklists: this.checklists }\n })\n\n if (response.errors?.length) return\n\n this.dispatchEvent(new CustomEvent('imported'))\n }\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import '@material/web/icon/icon.js';
1
2
  import '@operato/data-grist';
2
3
  import { PageView } from '@operato/shell';
3
4
  import { FetchOption } from '@operato/data-grist';