@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.
Files changed (27) hide show
  1. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +1 -1
  2. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +6 -6
  3. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +1 -1
  4. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.d.ts +3 -0
  5. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js +17 -22
  6. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js.map +1 -1
  7. package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.d.ts +8 -1
  8. package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js +39 -30
  9. package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js.map +1 -1
  10. package/dist-client/pages/sv-project-completed-list.js +2 -2
  11. package/dist-client/pages/sv-project-completed-list.js.map +1 -1
  12. package/dist-client/pages/sv-project-detail.js +61 -71
  13. package/dist-client/pages/sv-project-detail.js.map +1 -1
  14. package/dist-client/pages/sv-project-list.d.ts +2 -2
  15. package/dist-client/pages/sv-project-list.js +1 -1
  16. package/dist-client/pages/sv-project-list.js.map +1 -1
  17. package/dist-client/pages/sv-project-update.js +16 -27
  18. package/dist-client/pages/sv-project-update.js.map +1 -1
  19. package/dist-client/shared/integration-fetch.js +1 -1
  20. package/dist-client/shared/integration-fetch.js.map +1 -1
  21. package/dist-client/shared/kpi-project-sync.d.ts +3 -2
  22. package/dist-client/shared/kpi-project-sync.js +22 -20
  23. package/dist-client/shared/kpi-project-sync.js.map +1 -1
  24. package/dist-client/tsconfig.tsbuildinfo +1 -1
  25. package/dist-server/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +2 -2
  27. 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">• 공사기간</div>
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">• 공사비</div>
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
- <div
152
- class="list-text"
153
- style="cursor: pointer;"
154
- @click=${async () => {
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
- # ${m.name}
165
- </div>
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
- <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
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
- <div class="popup-score">
267
- <span class="score-value">${Number(this.selectedKpi.score).toFixed(1)}</span>
268
- </div>
269
- `
266
+ <div class="popup-score">
267
+ <span class="score-value">${Number(this.selectedKpi.score).toFixed(1)}</span>
268
+ </div>
269
+ `
270
270
  : ''}
271
- <button class="popup-close" @click=${this._closePopup}>×</button>
272
- </div>
273
- <div class="popup-chart-container">
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
- <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
- `}
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
- </div>
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
- style="
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
- <span
745
- style="
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
- >${item.score}</span
753
- >
754
- <span
755
- style="font-size: 0.9rem; color: ${item.active ? '#333' : '#666'}; font-weight: ${item.active
756
- ? '600'
757
- : '400'};"
758
- >
759
- ${item.desc}
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
- <div style="flex: 1; display: flex; flex-direction: column; min-height: 0;">
766
- <div style="font-size: 0.9rem; font-weight: 700; color: #333; margin-bottom: 8px;">
767
- 공정률 × 공기편차 성과 분포
768
- </div>
769
- <div style="flex: 1; min-height: 0;">
770
- <kpi-2d-lookup-chart
771
- .grades=${kpi.grades}
772
- .value=${this._getScheduleDeviation()}
773
- .progressRate=${this._getProgressRate()}
774
- ></kpi-2d-lookup-chart>
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
- </div>
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) {