@dssp/project 1.0.0-alpha.8 → 1.0.0-alpha.80

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 (149) 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/project/component/pagenation.d.ts +18 -0
  11. package/dist-client/pages/project/component/pagenation.js +142 -0
  12. package/dist-client/pages/project/component/pagenation.js.map +1 -0
  13. package/dist-client/pages/project/component/project-update-header.js +26 -3
  14. package/dist-client/pages/project/component/project-update-header.js.map +1 -1
  15. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.d.ts +1 -0
  16. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js +308 -0
  17. package/dist-client/pages/project/popup/checklist/task-checklist-attachment-list-popup.js.map +1 -0
  18. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.d.ts +1 -0
  19. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js +356 -0
  20. package/dist-client/pages/project/popup/checklist/task-checklist-comment-list-popup.js.map +1 -0
  21. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.d.ts +1 -0
  22. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js +681 -0
  23. package/dist-client/pages/project/popup/checklist/task-checklist-create-popup.js.map +1 -0
  24. package/dist-client/pages/project/popup/checklist/task-checklist-view.d.ts +32 -0
  25. package/dist-client/pages/project/popup/checklist/task-checklist-view.js +620 -0
  26. package/dist-client/pages/project/popup/checklist/task-checklist-view.js.map +1 -0
  27. package/dist-client/pages/project/popup/popup-plan-export.js +8 -2
  28. package/dist-client/pages/project/popup/popup-plan-export.js.map +1 -1
  29. package/dist-client/pages/project/popup/{popup-schedule-upload.d.ts → popup-task-upload.d.ts} +1 -1
  30. package/dist-client/pages/project/popup/{popup-schedule-upload.js → popup-task-upload.js} +9 -9
  31. package/dist-client/pages/project/popup/popup-task-upload.js.map +1 -0
  32. package/dist-client/pages/project/project-completed-list.d.ts +5 -0
  33. package/dist-client/pages/project/project-completed-list.js +32 -3
  34. package/dist-client/pages/project/project-completed-list.js.map +1 -1
  35. package/dist-client/pages/project/project-detail.d.ts +6 -0
  36. package/dist-client/pages/project/project-detail.js +222 -89
  37. package/dist-client/pages/project/project-detail.js.map +1 -1
  38. package/dist-client/pages/project/project-list.d.ts +57 -0
  39. package/dist-client/pages/project/project-list.js +80 -9
  40. package/dist-client/pages/project/project-list.js.map +1 -1
  41. package/dist-client/pages/project/project-plan-management.js +3 -1
  42. package/dist-client/pages/project/project-plan-management.js.map +1 -1
  43. package/dist-client/pages/project/project-setting-list.d.ts +7 -0
  44. package/dist-client/pages/project/project-setting-list.js +61 -7
  45. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  46. package/dist-client/pages/project/{project-schedule-list.d.ts → project-task-list.d.ts} +2 -2
  47. package/dist-client/pages/project/{project-schedule-list.js → project-task-list.js} +11 -11
  48. package/dist-client/pages/project/project-task-list.js.map +1 -0
  49. package/dist-client/pages/project/{project-schedule.d.ts → project-task.d.ts} +17 -4
  50. package/dist-client/pages/project/project-task.js +688 -0
  51. package/dist-client/pages/project/project-task.js.map +1 -0
  52. package/dist-client/pages/project/project-update.d.ts +34 -0
  53. package/dist-client/pages/project/project-update.js +505 -35
  54. package/dist-client/pages/project/project-update.js.map +1 -1
  55. package/dist-client/pages/resource/construction-type-management.js +14 -0
  56. package/dist-client/pages/resource/construction-type-management.js.map +1 -1
  57. package/dist-client/pages/resource/resource-list-page.d.ts +1 -2
  58. package/dist-client/pages/resource/resource-list-page.js +1 -2
  59. package/dist-client/pages/resource/resource-list-page.js.map +1 -1
  60. package/dist-client/pages/task/task-list-page.d.ts +1 -2
  61. package/dist-client/pages/task/task-list-page.js +1 -2
  62. package/dist-client/pages/task/task-list-page.js.map +1 -1
  63. package/dist-client/pages/task-resource/task-resource-list-page.d.ts +1 -2
  64. package/dist-client/pages/task-resource/task-resource-list-page.js +1 -2
  65. package/dist-client/pages/task-resource/task-resource-list-page.js.map +1 -1
  66. package/dist-client/route.d.ts +1 -1
  67. package/dist-client/route.js +4 -4
  68. package/dist-client/route.js.map +1 -1
  69. package/dist-client/tsconfig.tsbuildinfo +1 -1
  70. package/dist-server/controllers/parse-excel.js.map +1 -1
  71. package/dist-server/migrations/1723861466414-seed-codes.js +1 -1
  72. package/dist-server/migrations/1723861466414-seed-codes.js.map +1 -1
  73. package/dist-server/service/construction-type/construction-type-query.d.ts +2 -2
  74. package/dist-server/service/construction-type/construction-type-query.js +5 -10
  75. package/dist-server/service/construction-type/construction-type-query.js.map +1 -1
  76. package/dist-server/service/construction-type/construction-type-type.d.ts +1 -0
  77. package/dist-server/service/construction-type/construction-type-type.js +4 -0
  78. package/dist-server/service/construction-type/construction-type-type.js.map +1 -1
  79. package/dist-server/service/construction-type/construction-type.d.ts +1 -0
  80. package/dist-server/service/construction-type/construction-type.js +5 -0
  81. package/dist-server/service/construction-type/construction-type.js.map +1 -1
  82. package/dist-server/service/index.d.ts +2 -2
  83. package/dist-server/service/index.js +5 -2
  84. package/dist-server/service/index.js.map +1 -1
  85. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.d.ts +2 -2
  86. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js +5 -10
  87. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js.map +1 -1
  88. package/dist-server/service/manager/manager-query.d.ts +1 -1
  89. package/dist-server/service/manager/manager-query.js +2 -6
  90. package/dist-server/service/manager/manager-query.js.map +1 -1
  91. package/dist-server/service/project/issue-project-code.d.ts +7 -0
  92. package/dist-server/service/project/issue-project-code.js +27 -0
  93. package/dist-server/service/project/issue-project-code.js.map +1 -0
  94. package/dist-server/service/project/project-mutation.d.ts +2 -0
  95. package/dist-server/service/project/project-mutation.js +98 -9
  96. package/dist-server/service/project/project-mutation.js.map +1 -1
  97. package/dist-server/service/project/project-query.d.ts +13 -2
  98. package/dist-server/service/project/project-query.js +138 -13
  99. package/dist-server/service/project/project-query.js.map +1 -1
  100. package/dist-server/service/project/project-type.d.ts +8 -1
  101. package/dist-server/service/project/project-type.js +27 -1
  102. package/dist-server/service/project/project-type.js.map +1 -1
  103. package/dist-server/service/project/project.d.ts +22 -0
  104. package/dist-server/service/project/project.js +80 -2
  105. package/dist-server/service/project/project.js.map +1 -1
  106. package/dist-server/service/resource/resource-mutation.js +5 -6
  107. package/dist-server/service/resource/resource-mutation.js.map +1 -1
  108. package/dist-server/service/resource/resource-query.d.ts +2 -2
  109. package/dist-server/service/resource/resource-query.js +5 -10
  110. package/dist-server/service/resource/resource-query.js.map +1 -1
  111. package/dist-server/service/task/task-query.d.ts +2 -0
  112. package/dist-server/service/task/task-query.js +11 -0
  113. package/dist-server/service/task/task-query.js.map +1 -1
  114. package/dist-server/service/task/task.d.ts +2 -0
  115. package/dist-server/service/task/task.js +6 -0
  116. package/dist-server/service/task/task.js.map +1 -1
  117. package/dist-server/service/task-checklist-binding/index.d.ts +5 -0
  118. package/dist-server/service/task-checklist-binding/index.js +9 -0
  119. package/dist-server/service/task-checklist-binding/index.js.map +1 -0
  120. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.d.ts +5 -0
  121. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js +186 -0
  122. package/dist-server/service/task-checklist-binding/task-checklist-binding-mutation.js.map +1 -0
  123. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.d.ts +8 -0
  124. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js +61 -0
  125. package/dist-server/service/task-checklist-binding/task-checklist-binding-query.js.map +1 -0
  126. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.d.ts +15 -0
  127. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js +57 -0
  128. package/dist-server/service/task-checklist-binding/task-checklist-binding-type.js.map +1 -0
  129. package/dist-server/service/task-checklist-binding/task-checklist-binding.d.ts +22 -0
  130. package/dist-server/service/task-checklist-binding/task-checklist-binding.js +106 -0
  131. package/dist-server/service/task-checklist-binding/task-checklist-binding.js.map +1 -0
  132. package/dist-server/service/task-resource/task-resource-query.d.ts +2 -2
  133. package/dist-server/service/task-resource/task-resource-query.js +4 -9
  134. package/dist-server/service/task-resource/task-resource-query.js.map +1 -1
  135. package/dist-server/service/worker-type/worker-type-query.d.ts +2 -2
  136. package/dist-server/service/worker-type/worker-type-query.js +5 -10
  137. package/dist-server/service/worker-type/worker-type-query.js.map +1 -1
  138. package/dist-server/tsconfig.tsbuildinfo +1 -1
  139. package/package.json +15 -13
  140. package/things-factory.config.js +3 -3
  141. package/translations/en.json +10 -9
  142. package/translations/ja.json +15 -1
  143. package/translations/ko.json +3 -0
  144. package/translations/ms.json +15 -1
  145. package/translations/zh.json +15 -1
  146. package/dist-client/pages/project/popup/popup-schedule-upload.js.map +0 -1
  147. package/dist-client/pages/project/project-schedule-list.js.map +0 -1
  148. package/dist-client/pages/project/project-schedule.js +0 -407
  149. 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, ProjectType } from './project-list';
13
+ import { BUILDING_INSPECTION_STATUS, BUILDING_INSPECTION_RE_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) {
@@ -36,8 +36,11 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
36
36
  wait: 0,
37
37
  request: 0,
38
38
  pass: 0,
39
- fail: 0
39
+ fail: 0,
40
+ reWait: 0
40
41
  };
42
+ this.statusFilter = '';
43
+ this.configProjectType = '';
41
44
  this.weather = {
42
45
  rain: 0,
43
46
  temperature: 0,
@@ -47,43 +50,77 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
47
50
  };
48
51
  }
49
52
  get context() {
53
+ var _a;
50
54
  return {
51
- title: '진행 중 프로젝트 상세 정보'
55
+ title: ((_a = this.project) === null || _a === void 0 ? void 0 : _a.name) ? `진행 중 프로젝트 상세 정보 - ${this.project.name}` : '진행 중 프로젝트 상세 정보'
52
56
  };
53
57
  }
54
58
  render() {
55
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
59
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
56
60
  let totalInspectionCount = this.inspectionSummary.pass + this.inspectionSummary.fail + this.inspectionSummary.request + this.inspectionSummary.wait;
57
61
  return html `
58
62
  <div header>
59
- <h2>${this.project.name}</h2>
63
+ <h2>
64
+ <md-icon slot="icon" back @click=${() => history.back()}>arrow_back</md-icon>
65
+ ${this.project.name}
66
+ </h2>
60
67
  <div button-container>
61
- <md-elevated-button href=${`project-update/${this.project.id}`}>
62
- <md-icon slot="icon">assignment</md-icon>프로젝트 정보 수정
63
- </md-elevated-button>
64
- <md-elevated-button href=${`project-plan-management/${this.project.id}`}>
65
- <md-icon slot="icon">description</md-icon>도면 관리
66
- </md-elevated-button>
67
- <md-elevated-button href=${`project-schedule/${this.project.id}`}>
68
- <md-icon slot="icon">event_note</md-icon>공정표 관리
69
- </md-elevated-button>
68
+ ${this.configProjectType === ProjectType.DCSP
69
+ ? html `
70
+ <md-elevated-button href="employee-list"> <md-icon slot="icon">badge</md-icon>인력 관리 </md-elevated-button>
71
+ <md-elevated-button href=${`project-plan-management/${this.project.id}`}>
72
+ <md-icon slot="icon">description</md-icon>도면 관리
73
+ </md-elevated-button>
74
+ <md-elevated-button href=${`project-task/${this.project.id}`}>
75
+ <md-icon slot="icon">event_note</md-icon>공정표 관리
76
+ </md-elevated-button>
77
+ <md-elevated-button href=${`project-checklist-management/${this.project.id}`}>
78
+ <md-icon slot="icon">checklist</md-icon>체크리스트 관리
79
+ </md-elevated-button>
80
+ <md-elevated-button href=${`building-inspection-management/${this.project.id}`}>
81
+ <md-icon slot="icon">open_in_new</md-icon>업무 바로가기
82
+ </md-elevated-button>
83
+ `
84
+ : html `
85
+ <md-elevated-button
86
+ target="_blank"
87
+ href=${((_a = this.project.buildingComplex) === null || _a === void 0 ? void 0 : _a.virtualTourLink) || ''}
88
+ ?disabled=${!((_b = this.project.buildingComplex) === null || _b === void 0 ? void 0 : _b.virtualTourLink)}
89
+ >
90
+ <md-icon slot="icon">smart_toy</md-icon>Virtual Tour
91
+ </md-elevated-button>
92
+ <md-elevated-button href=${`project-update/${this.project.id}`}>
93
+ <md-icon slot="icon">assignment</md-icon>프로젝트 정보 수정
94
+ </md-elevated-button>
95
+ <md-elevated-button href=${`project-plan-management/${this.project.id}`}>
96
+ <md-icon slot="icon">description</md-icon>도면 관리
97
+ </md-elevated-button>
98
+ <md-elevated-button href=${`project-task/${this.project.id}`}>
99
+ <md-icon slot="icon">event_note</md-icon>공정표 관리
100
+ </md-elevated-button>
101
+ `}
70
102
  </div>
71
103
  </div>
72
104
 
73
105
  <div body>
74
106
  <div>
75
107
  <div left-top>
76
- <h3>기본 정보</h3>
108
+ <h3>
109
+ 기본 정보
110
+ <md-elevated-button href=${`project-update/${this.project.id}`}>
111
+ <md-icon slot="icon">assignment</md-icon>프로젝트 정보 수정
112
+ </md-elevated-button>
113
+ </h3>
77
114
  <div content-1>
78
115
  <img
79
- ?no-image=${!((_a = this.project.mainPhoto) === null || _a === void 0 ? void 0 : _a.fullpath)}
80
- src=${((_b = this.project.mainPhoto) === null || _b === void 0 ? void 0 : _b.fullpath) || '/assets/images/no-image.png'}
116
+ ?no-image=${!((_c = this.project.mainPhoto) === null || _c === void 0 ? void 0 : _c.fullpath)}
117
+ src=${((_d = this.project.mainPhoto) === null || _d === void 0 ? void 0 : _d.fullpath) || '/assets/images/no-image.png'}
81
118
  />
82
119
 
83
120
  <div>
84
121
  <div row>
85
122
  <span>- 면적 : </span>
86
- <span>${(_d = (_c = this.project.buildingComplex) === null || _c === void 0 ? void 0 : _c.area) === null || _d === void 0 ? void 0 : _d.toLocaleString()} ㎡</span>
123
+ <span>${(_f = (_e = this.project.buildingComplex) === null || _e === void 0 ? void 0 : _e.area) === null || _f === void 0 ? void 0 : _f.toLocaleString()} ㎡</span>
87
124
  </div>
88
125
  <div row>
89
126
  <span>- 착공~준공 : </span>
@@ -91,19 +128,19 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
91
128
  </div>
92
129
  <div row>
93
130
  <span>- 발주처 : </span>
94
- <span>${(_e = this.project.buildingComplex) === null || _e === void 0 ? void 0 : _e.clientCompany}</span>
131
+ <span>${(_g = this.project.buildingComplex) === null || _g === void 0 ? void 0 : _g.clientCompany}</span>
95
132
  </div>
96
133
  <div row>
97
134
  <span>- 건설사 : </span>
98
- <span>${(_f = this.project.buildingComplex) === null || _f === void 0 ? void 0 : _f.constructionCompany}</span>
135
+ <span>${(_h = this.project.buildingComplex) === null || _h === void 0 ? void 0 : _h.constructionCompany}</span>
99
136
  </div>
100
137
  <div row>
101
138
  <span>- 감리사 : </span>
102
- <span>${(_g = this.project.buildingComplex) === null || _g === void 0 ? void 0 : _g.supervisoryCompany}</span>
139
+ <span>${(_j = this.project.buildingComplex) === null || _j === void 0 ? void 0 : _j.supervisoryCompany}</span>
103
140
  </div>
104
141
  <div row>
105
142
  <span>- 설계사 : </span>
106
- <span>${(_h = this.project.buildingComplex) === null || _h === void 0 ? void 0 : _h.designCompany}</span>
143
+ <span>${(_k = this.project.buildingComplex) === null || _k === void 0 ? void 0 : _k.designCompany}</span>
107
144
  </div>
108
145
  </div>
109
146
  </div>
@@ -111,38 +148,37 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
111
148
  <div content-2>
112
149
  <div row>
113
150
  <span>- 건설구분 : </span>
114
- <span>${(_j = this.project.buildingComplex) === null || _j === void 0 ? void 0 : _j.constructionType}</span>
151
+ <span>${(_l = this.project.buildingComplex) === null || _l === void 0 ? void 0 : _l.constructionType}</span>
115
152
  </div>
116
153
  <div row>
117
154
  <span>- 공사금액 : </span>
118
- <span>${(_l = (_k = this.project.buildingComplex) === null || _k === void 0 ? void 0 : _k.constructionCost) === null || _l === void 0 ? void 0 : _l.toLocaleString()} 원</span>
155
+ <span>${(_o = (_m = this.project.buildingComplex) === null || _m === void 0 ? void 0 : _m.constructionCost) === null || _o === void 0 ? void 0 : _o.toLocaleString()} 억원</span>
119
156
  </div>
120
157
  <div row>
121
158
  <span>- 세대수 : </span>
122
- <span>${(_o = (_m = this.project.buildingComplex) === null || _m === void 0 ? void 0 : _m.householdCount) === null || _o === void 0 ? void 0 : _o.toLocaleString()}</span>
159
+ <span>${(_q = (_p = this.project.buildingComplex) === null || _p === void 0 ? void 0 : _p.householdCount) === null || _q === void 0 ? void 0 : _q.toLocaleString()}</span>
123
160
  </div>
124
161
  <div row>
125
162
  <span>- 기타 : </span>
126
- <span>${(_p = this.project.buildingComplex) === null || _p === void 0 ? void 0 : _p.etc}</span>
163
+ <span>${(_r = this.project.buildingComplex) === null || _r === void 0 ? void 0 : _r.etc}</span>
127
164
  </div>
128
165
  </div>
129
166
  </div>
130
167
 
131
168
  <div left-bottom>
132
- <h3>조감도(BIM도면)</h3>
133
- ${((_r = (_q = this.project.buildingComplex) === null || _q === void 0 ? void 0 : _q.drawing) === null || _r === void 0 ? void 0 : _r.fullpath)
169
+ <h3>
170
+ 조감도(BIM도면)
171
+ <md-elevated-button
172
+ target="_blank"
173
+ href=${((_s = this.project.buildingComplex) === null || _s === void 0 ? void 0 : _s.virtualTourLink) || ''}
174
+ ?disabled=${!((_t = this.project.buildingComplex) === null || _t === void 0 ? void 0 : _t.virtualTourLink)}
175
+ >
176
+ <md-icon slot="icon">smart_toy</md-icon>Virtual Tour
177
+ </md-elevated-button>
178
+ </h3>
179
+ ${((_v = (_u = this.project.buildingComplex) === null || _u === void 0 ? void 0 : _u.drawing) === null || _v === void 0 ? void 0 : _v.fullpath)
134
180
  ? html `<div building-complex-img></div>`
135
181
  : html `<img building-complex-img src="/assets/images/img-building-complex-default.jpg" />`}
136
- <div>
137
- <div subject bold>개별 단지 상세정보 바로가기</div>
138
- <div building-container>
139
- ${(_t = (_s = this.project.buildingComplex) === null || _s === void 0 ? void 0 : _s.buildings) === null || _t === void 0 ? void 0 : _t.map(building => {
140
- return html `<md-outlined-button href=${`building-complex-detail/${this.project.id}?buildingId=${building.id}`}>
141
- ${building.name}
142
- </md-outlined-button>`;
143
- })}
144
- </div>
145
- </div>
146
182
  </div>
147
183
  </div>
148
184
 
@@ -177,14 +213,14 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
177
213
  <div kpi-info-item>
178
214
  <span kpi-info-label>검측 통과율</span>
179
215
  <span kpi-info-value>
180
- <span bold>${((_u = this.inspectionSummary.pass) === null || _u === void 0 ? void 0 : _u.toLocaleString()) || 0}</span>
216
+ <span bold>${((_w = this.inspectionSummary.pass) === null || _w === void 0 ? void 0 : _w.toLocaleString()) || 0}</span>
181
217
  <span small> / ${(totalInspectionCount === null || totalInspectionCount === void 0 ? void 0 : totalInspectionCount.toLocaleString()) || 0}</span>
182
218
  </span>
183
219
  </div>
184
220
  <div kpi-info-item>
185
221
  <span kpi-info-label>작업 중 로봇</span>
186
222
  <span kpi-info-value>
187
- <span bold>${((_v = this.project.robotCount) === null || _v === void 0 ? void 0 : _v.toLocaleString()) || 0}</span>
223
+ <span bold>${((_x = this.project.robotCount) === null || _x === void 0 ? void 0 : _x.toLocaleString()) || 0}</span>
188
224
  <span small> 대</span>
189
225
  </span>
190
226
  </div>
@@ -279,36 +315,41 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
279
315
  </span>
280
316
  </div>
281
317
  </div>
318
+ <div notice>
319
+ <div name bold>공지사항</div>
320
+ <div content>${this.project.buildingComplex.notice}</div>
321
+ </div>
322
+
282
323
  <div inspection>
283
324
  <span name bold>
284
325
  <md-icon slot="icon">list_alt_add</md-icon>
285
- 시공검측<br />현황
326
+ 작업 현황
286
327
  </span>
287
- <span>
288
- <div>검측요청</div>
289
- <div bold>${this.inspectionSummary.wait}</div>
328
+ <span ?active=${this.statusFilter === 'WAIT'} @click=${() => this._onClickStatusFilter('WAIT')}>
329
+ <div>작업 완료</div>
330
+ <div bold wait>${(this.inspectionSummary.wait || 0) - (this.inspectionSummary.reWait || 0)}</div>
290
331
  </span>
291
- <span>
292
- <div>검측대기</div>
293
- <div bold>${this.inspectionSummary.request}</div>
332
+ <span ?active=${this.statusFilter === 'REQUEST'} @click=${() => this._onClickStatusFilter('REQUEST')}>
333
+ <div>감리 대기</div>
334
+ <div bold request>${this.inspectionSummary.request}</div>
294
335
  </span>
295
- <span>
296
- <div>합격</div>
297
- <div bold pass>${this.inspectionSummary.pass}</div>
298
- </span>
299
- <span>
300
- <div>불합격</div>
336
+ <span ?active=${this.statusFilter === 'FAIL'} @click=${() => this._onClickStatusFilter('FAIL')}>
337
+ <div>조치 필요</div>
301
338
  <div bold fail>${this.inspectionSummary.fail}</div>
302
339
  </span>
303
- </div>
304
- <div notice>
305
- <div name bold>공지사항</div>
306
- <div content>${this.project.buildingComplex.notice}</div>
340
+ <span ?active=${this.statusFilter === 'RE_WAIT'} @click=${() => this._onClickStatusFilter('RE_WAIT')}>
341
+ <div>재검측 대기</div>
342
+ <div bold re-wait>${this.inspectionSummary.reWait || 0}</div>
343
+ </span>
344
+ <span ?active=${this.statusFilter === 'PASS'} @click=${() => this._onClickStatusFilter('PASS')}>
345
+ <div>검측 완료</div>
346
+ <div bold pass>${this.inspectionSummary.pass}</div>
347
+ </span>
307
348
  </div>
308
349
  </div>
309
350
 
310
351
  <div right-bottom>
311
- <h3>검측 현황</h3>
352
+ <h3>검측 현황${this.statusFilter ? ` (${this._getStatusFilterLabel()} 목록)` : ''}</h3>
312
353
  <div table-container>
313
354
  <hr />
314
355
  <table>
@@ -319,7 +360,7 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
319
360
  <th width="10%">공종</th>
320
361
  <th width="22%">내용</th>
321
362
  <th width="15%">검측 요청일</th>
322
- <th width="10%">검측 결과</th>
363
+ <th width="10%">작업 상태</th>
323
364
  </tr>
324
365
  </thead>
325
366
  <tbody>
@@ -332,7 +373,8 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
332
373
  <td>${((_f = (_e = inspection.checklist) === null || _e === void 0 ? void 0 : _e.inspectionParts) === null || _f === void 0 ? void 0 : _f.join(', ')) || ''}</td>
333
374
  <td>${this._formatDate(inspection.requestDate)}</td>
334
375
  <td bold status=${inspection.status || ''}>
335
- ${inspection.status && BUILDING_INSPECTION_STATUS[inspection.status]}
376
+ ${inspection.status &&
377
+ ((inspection.failCount || 0) > 0 ? BUILDING_INSPECTION_RE_STATUS : BUILDING_INSPECTION_STATUS)[inspection.status]}
336
378
  </td>
337
379
  </tr>`;
338
380
  })}
@@ -346,10 +388,39 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
346
388
  }
347
389
  async pageInitialized(lifecycle) { }
348
390
  async pageUpdated(changes, lifecycle) {
391
+ var _a, _b;
349
392
  if (this.active) {
350
393
  this.projectId = lifecycle.resourceId || '';
351
- await this.initProject(lifecycle.resourceId);
394
+ // resourceId 없이 진입한 경우 (프로젝트 테넌트 → / 접속)
395
+ if (!this.projectId) {
396
+ const res = await client.query({
397
+ query: gql `
398
+ query {
399
+ currentProject {
400
+ id
401
+ }
402
+ }
403
+ `
404
+ });
405
+ const projectId = (_b = (_a = res.data) === null || _a === void 0 ? void 0 : _a.currentProject) === null || _b === void 0 ? void 0 : _b.id;
406
+ if (projectId) {
407
+ navigate(`project-detail/${projectId}`);
408
+ return;
409
+ }
410
+ }
411
+ await Promise.all([this.initProject(lifecycle.resourceId), this._fetchProjectType()]);
412
+ }
413
+ }
414
+ async _fetchProjectType() {
415
+ var _a;
416
+ const response = await client.query({
417
+ query: gql `
418
+ query {
419
+ currentProjectType
352
420
  }
421
+ `
422
+ });
423
+ this.configProjectType = ((_a = response.data) === null || _a === void 0 ? void 0 : _a.currentProjectType) || '';
353
424
  }
354
425
  async initProject(projectId = '') {
355
426
  var _a, _b, _c, _d, _e;
@@ -393,6 +464,7 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
393
464
  notice
394
465
  householdCount
395
466
  buildingCount
467
+ virtualTourLink
396
468
  buildings {
397
469
  id
398
470
  name
@@ -406,12 +478,14 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
406
478
  request
407
479
  pass
408
480
  fail
481
+ reWait
409
482
  }
410
483
 
411
484
  buildingInspectionsOfProject(params: $params) {
412
485
  items {
413
486
  id
414
487
  status
488
+ failCount
415
489
  requestDate
416
490
  buildingLevel {
417
491
  id
@@ -436,10 +510,7 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
436
510
  variables: {
437
511
  id: projectId,
438
512
  projectId,
439
- params: {
440
- projectId,
441
- limit: 10
442
- }
513
+ params: Object.assign({ projectId, limit: 10 }, (this.statusFilter ? { statusFilter: this.statusFilter } : {}))
443
514
  }
444
515
  });
445
516
  if (response.errors)
@@ -447,11 +518,27 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
447
518
  this.project = ((_a = response.data) === null || _a === void 0 ? void 0 : _a.project) || {};
448
519
  this.inspectionSummary = ((_b = response.data) === null || _b === void 0 ? void 0 : _b.inspectionSummary) || {};
449
520
  this.buildingInspections = ((_d = (_c = response.data) === null || _c === void 0 ? void 0 : _c.buildingInspectionsOfProject) === null || _d === void 0 ? void 0 : _d.items) || [];
521
+ this.updateContext();
450
522
  const { latitude, longitude } = (_e = this.project) === null || _e === void 0 ? void 0 : _e.buildingComplex;
451
523
  if (latitude && longitude) {
452
524
  this.weather = await _getWeather(latitude, longitude);
453
525
  }
454
526
  }
527
+ async _onClickStatusFilter(filter) {
528
+ // 같은 필터 클릭 시 해제
529
+ this.statusFilter = this.statusFilter === filter ? '' : filter;
530
+ await this.initProject(this.projectId);
531
+ }
532
+ _getStatusFilterLabel() {
533
+ const labels = {
534
+ WAIT: '작업 완료',
535
+ REQUEST: '감리 대기',
536
+ FAIL: '조치 필요',
537
+ RE_WAIT: '재검측 대기',
538
+ PASS: '검측 완료'
539
+ };
540
+ return labels[this.statusFilter] || '';
541
+ }
455
542
  _onClickInspection(buildingInspection) {
456
543
  var _a, _b, _c;
457
544
  console.log('buildingInspection :', buildingInspection);
@@ -463,14 +550,20 @@ let ProjectDetail = class ProjectDetail extends ScopedElementsMixin(PageView) {
463
550
  }
464
551
  }
465
552
  _formatDate(date) {
466
- return date
467
- ? new Intl.DateTimeFormat('en-CA', {
553
+ if (!date)
554
+ return '';
555
+ try {
556
+ const parsed = typeof date === 'string' && /^\d+$/.test(date) ? new Date(Number(date)) : new Date(date);
557
+ return new Intl.DateTimeFormat('en-CA', {
468
558
  timeZone: 'Asia/Seoul',
469
559
  year: 'numeric',
470
560
  month: '2-digit',
471
561
  day: '2-digit'
472
- }).format(new Date(date))
473
- : '';
562
+ }).format(parsed);
563
+ }
564
+ catch (_a) {
565
+ return String(date).split('T')[0] || '';
566
+ }
474
567
  }
475
568
  };
476
569
  ProjectDetail.styles = [
@@ -505,9 +598,28 @@ ProjectDetail.styles = [
505
598
  margin: 0px var(--spacing-large, 12px);
506
599
 
507
600
  h2 {
601
+ display: flex;
602
+ gap: 7px;
508
603
  flex: 0.5;
509
604
  color: #3f71a0;
510
605
  font-size: 18px;
606
+
607
+ md-icon[back] {
608
+ background: linear-gradient(135deg, #3f71a0 0%, #5a8cc7 100%);
609
+ color: white;
610
+ padding: 8px;
611
+ border-radius: 50%;
612
+ cursor: pointer;
613
+ box-shadow: 0 2px 8px rgba(63, 113, 160, 0.3);
614
+ width: 14px;
615
+ height: 14px;
616
+ --md-icon-size: 20px;
617
+ }
618
+
619
+ md-icon[back]:hover {
620
+ background: linear-gradient(135deg, #2e5c89 0%, #4a7bb0 100%);
621
+ box-shadow: 0 4px 12px rgba(63, 113, 160, 0.4);
622
+ }
511
623
  }
512
624
 
513
625
  div[button-container] {
@@ -542,6 +654,9 @@ ProjectDetail.styles = [
542
654
  gap: var(--spacing-medium, 8px);
543
655
 
544
656
  h3 {
657
+ display: flex;
658
+ align-items: center;
659
+ justify-content: space-between;
545
660
  color: #2e79be;
546
661
  font-size: 16px;
547
662
  margin: 0px;
@@ -550,6 +665,20 @@ ProjectDetail.styles = [
550
665
  text-decoration: none;
551
666
  color: #2e79be;
552
667
  }
668
+
669
+ md-elevated-button {
670
+ --md-elevated-button-container-height: 28px;
671
+ --md-elevated-button-label-text-size: 13px;
672
+ --md-elevated-button-container-color: #0595e5;
673
+ --md-elevated-button-label-text-color: var(--md-sys-color-on-primary);
674
+ --md-elevated-button-hover-label-text-color: var(--md-sys-color-on-primary);
675
+ --md-elevated-button-pressed-label-text-color: var(--md-sys-color-on-primary);
676
+ --md-elevated-button-focus-label-text-color: var(--md-sys-color-on-primary);
677
+ --md-elevated-button-icon-color: var(--md-sys-color-on-primary);
678
+ --md-elevated-button-hover-icon-color: var(--md-sys-color-on-primary);
679
+ --md-elevated-button-pressed-icon-color: var(--md-sys-color-on-primary);
680
+ --md-elevated-button-focus-icon-color: var(--md-sys-color-on-primary);
681
+ }
553
682
  }
554
683
 
555
684
  & > div {
@@ -608,25 +737,6 @@ ProjectDetail.styles = [
608
737
  img {
609
738
  opacity: 0.5;
610
739
  }
611
-
612
- div[subject] {
613
- margin-bottom: var(--spacing-small, 4px);
614
- }
615
-
616
- div[building-container] {
617
- display: block;
618
-
619
- & > * {
620
- margin-right: var(--spacing-medium, 8px);
621
- margin-bottom: var(--spacing-medium, 8px);
622
- }
623
- md-outlined-button {
624
- --md-outlined-button-container-height: 30px;
625
- --md-outlined-button-trailing-space: var(--spacing-medium, 8px);
626
- --md-outlined-button-leading-space: var(--spacing-medium, 8px);
627
- --md-sys-color-outline: rgba(51, 51, 51, 0.2);
628
- }
629
- }
630
740
  }
631
741
 
632
742
  div[right-top] {
@@ -690,7 +800,7 @@ ProjectDetail.styles = [
690
800
  }
691
801
  div[inspection] {
692
802
  display: grid;
693
- grid-template-columns: 1.4fr 0.9fr 0.9fr 0.9fr 0.9fr;
803
+ grid-template-columns: 1.4fr 0.9fr 0.9fr 0.9fr 0.9fr 0.9fr;
694
804
  margin-top: 10px;
695
805
  background: #f6f6f6;
696
806
  border-radius: 7px;
@@ -701,6 +811,18 @@ ProjectDetail.styles = [
701
811
  flex-direction: column;
702
812
  align-items: center;
703
813
  justify-content: center;
814
+ border-radius: 5px;
815
+ padding: 4px 0;
816
+
817
+ &:not([name]) {
818
+ cursor: pointer;
819
+ }
820
+ &:not([name]):hover {
821
+ background: #e8e8e8;
822
+ }
823
+ &[active] {
824
+ background: #dceefb;
825
+ }
704
826
 
705
827
  div[wait] {
706
828
  color: #4e5055;
@@ -714,6 +836,9 @@ ProjectDetail.styles = [
714
836
  div[fail] {
715
837
  color: #ff4444;
716
838
  }
839
+ div[re-wait] {
840
+ color: #e89c0e;
841
+ }
717
842
  }
718
843
  & > span[name] {
719
844
  flex-direction: row;
@@ -918,6 +1043,14 @@ __decorate([
918
1043
  state(),
919
1044
  __metadata("design:type", Object)
920
1045
  ], ProjectDetail.prototype, "inspectionSummary", void 0);
1046
+ __decorate([
1047
+ state(),
1048
+ __metadata("design:type", String)
1049
+ ], ProjectDetail.prototype, "statusFilter", void 0);
1050
+ __decorate([
1051
+ state(),
1052
+ __metadata("design:type", String)
1053
+ ], ProjectDetail.prototype, "configProjectType", void 0);
921
1054
  __decorate([
922
1055
  state(),
923
1056
  __metadata("design:type", Object)