@dssp/project 1.0.0-alpha.5 → 1.0.0-alpha.51

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 (114) hide show
  1. package/dist-client/index.d.ts +1 -0
  2. package/dist-client/index.js +1 -1
  3. package/dist-client/index.js.map +1 -1
  4. package/dist-client/pages/lib/chatbot-widget.d.ts +53 -0
  5. package/dist-client/pages/lib/chatbot-widget.js +631 -0
  6. package/dist-client/pages/lib/chatbot-widget.js.map +1 -0
  7. package/dist-client/pages/lib/select2-component.d.ts +1 -1
  8. package/dist-client/pages/lib/select2-component.js +35 -35
  9. package/dist-client/pages/lib/select2-component.js.map +1 -1
  10. package/dist-client/pages/lib/waether.d.ts +2 -1
  11. package/dist-client/pages/lib/waether.js +7 -3
  12. package/dist-client/pages/lib/waether.js.map +1 -1
  13. package/dist-client/pages/project/component/pagenation.d.ts +18 -0
  14. package/dist-client/pages/project/component/pagenation.js +142 -0
  15. package/dist-client/pages/project/component/pagenation.js.map +1 -0
  16. package/dist-client/pages/project/component/project-update-header.js +26 -3
  17. package/dist-client/pages/project/component/project-update-header.js.map +1 -1
  18. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.d.ts +1 -0
  19. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js +309 -0
  20. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js.map +1 -0
  21. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.d.ts +1 -0
  22. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js +357 -0
  23. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js.map +1 -0
  24. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.d.ts +1 -0
  25. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js +681 -0
  26. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js.map +1 -0
  27. package/dist-client/pages/project/popup/checklist/task-checklist-view.d.ts +32 -0
  28. package/dist-client/pages/project/popup/checklist/task-checklist-view.js +621 -0
  29. package/dist-client/pages/project/popup/checklist/task-checklist-view.js.map +1 -0
  30. package/dist-client/pages/project/popup/popup-plan-export.d.ts +10 -0
  31. package/dist-client/pages/project/popup/popup-plan-export.js +242 -0
  32. package/dist-client/pages/project/popup/popup-plan-export.js.map +1 -0
  33. package/dist-client/pages/project/popup/popup-plan-upload.d.ts +3 -0
  34. package/dist-client/pages/project/popup/popup-plan-upload.js +130 -4
  35. package/dist-client/pages/project/popup/popup-plan-upload.js.map +1 -1
  36. package/dist-client/pages/project/popup/{popup-schedule-upload.d.ts → popup-task-upload.d.ts} +1 -1
  37. package/dist-client/pages/project/popup/{popup-schedule-upload.js → popup-task-upload.js} +9 -9
  38. package/dist-client/pages/project/popup/popup-task-upload.js.map +1 -0
  39. package/dist-client/pages/project/project-completed-list.d.ts +5 -0
  40. package/dist-client/pages/project/project-completed-list.js +32 -3
  41. package/dist-client/pages/project/project-completed-list.js.map +1 -1
  42. package/dist-client/pages/project/project-detail.d.ts +2 -1
  43. package/dist-client/pages/project/project-detail.js +316 -97
  44. package/dist-client/pages/project/project-detail.js.map +1 -1
  45. package/dist-client/pages/project/project-list.d.ts +53 -0
  46. package/dist-client/pages/project/project-list.js +72 -3
  47. package/dist-client/pages/project/project-list.js.map +1 -1
  48. package/dist-client/pages/project/project-plan-management.js +29 -13
  49. package/dist-client/pages/project/project-plan-management.js.map +1 -1
  50. package/dist-client/pages/project/project-setting-list.d.ts +5 -0
  51. package/dist-client/pages/project/project-setting-list.js +32 -3
  52. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  53. package/dist-client/pages/project/{project-schedule-list.d.ts → project-task-list.d.ts} +2 -2
  54. package/dist-client/pages/project/{project-schedule-list.js → project-task-list.js} +11 -11
  55. package/dist-client/pages/project/project-task-list.js.map +1 -0
  56. package/dist-client/pages/project/{project-schedule.d.ts → project-task.d.ts} +17 -4
  57. package/dist-client/pages/project/project-task.js +686 -0
  58. package/dist-client/pages/project/project-task.js.map +1 -0
  59. package/dist-client/pages/project/project-update.d.ts +1 -0
  60. package/dist-client/pages/project/project-update.js +346 -42
  61. package/dist-client/pages/project/project-update.js.map +1 -1
  62. package/dist-client/route.d.ts +1 -1
  63. package/dist-client/route.js +4 -4
  64. package/dist-client/route.js.map +1 -1
  65. package/dist-client/tsconfig.tsbuildinfo +1 -1
  66. package/dist-server/controllers/parse-excel.js.map +1 -1
  67. package/dist-server/service/index.d.ts +2 -2
  68. package/dist-server/service/index.js +5 -2
  69. package/dist-server/service/index.js.map +1 -1
  70. package/dist-server/service/project/project-mutation.d.ts +1 -0
  71. package/dist-server/service/project/project-mutation.js +107 -4
  72. package/dist-server/service/project/project-mutation.js.map +1 -1
  73. package/dist-server/service/project/project-query.d.ts +3 -0
  74. package/dist-server/service/project/project-query.js +52 -0
  75. package/dist-server/service/project/project-query.js.map +1 -1
  76. package/dist-server/service/project/project-type.d.ts +6 -0
  77. package/dist-server/service/project/project-type.js +24 -2
  78. package/dist-server/service/project/project-type.js.map +1 -1
  79. package/dist-server/service/project/project.d.ts +14 -1
  80. package/dist-server/service/project/project.js +49 -2
  81. package/dist-server/service/project/project.js.map +1 -1
  82. package/dist-server/service/task/task-query.d.ts +2 -0
  83. package/dist-server/service/task/task-query.js +11 -0
  84. package/dist-server/service/task/task-query.js.map +1 -1
  85. package/dist-server/service/task/task.d.ts +2 -0
  86. package/dist-server/service/task/task.js +6 -0
  87. package/dist-server/service/task/task.js.map +1 -1
  88. package/dist-server/service/task-checklist-binding/index.d.ts +5 -0
  89. package/dist-server/service/task-checklist-binding/index.js +9 -0
  90. package/dist-server/service/task-checklist-binding/index.js.map +1 -0
  91. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.d.ts +5 -0
  92. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js +186 -0
  93. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js.map +1 -0
  94. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.d.ts +8 -0
  95. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js +61 -0
  96. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js.map +1 -0
  97. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.d.ts +15 -0
  98. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js +57 -0
  99. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js.map +1 -0
  100. package/dist-server/service/task-checklist-binding/task-checklist-binding.d.ts +22 -0
  101. package/dist-server/service/task-checklist-binding/task-checklist-binding.js +106 -0
  102. package/dist-server/service/task-checklist-binding/task-checklist-binding.js.map +1 -0
  103. package/dist-server/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +15 -12
  105. package/things-factory.config.js +3 -3
  106. package/translations/en.json +10 -9
  107. package/translations/ja.json +15 -1
  108. package/translations/ko.json +3 -0
  109. package/translations/ms.json +15 -1
  110. package/translations/zh.json +15 -1
  111. package/dist-client/pages/project/popup/popup-schedule-upload.js.map +0 -1
  112. package/dist-client/pages/project/project-schedule-list.js.map +0 -1
  113. package/dist-client/pages/project/project-schedule.js +0 -407
  114. package/dist-client/pages/project/project-schedule.js.map +0 -1
@@ -4,7 +4,7 @@ import { customElement, property } from 'lit/decorators.js';
4
4
  import { client } from '@operato/graphql';
5
5
  import { notify } from '@operato/layout';
6
6
  import gql from 'graphql-tag';
7
- let PopupScheduleUpload = class PopupScheduleUpload extends LitElement {
7
+ let PopupTaskUpload = class PopupTaskUpload extends LitElement {
8
8
  render() {
9
9
  var _a, _b;
10
10
  const icon = this.scheduleTable ? '' : 'upload';
@@ -54,7 +54,7 @@ let PopupScheduleUpload = class PopupScheduleUpload extends LitElement {
54
54
  }
55
55
  }
56
56
  };
57
- PopupScheduleUpload.styles = [
57
+ PopupTaskUpload.styles = [
58
58
  css `
59
59
  :host {
60
60
  display: flex;
@@ -93,13 +93,13 @@ PopupScheduleUpload.styles = [
93
93
  __decorate([
94
94
  property({ type: Object }),
95
95
  __metadata("design:type", Object)
96
- ], PopupScheduleUpload.prototype, "scheduleTable", void 0);
96
+ ], PopupTaskUpload.prototype, "scheduleTable", void 0);
97
97
  __decorate([
98
98
  property({ type: String }),
99
99
  __metadata("design:type", Object)
100
- ], PopupScheduleUpload.prototype, "projectId", void 0);
101
- PopupScheduleUpload = __decorate([
102
- customElement('popup-schedule-upload')
103
- ], PopupScheduleUpload);
104
- export { PopupScheduleUpload };
105
- //# sourceMappingURL=popup-schedule-upload.js.map
100
+ ], PopupTaskUpload.prototype, "projectId", void 0);
101
+ PopupTaskUpload = __decorate([
102
+ customElement('popup-task-upload')
103
+ ], PopupTaskUpload);
104
+ export { PopupTaskUpload };
105
+ //# sourceMappingURL=popup-task-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup-task-upload.js","sourceRoot":"","sources":["../../../../client/pages/project/popup/popup-task-upload.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,GAAG,MAAM,aAAa,CAAA;AAItB,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAyC7C,MAAM;;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;QAC/C,MAAM,WAAW,GAAG,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;QAE9D,OAAO,IAAI,CAAA;;;;mBAII,IAAI;oBACH,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,KAAI,EAAE;0BACxB,WAAW;sBACf,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;uCAKlB,IAAI,CAAC,MAAM;;;KAG7C,CAAA;IACH,CAAC;IAEO,MAAM;QACZ,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;IAED,UAAU;IACV,KAAK,CAAC,mBAAmB,CAAC,CAAc;QACtC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;QAEhC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE;gBACT,KAAK,EAAE;oBACL,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,aAAa,EAAE,IAAI;iBACpB;aACF;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAA;YACtC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;;AA3FM,sBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCF;CACF,AAnCY,CAmCZ;AAEmC;IAAnC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sDAA8C;AACrC;IAAnC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kDAAsC;AAvCtD,eAAe;IAD3B,aAAa,CAAC,mBAAmB,CAAC;GACtB,eAAe,CA6F3B","sourcesContent":["import { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\nimport { Attachment } from '@things-factory/attachment-base'\n\n@customElement('popup-task-upload')\nexport class PopupTaskUpload extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n background-color: #fff;\n width: 100%;\n }\n\n div[body] {\n flex: 1;\n\n div[input-container] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 25px;\n background-color: #f7f7f7;\n padding: 35px 27px 27px 27px;\n\n ox-input-file {\n height: 100px;\n width: 120px;\n line-height: 100%;\n }\n }\n\n div[button-container] {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: 20px;\n }\n }\n `\n ]\n\n @property({ type: Object }) private scheduleTable: Attachment | undefined\n @property({ type: String }) private projectId: string | undefined\n\n render() {\n const icon = this.scheduleTable ? '' : 'upload'\n const description = this.scheduleTable?.name ? ' ' : '공정표 업로드'\n\n return html`\n <div body>\n <div input-container>\n <ox-input-file\n icon=${icon}\n label=${this.scheduleTable?.name || ''}\n description=${description}\n @change=${this._onChangeAttachment.bind(this)}\n ></ox-input-file>\n </div>\n\n <div button-container>\n <md-outlined-button @click=${this._close}><md-icon slot=\"icon\">cancel</md-icon>취소</md-outlined-button>\n </div>\n </div>\n `\n }\n\n private _close() {\n history.back()\n }\n\n // 공정표 업로드\n async _onChangeAttachment(e: CustomEvent) {\n const file = e.detail[0] || null\n\n const response = await client.mutate({\n mutation: gql`\n mutation UploadProjectScheduleTable($param: UploadProjectScheduleTable!) {\n uploadProjectScheduleTable(param: $param)\n }\n `,\n variables: {\n param: {\n projectId: this.projectId,\n scheduleTable: file\n }\n },\n context: {\n hasUpload: true\n }\n })\n\n if (!response.errors) {\n notify({ message: '공정표가 업로드 되었습니다.' })\n this.dispatchEvent(new CustomEvent('uploaded'))\n }\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import '@material/web/icon/icon.js';
2
2
  import { PageView } from '@operato/shell';
3
+ import './component/pagenation';
3
4
  declare const ProjectCompletedListPage_base: typeof PageView & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types").ScopedElementsHost>;
4
5
  export declare class ProjectCompletedListPage extends ProjectCompletedListPage_base {
5
6
  static styles: import("lit").CSSResult[];
@@ -9,10 +10,14 @@ export declare class ProjectCompletedListPage extends ProjectCompletedListPage_b
9
10
  private projectName;
10
11
  private projectList;
11
12
  private projectCount;
13
+ private currentPage;
14
+ private readonly pageLimit;
15
+ get totalPages(): number;
12
16
  render(): import("lit-html").TemplateResult<1>;
13
17
  pageUpdated(changes: any, lifecycle: any): Promise<void>;
14
18
  getProjectList(): Promise<void>;
15
19
  private _onInputChange;
16
20
  private _onKeypress;
21
+ private _changePage;
17
22
  }
18
23
  export {};
@@ -7,18 +7,24 @@ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
7
7
  import { client } from '@operato/graphql';
8
8
  import gql from 'graphql-tag';
9
9
  import { ProjectState } from './project-list';
10
+ import './component/pagenation';
10
11
  let ProjectCompletedListPage = class ProjectCompletedListPage extends ScopedElementsMixin(PageView) {
11
12
  constructor() {
12
13
  super(...arguments);
13
14
  this.projectName = '';
14
15
  this.projectList = [];
15
16
  this.projectCount = 0;
17
+ this.currentPage = 1;
18
+ this.pageLimit = 20;
16
19
  }
17
20
  get context() {
18
21
  return {
19
22
  title: '완료 프로젝트'
20
23
  };
21
24
  }
25
+ get totalPages() {
26
+ return Math.max(1, Math.ceil((this.projectCount || 0) / this.pageLimit));
27
+ }
22
28
  render() {
23
29
  var _a;
24
30
  return html `
@@ -74,6 +80,12 @@ let ProjectCompletedListPage = class ProjectCompletedListPage extends ScopedElem
74
80
  `;
75
81
  })}
76
82
  </div>
83
+ <pagenation-control
84
+ .currentPage=${this.currentPage}
85
+ .totalItems=${this.projectCount}
86
+ .pageLimit=${this.pageLimit}
87
+ @page-change=${(e) => this._changePage(e.detail.page)}
88
+ ></pagenation-control>
77
89
  `;
78
90
  }
79
91
  async pageUpdated(changes, lifecycle) {
@@ -85,8 +97,8 @@ let ProjectCompletedListPage = class ProjectCompletedListPage extends ScopedElem
85
97
  var _a, _b;
86
98
  const response = await client.query({
87
99
  query: gql `
88
- query Projects($filters: [Filter!]) {
89
- projects(filters: $filters) {
100
+ query Projects($filters: [Filter!], $sortings: [Sorting!], $pagination: Pagination) {
101
+ projects(filters: $filters, sortings: $sortings, pagination: $pagination) {
90
102
  items {
91
103
  id
92
104
  name
@@ -127,7 +139,9 @@ let ProjectCompletedListPage = class ProjectCompletedListPage extends ScopedElem
127
139
  operator: 'eq',
128
140
  value: ProjectState.COMPLETED
129
141
  }
130
- ]
142
+ ],
143
+ sortings: [{ name: 'createdAt', desc: true }],
144
+ pagination: { page: this.currentPage, limit: this.pageLimit }
131
145
  }
132
146
  });
133
147
  this.projectList = ((_a = response.data.projects) === null || _a === void 0 ? void 0 : _a.items) || [];
@@ -137,10 +151,21 @@ let ProjectCompletedListPage = class ProjectCompletedListPage extends ScopedElem
137
151
  _onInputChange(event) {
138
152
  const target = event.target;
139
153
  this[target.name] = target.value;
154
+ if (target.name === 'projectName') {
155
+ this.currentPage = 1;
156
+ }
140
157
  }
141
158
  // 검색창에서 엔터입력시 검색
142
159
  _onKeypress(event) {
143
160
  if (event.code === 'Enter') {
161
+ this.currentPage = 1;
162
+ this.getProjectList();
163
+ }
164
+ }
165
+ _changePage(page) {
166
+ const nextPage = Math.min(Math.max(1, page), this.totalPages);
167
+ if (nextPage !== this.currentPage) {
168
+ this.currentPage = nextPage;
144
169
  this.getProjectList();
145
170
  }
146
171
  }
@@ -286,6 +311,10 @@ __decorate([
286
311
  state(),
287
312
  __metadata("design:type", Number)
288
313
  ], ProjectCompletedListPage.prototype, "projectCount", void 0);
314
+ __decorate([
315
+ state(),
316
+ __metadata("design:type", Number)
317
+ ], ProjectCompletedListPage.prototype, "currentPage", void 0);
289
318
  ProjectCompletedListPage = __decorate([
290
319
  customElement('project-completed-list')
291
320
  ], ProjectCompletedListPage);
@@ -1 +1 @@
1
- {"version":3,"file":"project-completed-list.js","sourceRoot":"","sources":["../../../client/pages/project/project-completed-list.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport { 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 { Project, ProjectState } from './project-list'\n\n@customElement('project-completed-list')\nexport class ProjectCompletedListPage 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 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 img[project-img][no-image] {\n object-fit: contain;\n opacity: 0.5;\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: #1bb40133;\n --md-sys-color-surface-container-highest: #0595e533;\n --md-linear-progress-track-color: #1bb4011a;\n }\n\n span {\n position: absolute;\n top: 0;\n left: 12px;\n font-size: 12px;\n font-weight: bold;\n color: #1bb401;\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\n ?no-image=${!project.mainPhoto?.fullpath}\n project-img\n src=${project.mainPhoto?.fullpath || '/assets/images/no-image.png'}\n />\n\n <span project-info>\n <div name>${project.name}</div>\n <div content>${project.buildingComplex.address}</div>\n <div content>면적: ${project.buildingComplex?.area?.toLocaleString() || ''}㎡</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}> </md-linear-progress>\n <span>전체</span>\n <span>${project.totalProgress || 0}%</span>\n </div>\n <div>시공사: ${project.buildingComplex.constructionCompany}</div>\n <div>건설구분: ${project.buildingComplex.constructionType}</div>\n <div>세대수: ${project.buildingComplex?.householdCount?.toLocaleString() || ''}세대</div>\n <div>기타: ${project.buildingComplex.etc}</div>\n </span>\n </a>\n </div>\n `\n })}\n </div>\n `\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (this.active) {\n this.getProjectList()\n }\n }\n\n async getProjectList() {\n const response = await client.query({\n query: gql`\n query Projects($filters: [Filter!]) {\n projects(filters: $filters) {\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 constructionCompany\n constructionType\n householdCount\n etc\n }\n }\n total\n }\n }\n `,\n variables: {\n filters: [\n {\n name: 'name',\n operator: 'search',\n value: `%${this.projectName}%`\n },\n {\n name: 'state',\n operator: 'eq',\n value: ProjectState.COMPLETED\n }\n ]\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"]}
1
+ {"version":3,"file":"project-completed-list.js","sourceRoot":"","sources":["../../../client/pages/project/project-completed-list.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport { 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 { Project, ProjectState } from './project-list'\nimport './component/pagenation'\n\n@customElement('project-completed-list')\nexport class ProjectCompletedListPage 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 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 img[project-img][no-image] {\n object-fit: contain;\n opacity: 0.5;\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: #1bb40133;\n --md-sys-color-surface-container-highest: #0595e533;\n --md-linear-progress-track-color: #1bb4011a;\n }\n\n span {\n position: absolute;\n top: 0;\n left: 12px;\n font-size: 12px;\n font-weight: bold;\n color: #1bb401;\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 @state() private currentPage: number = 1\n\n private readonly pageLimit: number = 20\n\n get totalPages(): number {\n return Math.max(1, Math.ceil((this.projectCount || 0) / this.pageLimit))\n }\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\n ?no-image=${!project.mainPhoto?.fullpath}\n project-img\n src=${project.mainPhoto?.fullpath || '/assets/images/no-image.png'}\n />\n\n <span project-info>\n <div name>${project.name}</div>\n <div content>${project.buildingComplex.address}</div>\n <div content>면적: ${project.buildingComplex?.area?.toLocaleString() || ''}㎡</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}> </md-linear-progress>\n <span>전체</span>\n <span>${project.totalProgress || 0}%</span>\n </div>\n <div>시공사: ${project.buildingComplex.constructionCompany}</div>\n <div>건설구분: ${project.buildingComplex.constructionType}</div>\n <div>세대수: ${project.buildingComplex?.householdCount?.toLocaleString() || ''}세대</div>\n <div>기타: ${project.buildingComplex.etc}</div>\n </span>\n </a>\n </div>\n `\n })}\n </div>\n <pagenation-control\n .currentPage=${this.currentPage}\n .totalItems=${this.projectCount}\n .pageLimit=${this.pageLimit}\n @page-change=${(e: CustomEvent) => this._changePage(e.detail.page)}\n ></pagenation-control>\n `\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (this.active) {\n this.getProjectList()\n }\n }\n\n async getProjectList() {\n const response = await client.query({\n query: gql`\n query Projects($filters: [Filter!], $sortings: [Sorting!], $pagination: Pagination) {\n projects(filters: $filters, sortings: $sortings, pagination: $pagination) {\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 constructionCompany\n constructionType\n householdCount\n etc\n }\n }\n total\n }\n }\n `,\n variables: {\n filters: [\n {\n name: 'name',\n operator: 'search',\n value: `%${this.projectName}%`\n },\n {\n name: 'state',\n operator: 'eq',\n value: ProjectState.COMPLETED\n }\n ],\n sortings: [{ name: 'createdAt', desc: true }],\n pagination: { page: this.currentPage, limit: this.pageLimit }\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 if (target.name === 'projectName') {\n this.currentPage = 1\n }\n }\n\n // 검색창에서 엔터입력시 검색\n private _onKeypress(event: KeyboardEvent) {\n if (event.code === 'Enter') {\n this.currentPage = 1\n this.getProjectList()\n }\n }\n\n private _changePage(page: number) {\n const nextPage = Math.min(Math.max(1, page), this.totalPages)\n if (nextPage !== this.currentPage) {\n this.currentPage = nextPage\n this.getProjectList()\n }\n }\n}\n"]}
@@ -16,7 +16,8 @@ interface Weather {
16
16
  rain: number;
17
17
  temperature: number;
18
18
  humidity: number;
19
- wind: string;
19
+ windDirection: string;
20
+ windSpeed: number;
20
21
  }
21
22
  declare const ProjectDetail_base: typeof PageView & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types").ScopedElementsHost>;
22
23
  export declare class ProjectDetail extends ProjectDetail_base {