@dssp/dkpi 1.0.0-alpha.98 → 1.0.0-alpha.99
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.
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +1 -1
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +6 -6
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +1 -1
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.d.ts +3 -0
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js +17 -22
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js.map +1 -1
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.d.ts +8 -1
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js +39 -30
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js.map +1 -1
- package/dist-client/pages/sv-project-completed-list.js +2 -2
- package/dist-client/pages/sv-project-completed-list.js.map +1 -1
- package/dist-client/pages/sv-project-detail.js +61 -71
- package/dist-client/pages/sv-project-detail.js.map +1 -1
- package/dist-client/pages/sv-project-list.d.ts +2 -2
- package/dist-client/pages/sv-project-list.js +1 -1
- package/dist-client/pages/sv-project-list.js.map +1 -1
- package/dist-client/pages/sv-project-update.js +16 -27
- package/dist-client/pages/sv-project-update.js.map +1 -1
- package/dist-client/shared/integration-fetch.js +1 -1
- package/dist-client/shared/integration-fetch.js.map +1 -1
- package/dist-client/shared/kpi-project-sync.d.ts +3 -2
- package/dist-client/shared/kpi-project-sync.js +22 -20
- package/dist-client/shared/kpi-project-sync.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/schema.graphql +9 -0
|
@@ -69,7 +69,7 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
69
69
|
<div class="value">${(_b = this.project.buildingComplex) === null || _b === void 0 ? void 0 : _b.address}</div>
|
|
70
70
|
</div>
|
|
71
71
|
<div class="row">
|
|
72
|
-
<div class="label">•
|
|
72
|
+
<div class="label">• 계획공사기간</div>
|
|
73
73
|
<div class="value">${this.project.startDate} ~ ${this.project.endDate}</div>
|
|
74
74
|
</div>
|
|
75
75
|
<div class="row">
|
|
@@ -101,7 +101,7 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
101
101
|
|
|
102
102
|
<div class="detail-grid">
|
|
103
103
|
<div class="grid-item row">
|
|
104
|
-
<div class="label">•
|
|
104
|
+
<div class="label">• 계획공사비</div>
|
|
105
105
|
<div class="value">${((_d = (_c = this.project.buildingComplex) === null || _c === void 0 ? void 0 : _c.constructionCost) === null || _d === void 0 ? void 0 : _d.toLocaleString()) || '-'} 억원</div>
|
|
106
106
|
</div>
|
|
107
107
|
<div class="grid-item row">
|
|
@@ -148,10 +148,10 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
148
148
|
${this.pendingMetrics.length === 0
|
|
149
149
|
? html `<div class="list-text">모든 항목이 입력되었습니다.</div>`
|
|
150
150
|
: this.pendingMetrics.map(m => html `
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
151
|
+
<div
|
|
152
|
+
class="list-text"
|
|
153
|
+
style="cursor: pointer;"
|
|
154
|
+
@click=${async () => {
|
|
155
155
|
if (isProjectTypeDomain()) {
|
|
156
156
|
navigate('project-complete');
|
|
157
157
|
return;
|
|
@@ -160,10 +160,10 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
160
160
|
if (id)
|
|
161
161
|
navigate(`project-complete/${id}`);
|
|
162
162
|
}}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
163
|
+
>
|
|
164
|
+
# ${m.name}
|
|
165
|
+
</div>
|
|
166
|
+
`)}
|
|
167
167
|
</div>
|
|
168
168
|
</div>
|
|
169
169
|
</div>
|
|
@@ -257,21 +257,21 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
257
257
|
|
|
258
258
|
${this.showScoreDistribution && this.selectedKpi
|
|
259
259
|
? html `
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
260
|
+
<div class="popup-overlay" @click=${this._closePopup}>
|
|
261
|
+
<div class="popup-content" @click=${(e) => e.stopPropagation()}>
|
|
262
|
+
<div class="popup-header">
|
|
263
|
+
<div class="popup-title">${this.selectedKpi.kpiName} — 성과 분포</div>
|
|
264
|
+
${this.selectedKpi.score !== undefined && this.selectedKpi.score !== null
|
|
265
265
|
? html `
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
266
|
+
<div class="popup-score">
|
|
267
|
+
<span class="score-value">${Number(this.selectedKpi.score).toFixed(1)}</span>
|
|
268
|
+
</div>
|
|
269
|
+
`
|
|
270
270
|
: ''}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
271
|
+
<button class="popup-close" @click=${this._closePopup}>×</button>
|
|
272
|
+
</div>
|
|
273
|
+
<div class="popup-chart-container">
|
|
274
|
+
${
|
|
275
275
|
/*
|
|
276
276
|
* scoreType 기반 차트 분기:
|
|
277
277
|
*
|
|
@@ -282,7 +282,7 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
282
282
|
* LOOKUP: 성과 분포 커브 (kpi-lookup-chart)
|
|
283
283
|
* ASSESSMENT: 5단계 게이지 (kpi-lookup-chart 자동 감지)
|
|
284
284
|
*/ ''}
|
|
285
|
-
|
|
285
|
+
${
|
|
286
286
|
// SL-PA 결과(X34 품질, X43 안전) 만 계단형 등급 분포 차트로 표시.
|
|
287
287
|
// (다른 KPI 차트 경로에는 영향 없음)
|
|
288
288
|
this.selectedKpi.pattern === 'X34' || this.selectedKpi.pattern === 'X43'
|
|
@@ -302,19 +302,19 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
302
302
|
: this._isAssessmentOrIntegerScore()
|
|
303
303
|
? this._renderAssessmentGrades()
|
|
304
304
|
: html `
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
305
|
+
<kpi-lookup-chart
|
|
306
|
+
.grades=${this.selectedKpi.grades || []}
|
|
307
|
+
.value=${this.selectedKpi.value}
|
|
308
|
+
.score=${(_o = this.selectedKpi.score) !== null && _o !== void 0 ? _o : null}
|
|
309
|
+
.scoreType=${this.selectedKpi.scoreType || ''}
|
|
310
|
+
.valueType=${this.selectedKpi.valueType || ''}
|
|
311
|
+
unit=${this.selectedKpi.unit || ''}
|
|
312
|
+
></kpi-lookup-chart>
|
|
313
|
+
`}
|
|
314
|
+
</div>
|
|
314
315
|
</div>
|
|
315
316
|
</div>
|
|
316
|
-
|
|
317
|
-
`
|
|
317
|
+
`
|
|
318
318
|
: ''}
|
|
319
319
|
`;
|
|
320
320
|
}
|
|
@@ -732,7 +732,7 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
732
732
|
<div style="padding: 20px; display: flex; flex-direction: column; height: 100%;">
|
|
733
733
|
${hasDescriptions
|
|
734
734
|
? items.map(item => html ` <div
|
|
735
|
-
|
|
735
|
+
style="
|
|
736
736
|
display: flex; align-items: center; gap: 10px;
|
|
737
737
|
padding: 10px 14px; margin-bottom: 6px;
|
|
738
738
|
border-radius: 8px;
|
|
@@ -740,41 +740,39 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
740
740
|
border: 2px solid ${item.active ? item.color : 'transparent'};
|
|
741
741
|
transition: all 0.2s;
|
|
742
742
|
"
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
743
|
+
>
|
|
744
|
+
<span
|
|
745
|
+
style="
|
|
746
746
|
width: 32px; height: 32px; border-radius: 50%;
|
|
747
747
|
background: ${item.active ? item.color : '#e0e0e0'};
|
|
748
748
|
color: ${item.active ? '#fff' : '#999'};
|
|
749
749
|
display: flex; align-items: center; justify-content: center;
|
|
750
750
|
font-weight: 700; font-size: 14px; flex-shrink: 0;
|
|
751
751
|
"
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
</span>
|
|
761
|
-
</div>`)
|
|
752
|
+
>${item.score}</span
|
|
753
|
+
>
|
|
754
|
+
<span
|
|
755
|
+
style="font-size: 0.9rem; color: ${item.active ? '#333' : '#666'}; font-weight: ${item.active ? '600' : '400'};"
|
|
756
|
+
>
|
|
757
|
+
${item.desc}
|
|
758
|
+
</span>
|
|
759
|
+
</div>`)
|
|
762
760
|
: ''}
|
|
763
761
|
${is2D && ((_a = kpi === null || kpi === void 0 ? void 0 : kpi.grades) === null || _a === void 0 ? void 0 : _a.rows)
|
|
764
762
|
? html `
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
763
|
+
<div style="flex: 1; display: flex; flex-direction: column; min-height: 0;">
|
|
764
|
+
<div style="font-size: 0.9rem; font-weight: 700; color: #333; margin-bottom: 8px;">
|
|
765
|
+
공정률 × 공기편차 성과 분포
|
|
766
|
+
</div>
|
|
767
|
+
<div style="flex: 1; min-height: 0;">
|
|
768
|
+
<kpi-2d-lookup-chart
|
|
769
|
+
.grades=${kpi.grades}
|
|
770
|
+
.value=${this._getScheduleDeviation()}
|
|
771
|
+
.progressRate=${this._getProgressRate()}
|
|
772
|
+
></kpi-2d-lookup-chart>
|
|
773
|
+
</div>
|
|
775
774
|
</div>
|
|
776
|
-
|
|
777
|
-
`
|
|
775
|
+
`
|
|
778
776
|
: ''}
|
|
779
777
|
</div>
|
|
780
778
|
`;
|
|
@@ -910,13 +908,7 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
910
908
|
var _a, _b;
|
|
911
909
|
const candidates = this.allKpiMetricValues
|
|
912
910
|
// 월별(MONTH) 행만 — 옛 일별(DAY) 잔재가 valueDate 로 더 최신이라 잘못 집히던 것 방지.
|
|
913
|
-
.filter(v => {
|
|
914
|
-
var _a;
|
|
915
|
-
return (((_a = v.metric) === null || _a === void 0 ? void 0 : _a.name) || '').includes('실적공정') &&
|
|
916
|
-
v.periodType === 'MONTH' &&
|
|
917
|
-
v.value !== null &&
|
|
918
|
-
v.value !== undefined;
|
|
919
|
-
})
|
|
911
|
+
.filter(v => { var _a; return (((_a = v.metric) === null || _a === void 0 ? void 0 : _a.name) || '').includes('실적공정') && v.periodType === 'MONTH' && v.value !== null && v.value !== undefined; })
|
|
920
912
|
.sort((a, b) => (b.valueDate || '').localeCompare(a.valueDate || ''));
|
|
921
913
|
if (candidates.length > 0)
|
|
922
914
|
return candidates[0].value;
|
|
@@ -975,9 +967,7 @@ let SvProjectDetailPage = class SvProjectDetailPage extends ScopedElementsMixin(
|
|
|
975
967
|
});
|
|
976
968
|
return {
|
|
977
969
|
data,
|
|
978
|
-
categories: categories.length > 0
|
|
979
|
-
? categories
|
|
980
|
-
: ['일정', '비용', '품질', '안전', '환경', '생산성']
|
|
970
|
+
categories: categories.length > 0 ? categories : ['일정', '비용', '품질', '안전', '환경', '생산성']
|
|
981
971
|
};
|
|
982
972
|
}
|
|
983
973
|
getBoxPlotDataForProject(project) {
|