@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,88 @@
1
+ import { PageView } from '@operato/shell';
2
+ import { Attachment } from '@things-factory/attachment-base';
3
+ import type { FileUpload } from 'graphql-upload/GraphQLUpload.js';
4
+ export declare enum ProjectStatus {
5
+ 'PROCEEDING' = "10",
6
+ 'COMPLICATED' = "20"
7
+ }
8
+ export declare enum InspectionType {
9
+ REQUEST = "REQUEST",
10
+ PASS = "PASS",
11
+ FAIL = "FAIL"
12
+ }
13
+ export interface Project {
14
+ id?: string;
15
+ name: string;
16
+ startDate?: string;
17
+ endDate?: string;
18
+ mainPhoto?: Attachment;
19
+ mainPhotoUpload?: FileUpload;
20
+ totalProgress?: number;
21
+ weeklyProgress?: number;
22
+ kpi?: number;
23
+ inspPassRate?: number;
24
+ robotProgressRate?: number;
25
+ structuralSafetyRate?: number;
26
+ buildingComplex: BuildingComplex;
27
+ }
28
+ export interface BuildingComplex {
29
+ id?: string;
30
+ address?: string;
31
+ latitude?: number;
32
+ longitude?: number;
33
+ area?: number;
34
+ constructionCompany?: string;
35
+ clientCompany?: string;
36
+ designCompany?: string;
37
+ supervisoryCompany?: string;
38
+ drawing?: Attachment;
39
+ drawingUpload?: FileUpload;
40
+ constructionType?: string;
41
+ constructionCost?: number;
42
+ etc?: string;
43
+ householdCount?: number;
44
+ buildingCount?: number;
45
+ notice?: string;
46
+ planXScale?: number;
47
+ planYScale?: number;
48
+ buildings?: Building[];
49
+ }
50
+ export interface Building {
51
+ id?: string;
52
+ name: string | undefined;
53
+ floorCount: number | undefined;
54
+ drawing?: Attachment;
55
+ drawingUpload?: FileUpload;
56
+ buildingLevels?: BuildingLevel[];
57
+ }
58
+ export interface BuildingLevel {
59
+ id?: string;
60
+ floor?: number;
61
+ mainDrawing?: Attachment;
62
+ mainDrawingUpload?: FileUpload;
63
+ buildingInspections?: BuildingInspection[];
64
+ }
65
+ export interface BuildingInspection {
66
+ id?: string;
67
+ indexX?: number;
68
+ indexY?: number;
69
+ type?: InspectionType;
70
+ detail?: string;
71
+ }
72
+ declare const ProjectListPage_base: typeof PageView & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types").ScopedElementsHost>;
73
+ export declare class ProjectListPage extends ProjectListPage_base {
74
+ static styles: import("lit").CSSResult[];
75
+ get context(): {
76
+ title: string;
77
+ };
78
+ private projectName;
79
+ private projectList;
80
+ private projectCount;
81
+ render(): import("lit-html").TemplateResult<1>;
82
+ pageInitialized(lifecycle: any): Promise<void>;
83
+ pageUpdated(changes: any, lifecycle: any): Promise<void>;
84
+ getProjectList(): Promise<void>;
85
+ private _onInputChange;
86
+ private _onKeypress;
87
+ }
88
+ export {};
@@ -0,0 +1,303 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { PageView } from '@operato/shell';
3
+ import { css, html } from 'lit';
4
+ import { customElement, state } from 'lit/decorators.js';
5
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
6
+ import { client } from '@operato/graphql';
7
+ import gql from 'graphql-tag';
8
+ export var ProjectStatus;
9
+ (function (ProjectStatus) {
10
+ ProjectStatus["PROCEEDING"] = "10";
11
+ ProjectStatus["COMPLICATED"] = "20";
12
+ })(ProjectStatus || (ProjectStatus = {}));
13
+ export var InspectionType;
14
+ (function (InspectionType) {
15
+ InspectionType["REQUEST"] = "REQUEST";
16
+ InspectionType["PASS"] = "PASS";
17
+ InspectionType["FAIL"] = "FAIL";
18
+ })(InspectionType || (InspectionType = {}));
19
+ let ProjectListPage = class ProjectListPage extends ScopedElementsMixin(PageView) {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.projectName = '';
23
+ this.projectList = [];
24
+ this.projectCount = 0;
25
+ }
26
+ get context() {
27
+ return {
28
+ title: '진행중 프로젝트'
29
+ };
30
+ }
31
+ render() {
32
+ var _a;
33
+ return html `
34
+ <div header>
35
+ <label>프로젝트 이름</label>
36
+ <md-filled-text-field
37
+ name="projectName"
38
+ type="search"
39
+ label="프로젝트 이름"
40
+ .value=${this.projectName}
41
+ @input=${this._onInputChange}
42
+ @keypress=${this._onKeypress}
43
+ >
44
+ <md-icon slot="leading-icon">search</md-icon>
45
+ </md-filled-text-field>
46
+
47
+ <strong>총 ${this.projectCount}개</strong>
48
+ </div>
49
+
50
+ <div body>
51
+ ${(_a = this.projectList) === null || _a === void 0 ? void 0 : _a.map((project) => {
52
+ var _a;
53
+ return html `
54
+ <div project-container>
55
+ <a href=${`project-detail/${project.id}`}>
56
+ <img project-img src=${((_a = project.mainPhoto) === null || _a === void 0 ? void 0 : _a.fullpath) || ''} />
57
+
58
+ <span project-info>
59
+ <div name>${project.name}</div>
60
+ <div content>${project.buildingComplex.address}</div>
61
+ <div content>면적: ${project.buildingComplex.area}㎡</div>
62
+ <div content>착공~준공: ${project.startDate}~${project.endDate}</div>
63
+ <div content>발주처: <strong>${project.buildingComplex.clientCompany}</strong></div>
64
+ </span>
65
+
66
+ <span project-state>
67
+ <div progress>
68
+ <md-linear-progress buffer="100" max="100" value=${project.totalProgress || 0}>
69
+ </md-linear-progress>
70
+ <span>전체</span>
71
+ <span>${project.totalProgress || 0}%</span>
72
+ </div>
73
+ <div progress>
74
+ <md-linear-progress buffer="100" max="100" value=${project.weeklyProgress || 0}>
75
+ </md-linear-progress>
76
+ <span>주간</span>
77
+ <span>${project.weeklyProgress || 0}%</span>
78
+ </div>
79
+ <div progress>
80
+ <md-linear-progress buffer="100" max="100" value=${project.kpi || 0}> </md-linear-progress>
81
+ <span>KPI</span>
82
+ <span>${project.kpi || 0}%</span>
83
+ </div>
84
+ <div progress>
85
+ <md-linear-progress buffer="100" max="100" value=${project.inspPassRate || 0}> </md-linear-progress>
86
+ <span>Inspection Passing Rate</span>
87
+ <span>${project.inspPassRate || 0}%</span>
88
+ </div>
89
+ <div progress>
90
+ <md-linear-progress buffer="100" max="100" value=${project.robotProgressRate || 0}>
91
+ </md-linear-progress>
92
+ <span>Robot Progress</span>
93
+ <span>${project.robotProgressRate || 0}%</span>
94
+ </div>
95
+ <div progress>
96
+ <md-linear-progress buffer="100" max="100" value=${project.structuralSafetyRate || 0}>
97
+ </md-linear-progress>
98
+ <span>Structural safety</span>
99
+ <span>${project.structuralSafetyRate || 0}%</span>
100
+ </div>
101
+ </span>
102
+ </a>
103
+ </div>
104
+ `;
105
+ })}
106
+ </div>
107
+ `;
108
+ }
109
+ async pageInitialized(lifecycle) {
110
+ this.getProjectList();
111
+ }
112
+ async pageUpdated(changes, lifecycle) { }
113
+ async getProjectList() {
114
+ var _a, _b;
115
+ const response = await client.query({
116
+ query: gql `
117
+ query Projects($projectName: String!) {
118
+ projects(projectName: $projectName) {
119
+ items {
120
+ id
121
+ name
122
+ startDate
123
+ endDate
124
+ mainPhoto {
125
+ fullpath
126
+ }
127
+ totalProgress
128
+ weeklyProgress
129
+ kpi
130
+ inspPassRate
131
+ robotProgressRate
132
+ structuralSafetyRate
133
+ buildingComplex {
134
+ address
135
+ area
136
+ clientCompany
137
+ }
138
+ }
139
+ total
140
+ }
141
+ }
142
+ `,
143
+ variables: {
144
+ projectName: this.projectName || ''
145
+ }
146
+ });
147
+ this.projectList = ((_a = response.data.projects) === null || _a === void 0 ? void 0 : _a.items) || [];
148
+ this.projectCount = ((_b = response.data.projects) === null || _b === void 0 ? void 0 : _b.total) || 0;
149
+ }
150
+ // Input 요소의 값이 변경될 때 호출되는 콜백 함수
151
+ _onInputChange(event) {
152
+ const target = event.target;
153
+ this[target.name] = target.value;
154
+ }
155
+ // 검색창에서 엔터입력시 검색
156
+ _onKeypress(event) {
157
+ if (event.code === 'Enter') {
158
+ this.getProjectList();
159
+ }
160
+ }
161
+ };
162
+ ProjectListPage.styles = [
163
+ css `
164
+ :host {
165
+ display: flex;
166
+ flex-direction: column;
167
+ overflow-y: auto;
168
+
169
+ width: 100%;
170
+ height: 100%;
171
+ background-color: #f7f7f7;
172
+
173
+ --grid-record-emphasized-background-color: red;
174
+ --grid-record-emphasized-color: yellow;
175
+ }
176
+
177
+ div[header] {
178
+ display: flex;
179
+ height: 100px;
180
+ align-items: center;
181
+ background-color: #2ea4df1a;
182
+ border: 1px solid #2ea4df33;
183
+ margin: 15px 23px;
184
+ font-size: 18px;
185
+ padding: 7px;
186
+ border-radius: 5px;
187
+
188
+ md-filled-text-field[type='search'] {
189
+ margin-left: 5px;
190
+ margin-right: 26px;
191
+
192
+ --md-filled-text-field-container-shape: 0px;
193
+ --md-sys-color-primary: #006a6a;
194
+ --md-sys-color-surface-container-highest: transparent;
195
+ --md-filled-text-field-label-text-color: #999999;
196
+ --md-filled-text-field-input-text-color: #4e5055;
197
+ }
198
+
199
+ md-elevated-button[add-project] {
200
+ font-weight: bold;
201
+ font-size: 16px;
202
+ margin-left: 17px;
203
+ padding: 13px 20px;
204
+
205
+ --md-sys-color-surface-container-low: #24be7b;
206
+ --md-sys-color-primary: #ffffff;
207
+ --md-elevated-button-container-shape: 7px;
208
+ }
209
+ }
210
+
211
+ div[body] {
212
+ div[project-container] {
213
+ height: 140px;
214
+ margin: 17px 23px;
215
+ background-color: #ffffff;
216
+ border: 1px solid #cccccc80;
217
+ border-radius: 5px;
218
+
219
+ & > a {
220
+ display: flex;
221
+ width: 100%;
222
+ height: 100%;
223
+ text-decoration: none;
224
+ color: #000;
225
+ }
226
+
227
+ img[project-img] {
228
+ width: 285px;
229
+ background-color: #cccccc80;
230
+ }
231
+
232
+ span[project-info] {
233
+ flex: 0.45;
234
+ padding: 6px 15px;
235
+ font-size: 16px;
236
+
237
+ white-space: nowrap;
238
+ overflow: hidden;
239
+ text-overflow: ellipsis;
240
+
241
+ div[name] {
242
+ color: #2e79be;
243
+ font-weight: bold;
244
+ font-size: 19px;
245
+ margin-bottom: 2px;
246
+ }
247
+ }
248
+
249
+ span[project-state] {
250
+ flex: 0.55;
251
+ padding: 10px 20px;
252
+
253
+ & > div {
254
+ margin-bottom: 3px;
255
+ }
256
+
257
+ div[progress] {
258
+ position: relative;
259
+
260
+ md-linear-progress {
261
+ --md-linear-progress-track-height: 18px;
262
+ --md-linear-progress-active-indicator-height: 18px;
263
+ --md-linear-progress-track-shape: 5px;
264
+ --md-sys-color-primary: #0595e51a;
265
+ --md-sys-color-surface-container-highest: #0595e533;
266
+ }
267
+
268
+ span {
269
+ position: absolute;
270
+ top: 0;
271
+ left: 12px;
272
+ font-size: 12px;
273
+ font-weight: bold;
274
+ color: #2e79be;
275
+
276
+ &:last-child {
277
+ left: unset;
278
+ right: 12px;
279
+ }
280
+ }
281
+ }
282
+ }
283
+ }
284
+ }
285
+ `
286
+ ];
287
+ __decorate([
288
+ state(),
289
+ __metadata("design:type", String)
290
+ ], ProjectListPage.prototype, "projectName", void 0);
291
+ __decorate([
292
+ state(),
293
+ __metadata("design:type", Array)
294
+ ], ProjectListPage.prototype, "projectList", void 0);
295
+ __decorate([
296
+ state(),
297
+ __metadata("design:type", Number)
298
+ ], ProjectListPage.prototype, "projectCount", void 0);
299
+ ProjectListPage = __decorate([
300
+ customElement('project-list')
301
+ ], ProjectListPage);
302
+ export { ProjectListPage };
303
+ //# sourceMappingURL=project-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-list.js","sourceRoot":"","sources":["../../../client/pages/project/project-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { PageView } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport gql from 'graphql-tag'\nimport { Attachment } from '@things-factory/attachment-base'\nimport type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\n\nexport enum ProjectStatus {\n 'PROCEEDING' = '10',\n 'COMPLICATED' = '20'\n}\nexport enum InspectionType {\n REQUEST = 'REQUEST',\n PASS = 'PASS',\n FAIL = 'FAIL'\n}\n\nexport interface Project {\n id?: string\n name: string\n startDate?: string\n endDate?: string\n mainPhoto?: Attachment\n mainPhotoUpload?: FileUpload\n totalProgress?: number\n weeklyProgress?: number\n kpi?: number\n inspPassRate?: number\n robotProgressRate?: number\n structuralSafetyRate?: number\n buildingComplex: BuildingComplex\n}\nexport interface BuildingComplex {\n id?: string\n address?: string\n latitude?: number\n longitude?: number\n area?: number\n constructionCompany?: string\n clientCompany?: string\n designCompany?: string\n supervisoryCompany?: string\n drawing?: Attachment\n drawingUpload?: FileUpload\n constructionType?: string\n constructionCost?: number\n etc?: string\n householdCount?: number\n buildingCount?: number\n notice?: string\n planXScale?: number\n planYScale?: number\n buildings?: Building[]\n}\nexport interface Building {\n id?: string\n name: string | undefined\n floorCount: number | undefined\n drawing?: Attachment\n drawingUpload?: FileUpload\n buildingLevels?: BuildingLevel[]\n}\n\nexport interface BuildingLevel {\n id?: string\n floor?: number\n mainDrawing?: Attachment\n mainDrawingUpload?: FileUpload\n buildingInspections?: BuildingInspection[]\n}\n\nexport interface BuildingInspection {\n id?: string\n indexX?: number\n indexY?: number\n type?: InspectionType\n detail?: string\n // buildingInspectionAttachments?: BuildingInspectionAttachment[]\n}\n\n@customElement('project-list')\nexport class ProjectListPage extends ScopedElementsMixin(PageView) {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n\n width: 100%;\n height: 100%;\n background-color: #f7f7f7;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n\n div[header] {\n display: flex;\n height: 100px;\n align-items: center;\n background-color: #2ea4df1a;\n border: 1px solid #2ea4df33;\n margin: 15px 23px;\n font-size: 18px;\n padding: 7px;\n border-radius: 5px;\n\n md-filled-text-field[type='search'] {\n margin-left: 5px;\n margin-right: 26px;\n\n --md-filled-text-field-container-shape: 0px;\n --md-sys-color-primary: #006a6a;\n --md-sys-color-surface-container-highest: transparent;\n --md-filled-text-field-label-text-color: #999999;\n --md-filled-text-field-input-text-color: #4e5055;\n }\n\n md-elevated-button[add-project] {\n font-weight: bold;\n font-size: 16px;\n margin-left: 17px;\n padding: 13px 20px;\n\n --md-sys-color-surface-container-low: #24be7b;\n --md-sys-color-primary: #ffffff;\n --md-elevated-button-container-shape: 7px;\n }\n }\n\n div[body] {\n div[project-container] {\n height: 140px;\n margin: 17px 23px;\n background-color: #ffffff;\n border: 1px solid #cccccc80;\n border-radius: 5px;\n\n & > a {\n display: flex;\n width: 100%;\n height: 100%;\n text-decoration: none;\n color: #000;\n }\n\n img[project-img] {\n width: 285px;\n background-color: #cccccc80;\n }\n\n span[project-info] {\n flex: 0.45;\n padding: 6px 15px;\n font-size: 16px;\n\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n div[name] {\n color: #2e79be;\n font-weight: bold;\n font-size: 19px;\n margin-bottom: 2px;\n }\n }\n\n span[project-state] {\n flex: 0.55;\n padding: 10px 20px;\n\n & > div {\n margin-bottom: 3px;\n }\n\n div[progress] {\n position: relative;\n\n md-linear-progress {\n --md-linear-progress-track-height: 18px;\n --md-linear-progress-active-indicator-height: 18px;\n --md-linear-progress-track-shape: 5px;\n --md-sys-color-primary: #0595e51a;\n --md-sys-color-surface-container-highest: #0595e533;\n }\n\n span {\n position: absolute;\n top: 0;\n left: 12px;\n font-size: 12px;\n font-weight: bold;\n color: #2e79be;\n\n &:last-child {\n left: unset;\n right: 12px;\n }\n }\n }\n }\n }\n }\n `\n ]\n\n get context() {\n return {\n title: '진행중 프로젝트'\n }\n }\n\n @state() private projectName: string = ''\n @state() private projectList: Project[] = []\n @state() private projectCount: number = 0\n\n render() {\n return html`\n <div header>\n <label>프로젝트 이름</label>\n <md-filled-text-field\n name=\"projectName\"\n type=\"search\"\n label=\"프로젝트 이름\"\n .value=${this.projectName}\n @input=${this._onInputChange}\n @keypress=${this._onKeypress}\n >\n <md-icon slot=\"leading-icon\">search</md-icon>\n </md-filled-text-field>\n\n <strong>총 ${this.projectCount}개</strong>\n </div>\n\n <div body>\n ${this.projectList?.map((project: Project) => {\n return html`\n <div project-container>\n <a href=${`project-detail/${project.id}`}>\n <img project-img src=${project.mainPhoto?.fullpath || ''} />\n\n <span project-info>\n <div name>${project.name}</div>\n <div content>${project.buildingComplex.address}</div>\n <div content>면적: ${project.buildingComplex.area}㎡</div>\n <div content>착공~준공: ${project.startDate}~${project.endDate}</div>\n <div content>발주처: <strong>${project.buildingComplex.clientCompany}</strong></div>\n </span>\n\n <span project-state>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.totalProgress || 0}>\n </md-linear-progress>\n <span>전체</span>\n <span>${project.totalProgress || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.weeklyProgress || 0}>\n </md-linear-progress>\n <span>주간</span>\n <span>${project.weeklyProgress || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.kpi || 0}> </md-linear-progress>\n <span>KPI</span>\n <span>${project.kpi || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.inspPassRate || 0}> </md-linear-progress>\n <span>Inspection Passing Rate</span>\n <span>${project.inspPassRate || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.robotProgressRate || 0}>\n </md-linear-progress>\n <span>Robot Progress</span>\n <span>${project.robotProgressRate || 0}%</span>\n </div>\n <div progress>\n <md-linear-progress buffer=\"100\" max=\"100\" value=${project.structuralSafetyRate || 0}>\n </md-linear-progress>\n <span>Structural safety</span>\n <span>${project.structuralSafetyRate || 0}%</span>\n </div>\n </span>\n </a>\n </div>\n `\n })}\n </div>\n `\n }\n\n async pageInitialized(lifecycle: any) {\n this.getProjectList()\n }\n\n async pageUpdated(changes: any, lifecycle: any) {}\n\n async getProjectList() {\n const response = await client.query({\n query: gql`\n query Projects($projectName: String!) {\n projects(projectName: $projectName) {\n items {\n id\n name\n startDate\n endDate\n mainPhoto {\n fullpath\n }\n totalProgress\n weeklyProgress\n kpi\n inspPassRate\n robotProgressRate\n structuralSafetyRate\n buildingComplex {\n address\n area\n clientCompany\n }\n }\n total\n }\n }\n `,\n variables: {\n projectName: this.projectName || ''\n }\n })\n\n this.projectList = response.data.projects?.items || []\n this.projectCount = response.data.projects?.total || 0\n }\n\n // Input 요소의 값이 변경될 때 호출되는 콜백 함수\n private _onInputChange(event: InputEvent) {\n const target = event.target as HTMLInputElement\n this[target.name] = target.value\n }\n\n // 검색창에서 엔터입력시 검색\n private _onKeypress(event: KeyboardEvent) {\n if (event.code === 'Enter') {\n this.getProjectList()\n }\n }\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import { PageView } from '@operato/shell';
2
+ import { PageLifecycle } from '@operato/shell/dist/src/app/pages/page-view';
3
+ import { Project } from './project-list';
4
+ import '@material/web/button/elevated-button.js';
5
+ import '@material/web/textfield/outlined-text-field.js';
6
+ import '@material/web/button/filled-button.js';
7
+ import '@material/web/button/outlined-button.js';
8
+ declare const ProjectPlanManagement_base: typeof PageView & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types").ScopedElementsHost>;
9
+ export declare class ProjectPlanManagement extends ProjectPlanManagement_base {
10
+ static styles: import("lit").CSSResult[];
11
+ get context(): {
12
+ title: string;
13
+ };
14
+ private defaultProject;
15
+ projectId: string;
16
+ project: Project;
17
+ selectedBuildingIdx: number;
18
+ render(): import("lit-html").TemplateResult<1>;
19
+ pageInitialized(lifecycle: PageLifecycle): Promise<void>;
20
+ pageUpdated(changes: any, lifecycle: PageLifecycle): Promise<void>;
21
+ initProject(projectId?: string): Promise<void>;
22
+ private _saveProject;
23
+ private _onInputChange;
24
+ onCreateAttachment(e: CustomEvent): Promise<void>;
25
+ _onClickBuildingChange(idx: number): void;
26
+ }
27
+ export {};