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

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 +48 -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 +12 -1
  80. package/dist-server/service/project/project.js +37 -1
  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
@@ -10,7 +10,7 @@ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
10
10
  import { client } from '@operato/graphql';
11
11
  import { ScrollbarStyles } from '@operato/styles';
12
12
  import gql from 'graphql-tag';
13
- import { BUILDING_INSPECTION_STATUS } from './project-list';
13
+ import { BUILDING_INSPECTION_STATUS, ProjectType } from './project-list';
14
14
  import _getWeather from '../lib/waether';
15
15
  import '@operato/chart/ox-progress-circle.js';
16
16
  let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
@@ -42,7 +42,8 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
42
42
  rain: 0,
43
43
  temperature: 0,
44
44
  humidity: 0,
45
- wind: ''
45
+ windDirection: '',
46
+ windSpeed: 0
46
47
  };
47
48
  }
48
49
  get context() {
@@ -51,18 +52,29 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
51
52
  };
52
53
  }
53
54
  render() {
54
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
55
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
56
+ let totalInspectionCount = this.inspectionSummary.pass + this.inspectionSummary.fail + this.inspectionSummary.request + this.inspectionSummary.wait;
55
57
  return html `
56
58
  <div header>
57
- <h2>${this.project.name}</h2>
59
+ <h2>
60
+ <md-icon slot="icon" back @click=${() => history.back()}>arrow_back</md-icon>
61
+ ${this.project.name}
62
+ </h2>
58
63
  <div button-container>
64
+ <md-elevated-button
65
+ target="_blank"
66
+ href=${((_a = this.project.buildingComplex) === null || _a === void 0 ? void 0 : _a.virtualTourLink) || ''}
67
+ ?disabled=${!((_b = this.project.buildingComplex) === null || _b === void 0 ? void 0 : _b.virtualTourLink)}
68
+ >
69
+ <md-icon slot="icon">smart_toy</md-icon>Virtual Tour
70
+ </md-elevated-button>
59
71
  <md-elevated-button href=${`project-update/${this.project.id}`}>
60
72
  <md-icon slot="icon">assignment</md-icon>프로젝트 정보 수정
61
73
  </md-elevated-button>
62
74
  <md-elevated-button href=${`project-plan-management/${this.project.id}`}>
63
75
  <md-icon slot="icon">description</md-icon>도면 관리
64
76
  </md-elevated-button>
65
- <md-elevated-button href=${`project-schedule/${this.project.id}`}>
77
+ <md-elevated-button href=${`project-task/${this.project.id}`}>
66
78
  <md-icon slot="icon">event_note</md-icon>공정표 관리
67
79
  </md-elevated-button>
68
80
  </div>
@@ -74,14 +86,14 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
74
86
  <h3>기본 정보</h3>
75
87
  <div content-1>
76
88
  <img
77
- ?no-image=${!((_a = this.project.mainPhoto) === null || _a === void 0 ? void 0 : _a.fullpath)}
78
- src=${((_b = this.project.mainPhoto) === null || _b === void 0 ? void 0 : _b.fullpath) || '/assets/images/no-image.png'}
89
+ ?no-image=${!((_c = this.project.mainPhoto) === null || _c === void 0 ? void 0 : _c.fullpath)}
90
+ src=${((_d = this.project.mainPhoto) === null || _d === void 0 ? void 0 : _d.fullpath) || '/assets/images/no-image.png'}
79
91
  />
80
92
 
81
93
  <div>
82
94
  <div row>
83
95
  <span>- 면적 : </span>
84
- <span>${(_d = (_c = this.project.buildingComplex) === null || _c === void 0 ? void 0 : _c.area) === null || _d === void 0 ? void 0 : _d.toLocaleString()} ㎡</span>
96
+ <span>${(_f = (_e = this.project.buildingComplex) === null || _e === void 0 ? void 0 : _e.area) === null || _f === void 0 ? void 0 : _f.toLocaleString()} ㎡</span>
85
97
  </div>
86
98
  <div row>
87
99
  <span>- 착공~준공 : </span>
@@ -89,19 +101,19 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
89
101
  </div>
90
102
  <div row>
91
103
  <span>- 발주처 : </span>
92
- <span>${(_e = this.project.buildingComplex) === null || _e === void 0 ? void 0 : _e.clientCompany}</span>
104
+ <span>${(_g = this.project.buildingComplex) === null || _g === void 0 ? void 0 : _g.clientCompany}</span>
93
105
  </div>
94
106
  <div row>
95
107
  <span>- 건설사 : </span>
96
- <span>${(_f = this.project.buildingComplex) === null || _f === void 0 ? void 0 : _f.constructionCompany}</span>
108
+ <span>${(_h = this.project.buildingComplex) === null || _h === void 0 ? void 0 : _h.constructionCompany}</span>
97
109
  </div>
98
110
  <div row>
99
111
  <span>- 감리사 : </span>
100
- <span>${(_g = this.project.buildingComplex) === null || _g === void 0 ? void 0 : _g.supervisoryCompany}</span>
112
+ <span>${(_j = this.project.buildingComplex) === null || _j === void 0 ? void 0 : _j.supervisoryCompany}</span>
101
113
  </div>
102
114
  <div row>
103
115
  <span>- 설계사 : </span>
104
- <span>${(_h = this.project.buildingComplex) === null || _h === void 0 ? void 0 : _h.designCompany}</span>
116
+ <span>${(_k = this.project.buildingComplex) === null || _k === void 0 ? void 0 : _k.designCompany}</span>
105
117
  </div>
106
118
  </div>
107
119
  </div>
@@ -109,32 +121,32 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
109
121
  <div content-2>
110
122
  <div row>
111
123
  <span>- 건설구분 : </span>
112
- <span>${(_j = this.project.buildingComplex) === null || _j === void 0 ? void 0 : _j.constructionType}</span>
124
+ <span>${(_l = this.project.buildingComplex) === null || _l === void 0 ? void 0 : _l.constructionType}</span>
113
125
  </div>
114
126
  <div row>
115
127
  <span>- 공사금액 : </span>
116
- <span>${(_l = (_k = this.project.buildingComplex) === null || _k === void 0 ? void 0 : _k.constructionCost) === null || _l === void 0 ? void 0 : _l.toLocaleString()} 원</span>
128
+ <span>${(_o = (_m = this.project.buildingComplex) === null || _m === void 0 ? void 0 : _m.constructionCost) === null || _o === void 0 ? void 0 : _o.toLocaleString()} 원</span>
117
129
  </div>
118
130
  <div row>
119
131
  <span>- 세대수 : </span>
120
- <span>${(_o = (_m = this.project.buildingComplex) === null || _m === void 0 ? void 0 : _m.householdCount) === null || _o === void 0 ? void 0 : _o.toLocaleString()}</span>
132
+ <span>${(_q = (_p = this.project.buildingComplex) === null || _p === void 0 ? void 0 : _p.householdCount) === null || _q === void 0 ? void 0 : _q.toLocaleString()}</span>
121
133
  </div>
122
134
  <div row>
123
135
  <span>- 기타 : </span>
124
- <span>${(_p = this.project.buildingComplex) === null || _p === void 0 ? void 0 : _p.etc}</span>
136
+ <span>${(_r = this.project.buildingComplex) === null || _r === void 0 ? void 0 : _r.etc}</span>
125
137
  </div>
126
138
  </div>
127
139
  </div>
128
140
 
129
141
  <div left-bottom>
130
142
  <h3>조감도(BIM도면)</h3>
131
- ${((_r = (_q = this.project.buildingComplex) === null || _q === void 0 ? void 0 : _q.drawing) === null || _r === void 0 ? void 0 : _r.fullpath)
143
+ ${((_t = (_s = this.project.buildingComplex) === null || _s === void 0 ? void 0 : _s.drawing) === null || _t === void 0 ? void 0 : _t.fullpath)
132
144
  ? html `<div building-complex-img></div>`
133
145
  : html `<img building-complex-img src="/assets/images/img-building-complex-default.jpg" />`}
134
146
  <div>
135
147
  <div subject bold>개별 단지 상세정보 바로가기</div>
136
148
  <div building-container>
137
- ${(_t = (_s = this.project.buildingComplex) === null || _s === void 0 ? void 0 : _s.buildings) === null || _t === void 0 ? void 0 : _t.map(building => {
149
+ ${(_v = (_u = this.project.buildingComplex) === null || _u === void 0 ? void 0 : _u.buildings) === null || _v === void 0 ? void 0 : _v.map(building => {
138
150
  return html `<md-outlined-button href=${`building-complex-detail/${this.project.id}?buildingId=${building.id}`}>
139
151
  ${building.name}
140
152
  </md-outlined-button>`;
@@ -147,56 +159,135 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
147
159
  <div>
148
160
  <div right-top>
149
161
  <h3>프로젝트 현황</h3>
162
+
163
+ <div kpi-header>
164
+ <span kpi-datetime
165
+ >${new Date().toLocaleDateString('ko-KR')}
166
+ ${new Date().toLocaleTimeString('ko-KR', { hour: '2-digit', minute: '2-digit', hour12: false })}</span
167
+ >
168
+ </div>
150
169
  <div state>
151
- <span progress>
152
- <ox-progress-circle
153
- .value=${this.project.totalProgress}
154
- titleText="전체"
155
- suffix="%"
156
- fontSize="27px"
157
- fontColor="#4E5055"
158
- borderStyle="none"
159
- innerCircleSize="28%"
160
- circleColor="#0595E5"
161
- shadow="#00000026 4px 4px 4px"
162
- background="#eaf5fd"
163
- ></ox-progress-circle>
164
- <div>전체공정율(%)</div>
165
- </span>
166
- <span progress>
167
- <ox-progress-circle
168
- .value=${this.project.weeklyProgress}
169
- titleText="주간"
170
- suffix="%"
171
- fontSize="27px"
172
- fontColor="#4E5055"
173
- borderStyle="none"
174
- innerCircleSize="28%"
175
- circleColor="#06B5AF"
176
- shadow="#00000026 4px 4px 4px"
177
- background="#eaf7f7"
178
- ></ox-progress-circle>
179
- <div week>주간공정율(%)</div>
180
- </span>
181
- <span weather>
182
- <div bold>현장현황</div>
183
- <div>
184
- <span><md-icon slot="icon">rainy</md-icon>강수확률</span>
185
- <span bold>${this.weather.rain}%</span>
170
+ <div kpi-container>
171
+ <div kpi-info-item kpi>
172
+ <ox-progress-circle
173
+ .value=${this.project.kpi || 0}
174
+ fontColor="transparent"
175
+ borderStyle="none"
176
+ innerCircleSize="30%"
177
+ circleColor="#E15757"
178
+ background="#f6f6f6"
179
+ size="120px"
180
+ ></ox-progress-circle>
181
+
182
+ <div kpi-info-label>
183
+ <span kpi-info-label>KPI 지수</span>
184
+ <span kpi-info-value bold>${this.project.kpi || 0}%</span>
185
+ </div>
186
186
  </div>
187
- <div>
188
- <span><md-icon slot="icon">humidity_percentage</md-icon> 습도</span>
189
- <span bold>${this.weather.humidity}%</span>
187
+ <div kpi-info-item>
188
+ <span kpi-info-label>검측 통과율</span>
189
+ <span kpi-info-value>
190
+ <span bold>${((_w = this.inspectionSummary.pass) === null || _w === void 0 ? void 0 : _w.toLocaleString()) || 0}</span>
191
+ <span small> / ${(totalInspectionCount === null || totalInspectionCount === void 0 ? void 0 : totalInspectionCount.toLocaleString()) || 0}</span>
192
+ </span>
190
193
  </div>
191
- <div>
192
- <span><md-icon slot="icon">thermostat</md-icon> 온도</span>
193
- <span bold>${this.weather.temperature}°C</span>
194
+ <div kpi-info-item>
195
+ <span kpi-info-label>작업 중 로봇</span>
196
+ <span kpi-info-value>
197
+ <span bold>${((_x = this.project.robotCount) === null || _x === void 0 ? void 0 : _x.toLocaleString()) || 0}</span>
198
+ <span small> 대</span>
199
+ </span>
194
200
  </div>
195
- <div>
196
- <span><md-icon slot="icon">air</md-icon> 풍향</span>
197
- <span bold>${this.weather.wind}</span>
201
+ <div kpi-info-item weather>
202
+ <div>
203
+ <span><md-icon slot="icon">rainy</md-icon>강수확률</span>
204
+ <span bold>${this.weather.rain}%</span>
205
+ </div>
206
+ <div>
207
+ <span><md-icon slot="icon">humidity_percentage</md-icon> 습도</span>
208
+ <span bold>${this.weather.humidity}%</span>
209
+ </div>
210
+ <div>
211
+ <span><md-icon slot="icon">thermostat</md-icon> 온도</span>
212
+ <span bold>${this.weather.temperature}°C</span>
213
+ </div>
214
+
215
+ <!--
216
+ <div>
217
+ <span><md-icon slot="icon">arrows_output</md-icon> 풍향</span>
218
+ <span bold>${this.weather.windDirection}</span>
219
+ </div>
220
+ <div>
221
+ <span><md-icon slot="icon">air</md-icon> 풍속</span>
222
+ <span bold>${this.weather.windSpeed} m/s</span>
223
+ </div>
224
+ -->
198
225
  </div>
199
- </span>
226
+ </div>
227
+
228
+ <div progress-container>
229
+ <span progress>
230
+ <ox-progress-circle
231
+ .value=${this.project.totalProgress}
232
+ titleText="전체"
233
+ suffix="%"
234
+ fontSize="27px"
235
+ fontColor="#4E5055"
236
+ borderStyle="none"
237
+ innerCircleSize="28%"
238
+ circleColor="#0595E5"
239
+ shadow="#00000026 4px 4px 4px"
240
+ background="#eaf5fd"
241
+ ></ox-progress-circle>
242
+ <div>전체공정율(%)</div>
243
+ </span>
244
+ <span progress>
245
+ <ox-progress-circle
246
+ .value=${this.project.weeklyProgress}
247
+ titleText="주간"
248
+ suffix="%"
249
+ fontSize="27px"
250
+ fontColor="#4E5055"
251
+ borderStyle="none"
252
+ innerCircleSize="28%"
253
+ circleColor="#06B5AF"
254
+ shadow="#00000026 4px 4px 4px"
255
+ background="#eaf7f7"
256
+ ></ox-progress-circle>
257
+ <div week>주간공정율(%)</div>
258
+ </span>
259
+
260
+ <span progress>
261
+ <ox-progress-circle
262
+ .value=${this.project.inspPassRate}
263
+ titleText="검측 통과"
264
+ suffix="%"
265
+ fontSize="27px"
266
+ fontColor="#4E5055"
267
+ borderStyle="none"
268
+ innerCircleSize="28%"
269
+ circleColor="#1BB401"
270
+ shadow="#00000026 4px 4px 4px"
271
+ background="#e8f7e5"
272
+ ></ox-progress-circle>
273
+ <div insp-pass-rate>통과 비율(%)</div>
274
+ </span>
275
+ <span progress>
276
+ <ox-progress-circle
277
+ .value=${this.project.robotProgressRate}
278
+ titleText="로봇작업"
279
+ suffix="%"
280
+ fontSize="27px"
281
+ fontColor="#4E5055"
282
+ borderStyle="none"
283
+ innerCircleSize="28%"
284
+ circleColor="#8957D8"
285
+ shadow="#00000026 4px 4px 4px"
286
+ background="#f3eefb"
287
+ ></ox-progress-circle>
288
+ <div robot-progress-rate>진행률(%)</div>
289
+ </span>
290
+ </div>
200
291
  </div>
201
292
  <div inspection>
202
293
  <span name bold>
@@ -205,11 +296,11 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
205
296
  </span>
206
297
  <span>
207
298
  <div>검측요청</div>
208
- <div bold>${this.inspectionSummary.wait}</div>
299
+ <div bold>${this.inspectionSummary.request}</div>
209
300
  </span>
210
301
  <span>
211
302
  <div>검측대기</div>
212
- <div bold>${this.inspectionSummary.request}</div>
303
+ <div bold>${this.inspectionSummary.wait}</div>
213
304
  </span>
214
305
  <span>
215
306
  <div>합격</div>
@@ -244,13 +335,15 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
244
335
  <tbody>
245
336
  ${this.buildingInspections.map((inspection, idx) => {
246
337
  var _a, _b, _c, _d, _e, _f;
247
- return html ` <tr @click=${() => this._onClickInspection(inspection.id || '')}>
338
+ return html ` <tr @click=${() => this._onClickInspection(inspection)}>
248
339
  <td>${idx + 1}</td>
249
- <td>${(_b = (_a = inspection === null || inspection === void 0 ? void 0 : inspection.buildingLevel) === null || _a === void 0 ? void 0 : _a.building) === null || _b === void 0 ? void 0 : _b.name} ${(_c = inspection === null || inspection === void 0 ? void 0 : inspection.buildingLevel) === null || _c === void 0 ? void 0 : _c.floor}층</td>
340
+ <td>${(_b = (_a = inspection === null || inspection === void 0 ? void 0 : inspection.buildingLevel) === null || _a === void 0 ? void 0 : _a.building) === null || _b === void 0 ? void 0 : _b.name} ${(_c = inspection === null || inspection === void 0 ? void 0 : inspection.buildingLevel) === null || _c === void 0 ? void 0 : _c.floorDisplayName}층</td>
250
341
  <td bold>${(_d = inspection.checklist) === null || _d === void 0 ? void 0 : _d.constructionType}</td>
251
342
  <td>${((_f = (_e = inspection.checklist) === null || _e === void 0 ? void 0 : _e.inspectionParts) === null || _f === void 0 ? void 0 : _f.join(', ')) || ''}</td>
252
343
  <td>${this._formatDate(inspection.requestDate)}</td>
253
- <td bold>${inspection.status && BUILDING_INSPECTION_STATUS[inspection.status]}</td>
344
+ <td bold status=${inspection.status || ''}>
345
+ ${inspection.status && BUILDING_INSPECTION_STATUS[inspection.status]}
346
+ </td>
254
347
  </tr>`;
255
348
  })}
256
349
  </tbody>
@@ -278,6 +371,7 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
278
371
  name
279
372
  startDate
280
373
  endDate
374
+ projectType
281
375
  mainPhoto {
282
376
  fullpath
283
377
  }
@@ -287,6 +381,7 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
287
381
  inspPassRate
288
382
  robotProgressRate
289
383
  structuralSafetyRate
384
+ robotCount
290
385
  buildingComplex {
291
386
  id
292
387
  address
@@ -308,6 +403,7 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
308
403
  notice
309
404
  householdCount
310
405
  buildingCount
406
+ virtualTourLink
311
407
  buildings {
312
408
  id
313
409
  name
@@ -329,8 +425,11 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
329
425
  status
330
426
  requestDate
331
427
  buildingLevel {
428
+ id
332
429
  floor
430
+ floorDisplayName
333
431
  building {
432
+ id
334
433
  name
335
434
  }
336
435
  }
@@ -364,8 +463,15 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
364
463
  this.weather = await _getWeather(latitude, longitude);
365
464
  }
366
465
  }
367
- _onClickInspection(buildingInspectionId) {
368
- navigate(`building-inspection-detail-drawing/${buildingInspectionId}`);
466
+ _onClickInspection(buildingInspection) {
467
+ var _a, _b, _c;
468
+ console.log('buildingInspection :', buildingInspection);
469
+ if (this.project.projectType === ProjectType.DSSP) {
470
+ navigate(`building-inspection-grid-detail/${this.project.id}?buildingId=${(_b = (_a = buildingInspection === null || buildingInspection === void 0 ? void 0 : buildingInspection.buildingLevel) === null || _a === void 0 ? void 0 : _a.building) === null || _b === void 0 ? void 0 : _b.id}&levelId=${(_c = buildingInspection === null || buildingInspection === void 0 ? void 0 : buildingInspection.buildingLevel) === null || _c === void 0 ? void 0 : _c.id}`);
471
+ }
472
+ else if (this.project.projectType === ProjectType.DCSP) {
473
+ navigate(`building-inspection-detail-drawing/${buildingInspection.id}`);
474
+ }
369
475
  }
370
476
  _formatDate(date) {
371
477
  return date
@@ -398,7 +504,7 @@ ProjectDetail.styles = [
398
504
  --md-outlined-button-container-height: 30px;
399
505
  --md-outlined-button-trailing-space: var(--spacing-medium, 8px);
400
506
  --md-outlined-button-leading-space: var(--spacing-medium, 8px);
401
- --md-sys-color-outline: rgba(51,51,51,.20);
507
+ --md-sys-color-outline: rgba(51, 51, 51, 0.2);
402
508
  }
403
509
 
404
510
  *[bold] {
@@ -410,9 +516,28 @@ ProjectDetail.styles = [
410
516
  margin: 0px var(--spacing-large, 12px);
411
517
 
412
518
  h2 {
519
+ display: flex;
520
+ gap: 7px;
413
521
  flex: 0.5;
414
522
  color: #3f71a0;
415
- font-size:18px;
523
+ font-size: 18px;
524
+
525
+ md-icon[back] {
526
+ background: linear-gradient(135deg, #3f71a0 0%, #5a8cc7 100%);
527
+ color: white;
528
+ padding: 8px;
529
+ border-radius: 50%;
530
+ cursor: pointer;
531
+ box-shadow: 0 2px 8px rgba(63, 113, 160, 0.3);
532
+ width: 14px;
533
+ height: 14px;
534
+ --md-icon-size: 20px;
535
+ }
536
+
537
+ md-icon[back]:hover {
538
+ background: linear-gradient(135deg, #2e5c89 0%, #4a7bb0 100%);
539
+ box-shadow: 0 4px 12px rgba(63, 113, 160, 0.4);
540
+ }
416
541
  }
417
542
 
418
543
  div[button-container] {
@@ -443,7 +568,7 @@ ProjectDetail.styles = [
443
568
  div[body] {
444
569
  display: flex;
445
570
  margin: var(--spacing-large, 12px);
446
- margin-top:0;
571
+ margin-top: 0;
447
572
  gap: var(--spacing-medium, 8px);
448
573
 
449
574
  h3 {
@@ -529,41 +654,55 @@ ProjectDetail.styles = [
529
654
  --md-outlined-button-container-height: 30px;
530
655
  --md-outlined-button-trailing-space: var(--spacing-medium, 8px);
531
656
  --md-outlined-button-leading-space: var(--spacing-medium, 8px);
532
- --md-sys-color-outline: rgba(51,51,51,.20);
657
+ --md-sys-color-outline: rgba(51, 51, 51, 0.2);
533
658
  }
534
659
  }
535
660
  }
536
661
 
537
662
  div[right-top] {
538
663
  div[state] {
539
- display: grid;
540
- grid-template-columns: 0.95fr 0.95fr 1.1fr;
664
+ display: flex;
665
+ flex-direction: column;
541
666
  gap: var(--spacing-large, 12px);
542
667
 
543
- span[progress] {
544
- max-width: 150px;
545
- text-align: center;
668
+ div[progress-container] {
546
669
  display: flex;
547
- justify-self: center;
548
- flex-direction: column;
549
- width: 100%;
670
+ justify-content: space-around;
671
+ gap: 8px;
550
672
 
551
- & > div {
552
- font-weight: bold;
553
- color: #2e79be;
554
- font-size: 12px;
555
- margin-top: var(--spacing-small, 4px);
556
- }
557
- & > div[week] {
558
- color: #06b5af;
673
+ span[progress] {
674
+ max-width: 165px;
675
+ text-align: center;
676
+ display: flex;
677
+ justify-self: center;
678
+ flex-direction: column;
679
+ width: 100%;
680
+ margin-inline: 12px;
681
+
682
+ & > div {
683
+ font-weight: bold;
684
+ color: #2e79be;
685
+ font-size: 16px;
686
+ margin-top: 9px;
687
+ }
688
+ & > div[week] {
689
+ color: #06b5af;
690
+ }
691
+ & > div[insp-pass-rate] {
692
+ color: #1bb401;
693
+ }
694
+ & > div[robot-progress-rate] {
695
+ color: #8957d8;
696
+ }
559
697
  }
560
698
  }
561
- span[weather] {
699
+
700
+ div[weather] {
562
701
  display: flex;
563
702
  flex-direction: column;
564
703
  gap: var(--spacing-small, 4px);
565
704
  margin-left: var(--spacing-medium, 8px);
566
- font-size:14px;
705
+ font-size: 14px;
567
706
 
568
707
  & > div {
569
708
  display: flex;
@@ -573,8 +712,8 @@ ProjectDetail.styles = [
573
712
 
574
713
  & > span {
575
714
  display: flex;
576
- align-item:center;
577
- var(--spacing-tiny, 2px);
715
+ align-items: center;
716
+ gap: var(--spacing-tiny, 2px);
578
717
  }
579
718
  }
580
719
  }
@@ -582,7 +721,7 @@ ProjectDetail.styles = [
582
721
  div[inspection] {
583
722
  display: grid;
584
723
  grid-template-columns: 1.4fr 0.9fr 0.9fr 0.9fr 0.9fr;
585
- margin-top: var(--spacing-small, 4px);
724
+ margin-top: 10px;
586
725
  background: #f6f6f6;
587
726
  border-radius: 7px;
588
727
  padding: var(--spacing-small, 4px) 0px;
@@ -610,7 +749,7 @@ ProjectDetail.styles = [
610
749
  flex-direction: row;
611
750
  text-align: right;
612
751
  gap: var(--spacing-medium, 8px);
613
- line-height:1.3;
752
+ line-height: 1.3;
614
753
 
615
754
  md-icon {
616
755
  width: 40px;
@@ -621,6 +760,82 @@ ProjectDetail.styles = [
621
760
  }
622
761
  }
623
762
  }
763
+ div[kpi-container] {
764
+ display: flex;
765
+ gap: 8px;
766
+ margin-bottom: 8px;
767
+ align-items: center;
768
+
769
+ div[kpi-header] {
770
+ grid-column: 1 / -1;
771
+ display: flex;
772
+ justify-content: space-between;
773
+ align-items: center;
774
+ margin-bottom: var(--spacing-small, 4px);
775
+
776
+ span[kpi-title] {
777
+ font-weight: bold;
778
+ font-size: 16px;
779
+ color: #2e79be;
780
+ }
781
+
782
+ span[kpi-datetime] {
783
+ font-size: 12px;
784
+ color: #666;
785
+ }
786
+ }
787
+
788
+ div[kpi-info-item] {
789
+ display: flex;
790
+ flex: 1;
791
+ flex-direction: column;
792
+ align-items: center;
793
+ padding: 5px;
794
+ background: #f6f6f6;
795
+ border-radius: 4px;
796
+ min-height: 50px;
797
+ justify-content: center;
798
+ margin-inline: 12px;
799
+ border-radius: 7px;
800
+
801
+ span[kpi-info-label] {
802
+ font-size: 16px;
803
+ color: #4e5055;
804
+ margin-bottom: 2px;
805
+ }
806
+
807
+ span[kpi-info-value] {
808
+ font-size: 18px;
809
+
810
+ & > span[small] {
811
+ font-size: 17px;
812
+ }
813
+ }
814
+
815
+ &[weather] {
816
+ background: none;
817
+ align-items: flex-start;
818
+
819
+ & > div {
820
+ width: 100%;
821
+ }
822
+ }
823
+
824
+ &[kpi] {
825
+ flex-direction: row;
826
+ justify-content: space-around;
827
+
828
+ div[kpi-info-label] {
829
+ display: flex;
830
+ flex-direction: column;
831
+ }
832
+
833
+ ox-progress-circle {
834
+ width: 45px;
835
+ }
836
+ }
837
+ }
838
+ }
624
839
  div[notice] {
625
840
  margin-top: var(--spacing-medium, 8px);
626
841
 
@@ -679,7 +894,7 @@ ProjectDetail.styles = [
679
894
  }
680
895
 
681
896
  tbody td {
682
- border-bottom: 1px solid rgba(51,51,51,.20);
897
+ border-bottom: 1px solid rgba(51, 51, 51, 0.2);
683
898
  padding: var(--spacing-small, 4px);
684
899
  text-align: center;
685
900
  white-space: nowrap;
@@ -688,6 +903,10 @@ ProjectDetail.styles = [
688
903
  font-size: 13px;
689
904
  }
690
905
 
906
+ tbody td[status='FAIL'] {
907
+ color: #e15757;
908
+ }
909
+
691
910
  md-elevated-button {
692
911
  margin: 0 var(--spacing-small, 4px);
693
912