@things-factory/kpi 9.0.31 → 9.0.33
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/README.md +1 -2
- package/client/charts/kpi-boxplot-chart.ts +182 -42
- package/client/charts/kpi-radar-chart.ts +9 -9
- package/client/pages/kpi/kpi-list-page.ts +196 -32
- package/client/pages/kpi/kpi-overview.ts +9 -11
- package/client/pages/kpi/kpi-tree-page.ts +409 -0
- package/client/pages/kpi/kpi-view.ts +187 -0
- package/client/pages/kpi-dashboard/cards/kpi-level1-card.ts +1 -1
- package/client/pages/kpi-dashboard/cards/kpi-level2-comparison.ts +1 -1
- package/client/pages/kpi-dashboard/cards/kpi-level3-comparison.ts +1 -1
- package/client/pages/kpi-dashboard/components/kpi-left-panel.ts +198 -160
- package/client/pages/kpi-dashboard/components/kpi-map-panel.ts +133 -0
- package/client/pages/kpi-dashboard/components/kpi-region-popup.ts +3 -2
- package/client/pages/kpi-dashboard/kpi-dashboard-map.ts +291 -48
- package/client/pages/kpi-dashboard/kpi-dashboard.ts +28 -30
- package/client/pages/kpi-history/kpi-history-list-page.ts +11 -11
- package/client/pages/kpi-metric/kpi-metric-list-page.ts +10 -2
- package/client/pages/kpi-metric-value/kpi-metric-value-editor-page.ts +7 -7
- package/client/pages/kpi-metric-value/kpi-metric-value-importer.ts +2 -2
- package/client/pages/kpi-metric-value/kpi-metric-value-list-page.ts +16 -8
- package/client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.ts +5 -5
- package/client/pages/kpi-statistic/kpi-statistic-editor-page.ts +1 -2
- package/client/pages/kpi-statistic/kpi-statistic-list-page.ts +10 -2
- package/client/pages/kpi-value/kpi-value-editor-page.ts +11 -7
- package/client/pages/kpi-value/kpi-value-list-page.ts +31 -7
- package/client/route.ts +2 -9
- package/design-entities.md +8 -12
- package/dist-client/charts/kpi-boxplot-chart.d.ts +2 -0
- package/dist-client/charts/kpi-boxplot-chart.js +168 -42
- package/dist-client/charts/kpi-boxplot-chart.js.map +1 -1
- package/dist-client/charts/kpi-radar-chart.js +9 -9
- package/dist-client/charts/kpi-radar-chart.js.map +1 -1
- package/dist-client/pages/kpi/kpi-list-page.d.ts +19 -3
- package/dist-client/pages/kpi/kpi-list-page.js +188 -32
- package/dist-client/pages/kpi/kpi-list-page.js.map +1 -1
- package/dist-client/pages/kpi/kpi-overview.js +9 -11
- package/dist-client/pages/kpi/kpi-overview.js.map +1 -1
- package/dist-client/pages/kpi/kpi-tree-page.d.ts +59 -0
- package/dist-client/pages/kpi/kpi-tree-page.js +403 -0
- package/dist-client/pages/kpi/kpi-tree-page.js.map +1 -0
- package/dist-client/pages/kpi/kpi-view.d.ts +12 -0
- package/dist-client/pages/kpi/kpi-view.js +191 -0
- package/dist-client/pages/kpi/kpi-view.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +1 -1
- package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +1 -1
- package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +1 -1
- package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +1 -1
- package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +1 -1
- package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +1 -1
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +3 -1
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +197 -161
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +1 -1
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.d.ts +5 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js +146 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js.map +1 -1
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +3 -2
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +1 -1
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +3 -1
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +268 -46
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +1 -1
- package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +28 -30
- package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -1
- package/dist-client/pages/kpi-history/kpi-history-list-page.d.ts +6 -1
- package/dist-client/pages/kpi-history/kpi-history-list-page.js +11 -11
- package/dist-client/pages/kpi-history/kpi-history-list-page.js.map +1 -1
- package/dist-client/pages/kpi-metric/kpi-metric-list-page.d.ts +5 -0
- package/dist-client/pages/kpi-metric/kpi-metric-list-page.js +10 -2
- package/dist-client/pages/kpi-metric/kpi-metric-list-page.js.map +1 -1
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +1 -1
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +8 -8
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +1 -1
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +2 -2
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +1 -1
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +5 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +16 -8
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +1 -1
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +1 -1
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +6 -6
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +1 -1
- package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js +1 -2
- package/dist-client/pages/kpi-statistic/kpi-statistic-editor-page.js.map +1 -1
- package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.d.ts +5 -0
- package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js +10 -2
- package/dist-client/pages/kpi-statistic/kpi-statistic-list-page.js.map +1 -1
- package/dist-client/pages/kpi-value/kpi-value-editor-page.d.ts +2 -1
- package/dist-client/pages/kpi-value/kpi-value-editor-page.js +16 -8
- package/dist-client/pages/kpi-value/kpi-value-editor-page.js.map +1 -1
- package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +5 -0
- package/dist-client/pages/kpi-value/kpi-value-list-page.js +31 -7
- package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +2 -8
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/kpi-metric-value-provider.d.ts +1 -1
- package/dist-server/controllers/kpi-metric-value-provider.js +4 -4
- package/dist-server/controllers/kpi-metric-value-provider.js.map +1 -1
- package/dist-server/controllers/kpi-value-provider.d.ts +1 -1
- package/dist-server/controllers/kpi-value-provider.js +3 -3
- package/dist-server/controllers/kpi-value-provider.js.map +1 -1
- package/dist-server/migrations/1752190849680-seed-kpi-metrics.d.ts +6 -0
- package/dist-server/migrations/1752190849680-seed-kpi-metrics.js +101 -0
- package/dist-server/migrations/1752190849680-seed-kpi-metrics.js.map +1 -0
- package/dist-server/migrations/1752190849681-seed-kpi.d.ts +5 -0
- package/dist-server/migrations/1752190849681-seed-kpi.js +315 -0
- package/dist-server/migrations/1752190849681-seed-kpi.js.map +1 -0
- package/dist-server/migrations/1752192090123-add-grades-to-kpi.d.ts +7 -0
- package/dist-server/migrations/1752192090123-add-grades-to-kpi.js +51 -0
- package/dist-server/migrations/1752192090123-add-grades-to-kpi.js.map +1 -0
- package/dist-server/migrations/1752192090124-add-kpi-statistics.d.ts +5 -0
- package/dist-server/migrations/1752192090124-add-kpi-statistics.js +710 -0
- package/dist-server/migrations/1752192090124-add-kpi-statistics.js.map +1 -0
- package/dist-server/migrations/1752192090128-seed-kpi-org-scope.d.ts +6 -0
- package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js +111 -0
- package/dist-server/migrations/1752192090128-seed-kpi-org-scope.js.map +1 -0
- package/dist-server/migrations/1752192090129-seed-kpi-values.d.ts +6 -0
- package/dist-server/migrations/1752192090129-seed-kpi-values.js +187 -0
- package/dist-server/migrations/1752192090129-seed-kpi-values.js.map +1 -0
- package/dist-server/migrations/grade-data/x11-performance-table.json +962 -0
- package/dist-server/migrations/grade-data/x12-performance-table.json +611 -0
- package/dist-server/migrations/grade-data/x14-performance-table.json +42 -0
- package/dist-server/migrations/grade-data/x21-performance-table.json +889 -0
- package/dist-server/migrations/grade-data/x22-performance-table.json +1064 -0
- package/dist-server/migrations/grade-data/x23-performance-table.json +42 -0
- package/dist-server/migrations/grade-data/x31-performance-table.json +644 -0
- package/dist-server/migrations/grade-data/x32-performance-table.json +993 -0
- package/dist-server/migrations/grade-data/x33-performance-table.json +195 -0
- package/dist-server/migrations/grade-data/x34-performance-table.json +12 -0
- package/dist-server/migrations/grade-data/x35-performance-table.json +42 -0
- package/dist-server/migrations/grade-data/x41-performance-table.json +825 -0
- package/dist-server/migrations/grade-data/x42-performance-table.json +786 -0
- package/dist-server/migrations/grade-data/x43-performance-table.json +12 -0
- package/dist-server/migrations/grade-data/x44-performance-table.json +42 -0
- package/dist-server/migrations/grade-data/x51-performance-table.json +924 -0
- package/dist-server/migrations/grade-data/x52-performance-table.json +42 -0
- package/dist-server/migrations/grade-data/x61-performance-table.json +261 -0
- package/dist-server/migrations/grade-data/x62-performance-table.json +42 -0
- package/dist-server/migrations/seed-data/kpi-metrics-seed.json +454 -0
- package/dist-server/migrations/seed-data/kpi-org-scope-seed.json +1676 -0
- package/dist-server/migrations/seed-data/kpi-scopes-seed.json +121 -0
- package/dist-server/migrations/seed-data/kpi-values-seed.json +402 -0
- package/dist-server/migrations/seed-data/kpis-seed.json +488 -0
- package/dist-server/migrations/seed-data/scope-definitions-seed.json +90 -0
- package/dist-server/service/index.d.ts +4 -7
- package/dist-server/service/index.js +10 -13
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/kpi/aggregate-kpi.js +30 -13
- package/dist-server/service/kpi/aggregate-kpi.js.map +1 -1
- package/dist-server/service/kpi/kpi-formula.service.d.ts +15 -0
- package/dist-server/service/kpi/kpi-formula.service.js +90 -0
- package/dist-server/service/kpi/kpi-formula.service.js.map +1 -1
- package/dist-server/service/kpi/kpi-history.d.ts +0 -3
- package/dist-server/service/kpi/kpi-history.js +0 -10
- package/dist-server/service/kpi/kpi-history.js.map +1 -1
- package/dist-server/service/kpi/kpi-mutation.d.ts +1 -1
- package/dist-server/service/kpi/kpi-mutation.js +57 -20
- package/dist-server/service/kpi/kpi-mutation.js.map +1 -1
- package/dist-server/service/kpi/kpi-query.d.ts +7 -3
- package/dist-server/service/kpi/kpi-query.js +126 -10
- package/dist-server/service/kpi/kpi-query.js.map +1 -1
- package/dist-server/service/kpi/kpi-type.d.ts +4 -2
- package/dist-server/service/kpi/kpi-type.js +12 -4
- package/dist-server/service/kpi/kpi-type.js.map +1 -1
- package/dist-server/service/kpi/kpi.d.ts +4 -3
- package/dist-server/service/kpi/kpi.js +20 -8
- package/dist-server/service/kpi/kpi.js.map +1 -1
- package/dist-server/service/kpi-metric/aggregate-kpi-metric.js +46 -11
- package/dist-server/service/kpi-metric/aggregate-kpi-metric.js.map +1 -1
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +1 -1
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +6 -6
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -1
- package/dist-server/service/kpi-metric-value/kpi-metric-value-type.d.ts +2 -2
- package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js +4 -4
- package/dist-server/service/kpi-metric-value/kpi-metric-value-type.js.map +1 -1
- package/dist-server/service/kpi-metric-value/kpi-metric-value.d.ts +1 -1
- package/dist-server/service/kpi-metric-value/kpi-metric-value.js +3 -3
- package/dist-server/service/kpi-metric-value/kpi-metric-value.js.map +1 -1
- package/dist-server/service/kpi-org-scope/index.d.ts +5 -0
- package/dist-server/service/kpi-org-scope/index.js +9 -0
- package/dist-server/service/kpi-org-scope/index.js.map +1 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.d.ts +8 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js +170 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope-mutation.js.map +1 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope-query.d.ts +14 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js +152 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope-query.js.map +1 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope-type.d.ts +26 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js +101 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope-type.js.map +1 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope.d.ts +26 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope.js +135 -0
- package/dist-server/service/kpi-org-scope/kpi-org-scope.js.map +1 -0
- package/dist-server/service/kpi-scope/index.d.ts +9 -0
- package/dist-server/service/kpi-scope/index.js +14 -0
- package/dist-server/service/kpi-scope/index.js.map +1 -0
- package/dist-server/service/kpi-scope/kpi-scope-mutation.d.ts +9 -0
- package/dist-server/service/kpi-scope/kpi-scope-mutation.js +135 -0
- package/dist-server/service/kpi-scope/kpi-scope-mutation.js.map +1 -0
- package/dist-server/service/kpi-scope/kpi-scope-query.d.ts +11 -0
- package/dist-server/service/kpi-scope/kpi-scope-query.js +89 -0
- package/dist-server/service/kpi-scope/kpi-scope-query.js.map +1 -0
- package/dist-server/service/kpi-scope/kpi-scope-type.d.ts +35 -0
- package/dist-server/service/kpi-scope/kpi-scope-type.js +138 -0
- package/dist-server/service/kpi-scope/kpi-scope-type.js.map +1 -0
- package/dist-server/service/kpi-scope/kpi-scope.d.ts +38 -0
- package/dist-server/service/kpi-scope/kpi-scope.js +144 -0
- package/dist-server/service/kpi-scope/kpi-scope.js.map +1 -0
- package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.d.ts +43 -0
- package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js +181 -0
- package/dist-server/service/kpi-statistic/kpi-statistic-batch.service.js.map +1 -0
- package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.d.ts +50 -0
- package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js +324 -0
- package/dist-server/service/kpi-statistic/kpi-statistic-calculation.service.js.map +1 -0
- package/dist-server/service/kpi-statistic/kpi-statistic-mutation.d.ts +4 -0
- package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js +76 -0
- package/dist-server/service/kpi-statistic/kpi-statistic-mutation.js.map +1 -1
- package/dist-server/service/kpi-statistic/kpi-statistic-query.d.ts +5 -1
- package/dist-server/service/kpi-statistic/kpi-statistic-query.js +92 -1
- package/dist-server/service/kpi-statistic/kpi-statistic-query.js.map +1 -1
- package/dist-server/service/kpi-statistic/kpi-statistic.d.ts +4 -0
- package/dist-server/service/kpi-statistic/kpi-statistic.js +33 -0
- package/dist-server/service/kpi-statistic/kpi-statistic.js.map +1 -1
- package/dist-server/service/kpi-value/kpi-value-mutation.js +71 -7
- package/dist-server/service/kpi-value/kpi-value-mutation.js.map +1 -1
- package/dist-server/service/kpi-value/kpi-value-type.d.ts +4 -2
- package/dist-server/service/kpi-value/kpi-value-type.js +12 -4
- package/dist-server/service/kpi-value/kpi-value-type.js.map +1 -1
- package/dist-server/service/kpi-value/kpi-value.d.ts +3 -1
- package/dist-server/service/kpi-value/kpi-value.js +11 -5
- package/dist-server/service/kpi-value/kpi-value.js.map +1 -1
- package/dist-server/service/utils/value-date-util.d.ts +1 -0
- package/dist-server/service/utils/value-date-util.js +41 -0
- package/dist-server/service/utils/value-date-util.js.map +1 -1
- package/dist-server/tsconfig.json +10 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -6
- package/server/@types/index.d.ts +11 -0
- package/server/controllers/kpi-metric-value-provider.ts +5 -5
- package/server/controllers/kpi-value-provider.ts +4 -4
- package/server/migrations/1752190849680-seed-kpi-metrics.ts +124 -0
- package/server/migrations/1752190849681-seed-kpi.ts +356 -0
- package/server/migrations/1752192090123-add-grades-to-kpi.ts +67 -0
- package/server/migrations/1752192090124-add-kpi-statistics.ts +719 -0
- package/server/migrations/1752192090128-seed-kpi-org-scope.ts +132 -0
- package/server/migrations/1752192090129-seed-kpi-values.ts +207 -0
- package/server/migrations/grade-data/x11-performance-table.json +962 -0
- package/server/migrations/grade-data/x12-performance-table.json +611 -0
- package/server/migrations/grade-data/x14-performance-table.json +42 -0
- package/server/migrations/grade-data/x21-performance-table.json +889 -0
- package/server/migrations/grade-data/x22-performance-table.json +1064 -0
- package/server/migrations/grade-data/x23-performance-table.json +42 -0
- package/server/migrations/grade-data/x31-performance-table.json +644 -0
- package/server/migrations/grade-data/x32-performance-table.json +993 -0
- package/server/migrations/grade-data/x33-performance-table.json +195 -0
- package/server/migrations/grade-data/x34-performance-table.json +12 -0
- package/server/migrations/grade-data/x35-performance-table.json +42 -0
- package/server/migrations/grade-data/x41-performance-table.json +825 -0
- package/server/migrations/grade-data/x42-performance-table.json +786 -0
- package/server/migrations/grade-data/x43-performance-table.json +12 -0
- package/server/migrations/grade-data/x44-performance-table.json +42 -0
- package/server/migrations/grade-data/x51-performance-table.json +924 -0
- package/server/migrations/grade-data/x52-performance-table.json +42 -0
- package/server/migrations/grade-data/x61-performance-table.json +261 -0
- package/server/migrations/grade-data/x62-performance-table.json +42 -0
- package/server/migrations/seed-data/kpi-metrics-seed.json +454 -0
- package/server/migrations/seed-data/kpi-org-scope-seed.json +1676 -0
- package/server/migrations/seed-data/kpi-scopes-seed.json +121 -0
- package/server/migrations/seed-data/kpi-values-seed.json +402 -0
- package/server/migrations/seed-data/kpis-seed.json +488 -0
- package/server/migrations/seed-data/scope-definitions-seed.json +90 -0
- package/server/service/index.ts +10 -13
- package/server/service/kpi/aggregate-kpi.ts +31 -13
- package/server/service/kpi/kpi-formula.service.ts +101 -0
- package/server/service/kpi/kpi-history.ts +0 -8
- package/server/service/kpi/kpi-mutation.ts +59 -19
- package/server/service/kpi/kpi-query.ts +119 -8
- package/server/service/kpi/kpi-type.ts +10 -4
- package/server/service/kpi/kpi.ts +17 -7
- package/server/service/kpi-metric/aggregate-kpi-metric.ts +55 -11
- package/server/service/kpi-metric-value/kpi-metric-value-mutation.ts +6 -6
- package/server/service/kpi-metric-value/kpi-metric-value-type.ts +4 -4
- package/server/service/kpi-metric-value/kpi-metric-value.ts +3 -3
- package/server/service/kpi-org-scope/index.ts +6 -0
- package/server/service/kpi-org-scope/kpi-org-scope-mutation.ts +173 -0
- package/server/service/kpi-org-scope/kpi-org-scope-query.ts +127 -0
- package/server/service/kpi-org-scope/kpi-org-scope-type.ts +68 -0
- package/server/service/kpi-org-scope/kpi-org-scope.ts +123 -0
- package/server/service/kpi-scope/index.ts +11 -0
- package/server/service/kpi-scope/kpi-scope-mutation.ts +129 -0
- package/server/service/kpi-scope/kpi-scope-query.ts +63 -0
- package/server/service/kpi-scope/kpi-scope-type.ts +96 -0
- package/server/service/kpi-scope/kpi-scope.ts +143 -0
- package/server/service/kpi-statistic/kpi-statistic-batch.service.ts +231 -0
- package/server/service/kpi-statistic/kpi-statistic-calculation.service.ts +410 -0
- package/server/service/kpi-statistic/kpi-statistic-mutation.ts +97 -0
- package/server/service/kpi-statistic/kpi-statistic-query.ts +89 -2
- package/server/service/kpi-statistic/kpi-statistic.ts +32 -0
- package/server/service/kpi-value/kpi-value-mutation.ts +73 -7
- package/server/service/kpi-value/kpi-value-type.ts +10 -4
- package/server/service/kpi-value/kpi-value.ts +10 -5
- package/server/service/utils/value-date-util.ts +47 -0
- package/server/types/global.d.ts +8 -0
- package/things-factory.config.js +1 -0
- package/translations/en.json +15 -3
- package/translations/ja.json +13 -3
- package/translations/ko.json +15 -3
- package/translations/ms.json +13 -3
- package/translations/zh.json +13 -3
- package/client/pages/kpi-category/kpi-category-importer.ts +0 -90
- package/client/pages/kpi-category/kpi-category-list-page.ts +0 -537
- package/client/pages/kpi-category/kpi-category-value-calculator.ts +0 -233
- package/client/pages/kpi-category-value/kpi-category-value-list-page.ts +0 -404
- package/dist-client/pages/kpi-category/kpi-category-importer.d.ts +0 -23
- package/dist-client/pages/kpi-category/kpi-category-importer.js +0 -92
- package/dist-client/pages/kpi-category/kpi-category-importer.js.map +0 -1
- package/dist-client/pages/kpi-category/kpi-category-list-page.d.ts +0 -74
- package/dist-client/pages/kpi-category/kpi-category-list-page.js +0 -517
- package/dist-client/pages/kpi-category/kpi-category-list-page.js.map +0 -1
- package/dist-client/pages/kpi-category/kpi-category-value-calculator.d.ts +0 -13
- package/dist-client/pages/kpi-category/kpi-category-value-calculator.js +0 -256
- package/dist-client/pages/kpi-category/kpi-category-value-calculator.js.map +0 -1
- package/dist-client/pages/kpi-category-value/kpi-category-value-list-page.d.ts +0 -63
- package/dist-client/pages/kpi-category-value/kpi-category-value-list-page.js +0 -393
- package/dist-client/pages/kpi-category-value/kpi-category-value-list-page.js.map +0 -1
- package/dist-server/service/kpi-category/index.d.ts +0 -6
- package/dist-server/service/kpi-category/index.js +0 -10
- package/dist-server/service/kpi-category/index.js.map +0 -1
- package/dist-server/service/kpi-category/kpi-category-mutation.d.ts +0 -9
- package/dist-server/service/kpi-category/kpi-category-mutation.js +0 -221
- package/dist-server/service/kpi-category/kpi-category-mutation.js.map +0 -1
- package/dist-server/service/kpi-category/kpi-category-query.d.ts +0 -18
- package/dist-server/service/kpi-category/kpi-category-query.js +0 -115
- package/dist-server/service/kpi-category/kpi-category-query.js.map +0 -1
- package/dist-server/service/kpi-category/kpi-category-type.d.ts +0 -24
- package/dist-server/service/kpi-category/kpi-category-type.js +0 -100
- package/dist-server/service/kpi-category/kpi-category-type.js.map +0 -1
- package/dist-server/service/kpi-category/kpi-category.d.ts +0 -22
- package/dist-server/service/kpi-category/kpi-category.js +0 -106
- package/dist-server/service/kpi-category/kpi-category.js.map +0 -1
- package/dist-server/service/kpi-category-value/index.d.ts +0 -6
- package/dist-server/service/kpi-category-value/index.js +0 -10
- package/dist-server/service/kpi-category-value/index.js.map +0 -1
- package/dist-server/service/kpi-category-value/kpi-category-value-mutation.d.ts +0 -8
- package/dist-server/service/kpi-category-value/kpi-category-value-mutation.js +0 -102
- package/dist-server/service/kpi-category-value/kpi-category-value-mutation.js.map +0 -1
- package/dist-server/service/kpi-category-value/kpi-category-value-query.d.ts +0 -13
- package/dist-server/service/kpi-category-value/kpi-category-value-query.js +0 -91
- package/dist-server/service/kpi-category-value/kpi-category-value-query.js.map +0 -1
- package/dist-server/service/kpi-category-value/kpi-category-value-type.d.ts +0 -19
- package/dist-server/service/kpi-category-value/kpi-category-value-type.js +0 -73
- package/dist-server/service/kpi-category-value/kpi-category-value-type.js.map +0 -1
- package/dist-server/service/kpi-category-value/kpi-category-value.d.ts +0 -19
- package/dist-server/service/kpi-category-value/kpi-category-value.js +0 -91
- package/dist-server/service/kpi-category-value/kpi-category-value.js.map +0 -1
- package/helps/kpi/kpi-category.md +0 -160
- package/server/service/kpi-category/index.ts +0 -7
- package/server/service/kpi-category/kpi-category-mutation.ts +0 -217
- package/server/service/kpi-category/kpi-category-query.ts +0 -87
- package/server/service/kpi-category/kpi-category-type.ts +0 -73
- package/server/service/kpi-category/kpi-category.ts +0 -95
- package/server/service/kpi-category-value/index.ts +0 -7
- package/server/service/kpi-category-value/kpi-category-value-mutation.ts +0 -88
- package/server/service/kpi-category-value/kpi-category-value-query.ts +0 -62
- package/server/service/kpi-category-value/kpi-category-value-type.ts +0 -48
- package/server/service/kpi-category-value/kpi-category-value.ts +0 -79
|
@@ -65,39 +65,97 @@ export class KpiDashboardMapPage extends PageView {
|
|
|
65
65
|
|
|
66
66
|
async fetchDashboardData() {
|
|
67
67
|
try {
|
|
68
|
-
//
|
|
69
|
-
const
|
|
68
|
+
// 새로운 KpiStatistic 구조 사용 - 지역별 집계된 통계 데이터 조회
|
|
69
|
+
const currentMonth = new Date().toISOString().substring(0, 7) // YYYY-MM
|
|
70
|
+
|
|
71
|
+
const statisticsResponse = await client.query({
|
|
72
|
+
query: gql`
|
|
73
|
+
query GetDashboardStatistics($valueDate: String!) {
|
|
74
|
+
regionalKpiStatistics(periodType: MONTH, valueDate: $valueDate) {
|
|
75
|
+
id
|
|
76
|
+
mean
|
|
77
|
+
median
|
|
78
|
+
count
|
|
79
|
+
minimum
|
|
80
|
+
maximum
|
|
81
|
+
standardDeviation
|
|
82
|
+
kpi {
|
|
83
|
+
id
|
|
84
|
+
name
|
|
85
|
+
description
|
|
86
|
+
}
|
|
87
|
+
kpiOrgScope {
|
|
88
|
+
id
|
|
89
|
+
scope02
|
|
90
|
+
entityName
|
|
91
|
+
org
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
`,
|
|
96
|
+
variables: { valueDate: currentMonth }
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
this.nationalData = statisticsResponse.data.regionalKpiStatistics || []
|
|
100
|
+
|
|
101
|
+
// 통계 데이터로부터 지도 데이터 생성
|
|
102
|
+
this.generateMapDataFromStatistics()
|
|
103
|
+
} catch (e) {
|
|
104
|
+
console.log('KpiStatistic 데이터가 없어서 KpiValue로 폴백')
|
|
105
|
+
// KpiStatistic이 없는 경우 기존 방식으로 폴백
|
|
106
|
+
await this.fetchDashboardDataFallback()
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// 폴백: KpiValue를 직접 집계하는 기존 방식
|
|
111
|
+
async fetchDashboardDataFallback() {
|
|
112
|
+
try {
|
|
113
|
+
const kpiResponse = await client.query({
|
|
70
114
|
query: gql`
|
|
71
115
|
query {
|
|
72
|
-
|
|
73
|
-
|
|
116
|
+
kpisLevel1 {
|
|
117
|
+
id
|
|
118
|
+
name
|
|
119
|
+
description
|
|
120
|
+
isLeaf
|
|
121
|
+
children {
|
|
74
122
|
id
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
median
|
|
79
|
-
standardDeviation
|
|
80
|
-
kpi {
|
|
123
|
+
name
|
|
124
|
+
isLeaf
|
|
125
|
+
value {
|
|
81
126
|
id
|
|
82
|
-
|
|
83
|
-
|
|
127
|
+
value
|
|
128
|
+
score
|
|
129
|
+
valueDate
|
|
130
|
+
kpiOrgScope {
|
|
84
131
|
id
|
|
85
|
-
|
|
132
|
+
entityName
|
|
133
|
+
org
|
|
134
|
+
scope01
|
|
135
|
+
scope02
|
|
86
136
|
}
|
|
87
137
|
}
|
|
88
138
|
}
|
|
139
|
+
value {
|
|
140
|
+
id
|
|
141
|
+
value
|
|
142
|
+
score
|
|
143
|
+
valueDate
|
|
144
|
+
kpiOrgScope {
|
|
145
|
+
id
|
|
146
|
+
entityName
|
|
147
|
+
org
|
|
148
|
+
scope01
|
|
149
|
+
scope02
|
|
150
|
+
}
|
|
151
|
+
}
|
|
89
152
|
}
|
|
90
153
|
}
|
|
91
154
|
`
|
|
92
155
|
})
|
|
93
156
|
|
|
94
|
-
this.nationalData =
|
|
95
|
-
|
|
96
|
-
// 서울특별시 데이터는 전국 데이터에서 필터링
|
|
97
|
-
this.seoulData = this.nationalData.filter((item: any) => item.kpi?.category?.name === '서울특별시')
|
|
98
|
-
|
|
99
|
-
// 지도 데이터 생성 (시도별)
|
|
100
|
-
this.generateMapData()
|
|
157
|
+
this.nationalData = kpiResponse.data.kpisLevel1 || []
|
|
158
|
+
this.generateMapDataFromKpiValues()
|
|
101
159
|
} catch (e) {
|
|
102
160
|
notify({
|
|
103
161
|
level: 'error',
|
|
@@ -106,25 +164,200 @@ export class KpiDashboardMapPage extends PageView {
|
|
|
106
164
|
}
|
|
107
165
|
}
|
|
108
166
|
|
|
109
|
-
private
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
167
|
+
private generateMapDataFromKpiValues() {
|
|
168
|
+
// 실제 KPI 데이터로부터 지도 데이터 생성
|
|
169
|
+
const regionCoordinates = {
|
|
170
|
+
'서울': { lat: 37.5665, lng: 126.978 },
|
|
171
|
+
'부산': { lat: 35.1796, lng: 129.0756 },
|
|
172
|
+
'대구': { lat: 35.8714, lng: 128.6014 },
|
|
173
|
+
'인천': { lat: 37.4563, lng: 126.7052 },
|
|
174
|
+
'광주': { lat: 35.1595, lng: 126.8526 },
|
|
175
|
+
'대전': { lat: 36.3504, lng: 127.3845 },
|
|
176
|
+
'울산': { lat: 35.5384, lng: 129.3114 },
|
|
177
|
+
'세종': { lat: 36.4875, lng: 127.2816 },
|
|
178
|
+
'경기': { lat: 37.4138, lng: 127.5183 },
|
|
179
|
+
'강원': { lat: 37.8228, lng: 128.1555 },
|
|
180
|
+
'충북': { lat: 36.8, lng: 127.7 },
|
|
181
|
+
'충남': { lat: 36.5184, lng: 126.8 },
|
|
182
|
+
'전북': { lat: 35.7175, lng: 127.153 },
|
|
183
|
+
'전남': { lat: 34.8679, lng: 126.991 },
|
|
184
|
+
'경북': { lat: 36.4919, lng: 128.8889 },
|
|
185
|
+
'경남': { lat: 35.4606, lng: 128.2132 },
|
|
186
|
+
'제주': { lat: 33.4996, lng: 126.5312 }
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const mapDataMap = new Map()
|
|
190
|
+
|
|
191
|
+
// nationalData에서 KPI 값들을 지역별로 집계
|
|
192
|
+
this.nationalData.forEach((kpi: any) => {
|
|
193
|
+
// KPI 자체에 값이 있는 경우 (leaf KPI)
|
|
194
|
+
if (kpi.value && kpi.value.kpiOrgScope) {
|
|
195
|
+
const region = kpi.value.kpiOrgScope.scope02 // 시도는 scope02에 저장
|
|
196
|
+
if (region && regionCoordinates[region]) {
|
|
197
|
+
if (!mapDataMap.has(region)) {
|
|
198
|
+
mapDataMap.set(region, {
|
|
199
|
+
region,
|
|
200
|
+
values: [],
|
|
201
|
+
scores: [],
|
|
202
|
+
...regionCoordinates[region]
|
|
203
|
+
})
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
mapDataMap.get(region).values.push(kpi.value.value)
|
|
207
|
+
mapDataMap.get(region).scores.push(kpi.value.score)
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// 하위 KPI들의 값들도 처리
|
|
212
|
+
if (kpi.children) {
|
|
213
|
+
kpi.children.forEach((child: any) => {
|
|
214
|
+
if (child.value && child.value.kpiOrgScope) {
|
|
215
|
+
const region = child.value.kpiOrgScope.scope02 // 시도는 scope02에 저장
|
|
216
|
+
if (region && regionCoordinates[region]) {
|
|
217
|
+
if (!mapDataMap.has(region)) {
|
|
218
|
+
mapDataMap.set(region, {
|
|
219
|
+
region,
|
|
220
|
+
values: [],
|
|
221
|
+
scores: [],
|
|
222
|
+
...regionCoordinates[region]
|
|
223
|
+
})
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
mapDataMap.get(region).values.push(child.value.value)
|
|
227
|
+
mapDataMap.get(region).scores.push(child.value.score)
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
})
|
|
231
|
+
}
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
// 지역별 평균 계산 및 최종 지도 데이터 생성
|
|
235
|
+
this.mapData = Array.from(mapDataMap.values()).map(regionData => {
|
|
236
|
+
const avgValue = regionData.values.length > 0
|
|
237
|
+
? regionData.values.reduce((sum: number, val: number) => sum + val, 0) / regionData.values.length
|
|
238
|
+
: 0
|
|
239
|
+
|
|
240
|
+
const avgScore = regionData.scores.length > 0
|
|
241
|
+
? regionData.scores.reduce((sum: number, val: number) => sum + val, 0) / regionData.scores.length
|
|
242
|
+
: 0
|
|
243
|
+
|
|
244
|
+
// 간단한 변화율 계산 (실제로는 이전 기간과 비교해야 함)
|
|
245
|
+
const change = (Math.random() - 0.5) * 0.4 // 임시로 -0.2 ~ 0.2 범위
|
|
246
|
+
const trend = change >= 0 ? 'up' : 'down'
|
|
247
|
+
|
|
248
|
+
return {
|
|
249
|
+
region: regionData.region,
|
|
250
|
+
kpi: parseFloat(avgValue.toFixed(1)),
|
|
251
|
+
score: parseFloat(avgScore.toFixed(3)),
|
|
252
|
+
change: parseFloat(change.toFixed(2)),
|
|
253
|
+
trend,
|
|
254
|
+
lat: regionData.lat,
|
|
255
|
+
lng: regionData.lng,
|
|
256
|
+
dataCount: regionData.values.length
|
|
257
|
+
}
|
|
258
|
+
})
|
|
259
|
+
|
|
260
|
+
// 데이터가 없는 지역들도 기본값으로 추가
|
|
261
|
+
Object.keys(regionCoordinates).forEach(region => {
|
|
262
|
+
if (!mapDataMap.has(region)) {
|
|
263
|
+
this.mapData.push({
|
|
264
|
+
region,
|
|
265
|
+
kpi: 0,
|
|
266
|
+
score: 0,
|
|
267
|
+
change: 0,
|
|
268
|
+
trend: 'neutral',
|
|
269
|
+
lat: regionCoordinates[region].lat,
|
|
270
|
+
lng: regionCoordinates[region].lng,
|
|
271
|
+
dataCount: 0
|
|
272
|
+
})
|
|
273
|
+
}
|
|
274
|
+
})
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
private generateMapDataFromStatistics() {
|
|
278
|
+
// KpiStatistic 데이터로부터 지도 데이터 생성 (최적화된 버전)
|
|
279
|
+
const regionCoordinates = {
|
|
280
|
+
'서울': { lat: 37.5665, lng: 126.978 },
|
|
281
|
+
'부산': { lat: 35.1796, lng: 129.0756 },
|
|
282
|
+
'대구': { lat: 35.8714, lng: 128.6014 },
|
|
283
|
+
'인천': { lat: 37.4563, lng: 126.7052 },
|
|
284
|
+
'광주': { lat: 35.1595, lng: 126.8526 },
|
|
285
|
+
'대전': { lat: 36.3504, lng: 127.3845 },
|
|
286
|
+
'울산': { lat: 35.5384, lng: 129.3114 },
|
|
287
|
+
'세종': { lat: 36.4875, lng: 127.2816 },
|
|
288
|
+
'경기': { lat: 37.4138, lng: 127.5183 },
|
|
289
|
+
'강원': { lat: 37.8228, lng: 128.1555 },
|
|
290
|
+
'충북': { lat: 36.8, lng: 127.7 },
|
|
291
|
+
'충남': { lat: 36.5184, lng: 126.8 },
|
|
292
|
+
'전북': { lat: 35.7175, lng: 127.153 },
|
|
293
|
+
'전남': { lat: 34.8679, lng: 126.991 },
|
|
294
|
+
'경북': { lat: 36.4919, lng: 128.8889 },
|
|
295
|
+
'경남': { lat: 35.4606, lng: 128.2132 },
|
|
296
|
+
'제주': { lat: 33.4996, lng: 126.5312 }
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const mapDataMap = new Map()
|
|
300
|
+
|
|
301
|
+
// 통계 데이터를 지역별로 집계 (이미 서버에서 계산된 데이터 사용)
|
|
302
|
+
this.nationalData.forEach((statistic: any) => {
|
|
303
|
+
const region = statistic.kpiOrgScope?.scope02
|
|
304
|
+
if (region && regionCoordinates[region]) {
|
|
305
|
+
if (!mapDataMap.has(region)) {
|
|
306
|
+
mapDataMap.set(region, {
|
|
307
|
+
region,
|
|
308
|
+
means: [],
|
|
309
|
+
counts: [],
|
|
310
|
+
...regionCoordinates[region]
|
|
311
|
+
})
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// 통계값 집계 (이미 계산된 평균값들 사용)
|
|
315
|
+
mapDataMap.get(region).means.push(statistic.mean || 0)
|
|
316
|
+
mapDataMap.get(region).counts.push(statistic.count || 0)
|
|
317
|
+
}
|
|
318
|
+
})
|
|
319
|
+
|
|
320
|
+
// 지역별 최종 평균 계산 및 지도 데이터 생성
|
|
321
|
+
this.mapData = Array.from(mapDataMap.values()).map(regionData => {
|
|
322
|
+
const avgValue = regionData.means.length > 0
|
|
323
|
+
? regionData.means.reduce((sum: number, val: number) => sum + val, 0) / regionData.means.length
|
|
324
|
+
: 0
|
|
325
|
+
|
|
326
|
+
const totalCount = regionData.counts.reduce((sum: number, val: number) => sum + val, 0)
|
|
327
|
+
|
|
328
|
+
// 간단한 변화율 계산 (실제로는 이전 기간과 비교해야 함)
|
|
329
|
+
const change = (Math.random() - 0.5) * 0.4
|
|
330
|
+
const trend = change >= 0 ? 'up' : 'down'
|
|
331
|
+
|
|
332
|
+
return {
|
|
333
|
+
region: regionData.region,
|
|
334
|
+
kpi: parseFloat(avgValue.toFixed(1)),
|
|
335
|
+
change: parseFloat(change.toFixed(2)),
|
|
336
|
+
trend,
|
|
337
|
+
lat: regionData.lat,
|
|
338
|
+
lng: regionData.lng,
|
|
339
|
+
dataCount: totalCount,
|
|
340
|
+
statisticsCount: regionData.means.length // 통계 항목 수
|
|
341
|
+
}
|
|
342
|
+
})
|
|
343
|
+
|
|
344
|
+
// 데이터가 없는 지역들도 기본값으로 추가
|
|
345
|
+
Object.keys(regionCoordinates).forEach(region => {
|
|
346
|
+
if (!mapDataMap.has(region)) {
|
|
347
|
+
this.mapData.push({
|
|
348
|
+
region,
|
|
349
|
+
kpi: 0,
|
|
350
|
+
change: 0,
|
|
351
|
+
trend: 'neutral',
|
|
352
|
+
lat: regionCoordinates[region].lat,
|
|
353
|
+
lng: regionCoordinates[region].lng,
|
|
354
|
+
dataCount: 0,
|
|
355
|
+
statisticsCount: 0
|
|
356
|
+
})
|
|
357
|
+
}
|
|
358
|
+
})
|
|
359
|
+
|
|
360
|
+
console.log('Generated map data from KpiStatistics:', this.mapData.length, 'regions')
|
|
128
361
|
}
|
|
129
362
|
|
|
130
363
|
private downloadExcel() {
|
|
@@ -147,31 +380,41 @@ export class KpiDashboardMapPage extends PageView {
|
|
|
147
380
|
try {
|
|
148
381
|
const response = await client.query({
|
|
149
382
|
query: gql`
|
|
150
|
-
query GetRegionKpiData($
|
|
151
|
-
|
|
383
|
+
query GetRegionKpiData($filters: [Filter!]) {
|
|
384
|
+
kpiValues(filters: $filters) {
|
|
152
385
|
items {
|
|
153
386
|
id
|
|
387
|
+
value
|
|
388
|
+
score
|
|
154
389
|
valueDate
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
390
|
+
kpiOrgScope {
|
|
391
|
+
id
|
|
392
|
+
org
|
|
393
|
+
scope01
|
|
394
|
+
scope02
|
|
395
|
+
entityName
|
|
396
|
+
}
|
|
159
397
|
kpi {
|
|
160
398
|
id
|
|
161
399
|
name
|
|
162
|
-
|
|
400
|
+
parent {
|
|
163
401
|
id
|
|
164
402
|
name
|
|
165
403
|
}
|
|
166
404
|
}
|
|
167
405
|
}
|
|
406
|
+
total
|
|
168
407
|
}
|
|
169
408
|
}
|
|
170
409
|
`,
|
|
171
|
-
variables: {
|
|
410
|
+
variables: {
|
|
411
|
+
filters: [
|
|
412
|
+
{ name: 'kpiOrgScope.scope02', operator: 'eq', value: region }
|
|
413
|
+
]
|
|
414
|
+
}
|
|
172
415
|
})
|
|
173
416
|
|
|
174
|
-
this.seoulData = response.data.
|
|
417
|
+
this.seoulData = response.data.kpiValues.items || []
|
|
175
418
|
} catch (e) {
|
|
176
419
|
notify({
|
|
177
420
|
level: 'error',
|
|
@@ -186,15 +186,15 @@ export class KpiDashboardPage extends PageView {
|
|
|
186
186
|
minData[category] = Math.min(...values)
|
|
187
187
|
maxData[category] = Math.max(...values)
|
|
188
188
|
avgData[category] = values.reduce((a, b) => a + b, 0) / values.length
|
|
189
|
-
aData[category] = data.find(d => d.category === category && d.
|
|
189
|
+
aData[category] = data.find(d => d.category === category && d.org === 'A')?.value ?? avgData[category]
|
|
190
190
|
})
|
|
191
|
-
// kpi-radar-chart가 기대하는 구조로 변환: [{
|
|
191
|
+
// kpi-radar-chart가 기대하는 구조로 변환: [{org, category, value} ...]
|
|
192
192
|
const result: any[] = []
|
|
193
193
|
categories.forEach(category => {
|
|
194
|
-
result.push({
|
|
195
|
-
result.push({
|
|
196
|
-
result.push({
|
|
197
|
-
result.push({
|
|
194
|
+
result.push({ org: 'Min', category, value: minData[category] })
|
|
195
|
+
result.push({ org: 'Max', category, value: maxData[category] })
|
|
196
|
+
result.push({ org: 'Avg', category, value: avgData[category] })
|
|
197
|
+
result.push({ org: 'A', category, value: aData[category] })
|
|
198
198
|
})
|
|
199
199
|
return result
|
|
200
200
|
}
|
|
@@ -221,9 +221,9 @@ export class KpiDashboardPage extends PageView {
|
|
|
221
221
|
const q1 = sorted[Math.floor(sorted.length / 4)]
|
|
222
222
|
const q3 = sorted[Math.floor((sorted.length * 3) / 4)]
|
|
223
223
|
// value: A그룹의 실제값(강조)
|
|
224
|
-
const value = data.find(d => d.category === category && d.
|
|
224
|
+
const value = data.find(d => d.category === category && d.org === 'A')?.value ?? mean
|
|
225
225
|
return {
|
|
226
|
-
|
|
226
|
+
org: category, // x축: 카테고리
|
|
227
227
|
min,
|
|
228
228
|
q1,
|
|
229
229
|
median,
|
|
@@ -470,28 +470,26 @@ export class KpiDashboardPage extends PageView {
|
|
|
470
470
|
const response = await client.query({
|
|
471
471
|
query: gql`
|
|
472
472
|
query {
|
|
473
|
-
kpiCategories {
|
|
474
|
-
|
|
473
|
+
kpiCategories: kpisLevel1 {
|
|
474
|
+
id
|
|
475
|
+
name
|
|
476
|
+
kpis: children {
|
|
475
477
|
id
|
|
476
478
|
name
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
updatedAt
|
|
492
|
-
updater {
|
|
493
|
-
name
|
|
494
|
-
}
|
|
479
|
+
value {
|
|
480
|
+
value
|
|
481
|
+
valueDate
|
|
482
|
+
}
|
|
483
|
+
targetValue
|
|
484
|
+
unit
|
|
485
|
+
grades
|
|
486
|
+
vizType
|
|
487
|
+
vizMeta
|
|
488
|
+
histories(limit: 1) {
|
|
489
|
+
version
|
|
490
|
+
updatedAt
|
|
491
|
+
updater {
|
|
492
|
+
name
|
|
495
493
|
}
|
|
496
494
|
}
|
|
497
495
|
}
|
|
@@ -508,7 +506,7 @@ export class KpiDashboardPage extends PageView {
|
|
|
508
506
|
}
|
|
509
507
|
`
|
|
510
508
|
})
|
|
511
|
-
this.categories = response.data.kpiCategories
|
|
509
|
+
this.categories = response.data.kpiCategories || []
|
|
512
510
|
this.alerts = response.data.kpiAlerts || []
|
|
513
511
|
} catch (e) {
|
|
514
512
|
this.error = 'KPI 카테고리 데이터를 불러오지 못했습니다.'
|
|
@@ -548,7 +546,7 @@ export class KpiDashboardPage extends PageView {
|
|
|
548
546
|
id
|
|
549
547
|
name
|
|
550
548
|
unit
|
|
551
|
-
category {
|
|
549
|
+
category: parent {
|
|
552
550
|
id
|
|
553
551
|
name
|
|
554
552
|
}
|
|
@@ -7,6 +7,7 @@ import { client } from '@operato/graphql'
|
|
|
7
7
|
import { i18next, localize } from '@operato/i18n'
|
|
8
8
|
import { PageView } from '@operato/shell'
|
|
9
9
|
import { gql } from '@apollo/client'
|
|
10
|
+
import { p13n } from '@operato/p13n'
|
|
10
11
|
|
|
11
12
|
const KPI_HISTORY_LIST_QUERY = gql`
|
|
12
13
|
query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
|
|
@@ -35,7 +36,7 @@ const KPI_HISTORY_LIST_QUERY = gql`
|
|
|
35
36
|
`
|
|
36
37
|
|
|
37
38
|
@customElement('kpi-history-list-page')
|
|
38
|
-
export class KpiHistoryListPage extends localize(i18next)(PageView) {
|
|
39
|
+
export class KpiHistoryListPage extends p13n(localize(i18next)(PageView)) {
|
|
39
40
|
static styles = css`
|
|
40
41
|
:host {
|
|
41
42
|
display: flex;
|
|
@@ -61,7 +62,6 @@ export class KpiHistoryListPage extends localize(i18next)(PageView) {
|
|
|
61
62
|
'version',
|
|
62
63
|
'name',
|
|
63
64
|
'description',
|
|
64
|
-
'category',
|
|
65
65
|
'formula',
|
|
66
66
|
'active',
|
|
67
67
|
'state',
|
|
@@ -75,7 +75,6 @@ export class KpiHistoryListPage extends localize(i18next)(PageView) {
|
|
|
75
75
|
'version',
|
|
76
76
|
'name',
|
|
77
77
|
'description',
|
|
78
|
-
'category',
|
|
79
78
|
'formula',
|
|
80
79
|
'active',
|
|
81
80
|
'state',
|
|
@@ -98,13 +97,6 @@ export class KpiHistoryListPage extends localize(i18next)(PageView) {
|
|
|
98
97
|
{ type: 'number', name: 'version', header: '버전', record: { editable: false }, width: 80 },
|
|
99
98
|
{ type: 'string', name: 'name', header: '이름', record: { editable: false }, width: 150 },
|
|
100
99
|
{ type: 'string', name: 'description', header: '설명', record: { editable: false }, width: 200 },
|
|
101
|
-
{
|
|
102
|
-
type: 'string',
|
|
103
|
-
name: 'category',
|
|
104
|
-
header: '카테고리',
|
|
105
|
-
record: { editable: false, renderer: (v, c, r) => r.category?.name },
|
|
106
|
-
width: 120
|
|
107
|
-
},
|
|
108
100
|
{ type: 'formula', name: 'formula', header: '산식', record: { editable: false }, width: 200 },
|
|
109
101
|
{ type: 'checkbox', name: 'active', label: true, header: '활성', record: { editable: false }, width: 60 },
|
|
110
102
|
{ type: 'string', name: 'state', header: '상태', record: { editable: false }, width: 100 },
|
|
@@ -130,7 +122,15 @@ export class KpiHistoryListPage extends localize(i18next)(PageView) {
|
|
|
130
122
|
@query('ox-grist') private grist!: DataGrist
|
|
131
123
|
|
|
132
124
|
render() {
|
|
133
|
-
return html`
|
|
125
|
+
return html`
|
|
126
|
+
<ox-grist
|
|
127
|
+
.config=${this.gristConfig}
|
|
128
|
+
.fetchHandler=${this.fetchHandler.bind(this)}
|
|
129
|
+
.personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')!}
|
|
130
|
+
>
|
|
131
|
+
<ox-grist-personalizer slot="setting"></ox-grist-personalizer>
|
|
132
|
+
</ox-grist>
|
|
133
|
+
`
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) {
|
|
@@ -15,6 +15,7 @@ import { i18next, localize } from '@operato/i18n'
|
|
|
15
15
|
import { notify, openPopup } from '@operato/layout'
|
|
16
16
|
import { OxPopup, OxPrompt } from '@operato/popup'
|
|
17
17
|
import { isMobileDevice } from '@operato/utils'
|
|
18
|
+
import { p13n } from '@operato/p13n'
|
|
18
19
|
|
|
19
20
|
import { connect } from 'pwa-helpers/connect-mixin'
|
|
20
21
|
import gql from 'graphql-tag'
|
|
@@ -22,7 +23,7 @@ import gql from 'graphql-tag'
|
|
|
22
23
|
import { KpiMetricImporter } from './kpi-metric-importer'
|
|
23
24
|
|
|
24
25
|
@customElement('kpi-metric-list-page')
|
|
25
|
-
export class KpiMetricListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
|
|
26
|
+
export class KpiMetricListPage extends connect(store)(p13n(localize(i18next)(ScopedElementsMixin(PageView)))) {
|
|
26
27
|
static styles = [
|
|
27
28
|
ScrollbarStyles,
|
|
28
29
|
CommonGristStyles,
|
|
@@ -100,7 +101,12 @@ export class KpiMetricListPage extends connect(store)(localize(i18next)(ScopedEl
|
|
|
100
101
|
const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
|
|
101
102
|
|
|
102
103
|
return html`
|
|
103
|
-
<ox-grist
|
|
104
|
+
<ox-grist
|
|
105
|
+
.mode=${mode}
|
|
106
|
+
.config=${this.gristConfig}
|
|
107
|
+
.fetchHandler=${this.fetchHandler.bind(this)}
|
|
108
|
+
.personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')!}
|
|
109
|
+
>
|
|
104
110
|
<div slot="headroom" class="header">
|
|
105
111
|
<div class="filters">
|
|
106
112
|
<ox-filters-form autofocus without-search></ox-filters-form>
|
|
@@ -118,6 +124,8 @@ export class KpiMetricListPage extends connect(store)(localize(i18next)(ScopedEl
|
|
|
118
124
|
</ox-record-creator>
|
|
119
125
|
</div>
|
|
120
126
|
</div>
|
|
127
|
+
|
|
128
|
+
<ox-grist-personalizer slot="setting"></ox-grist-personalizer>
|
|
121
129
|
</ox-grist>
|
|
122
130
|
`
|
|
123
131
|
}
|
|
@@ -209,7 +209,7 @@ export class KpiMetricValueEditorPage extends connect(store)(localize(i18next)(S
|
|
|
209
209
|
`
|
|
210
210
|
]
|
|
211
211
|
|
|
212
|
-
@property({ type: String })
|
|
212
|
+
@property({ type: String }) org: string = ''
|
|
213
213
|
@property({ type: String }) startDate: string = ''
|
|
214
214
|
@property({ type: String }) endDate: string = ''
|
|
215
215
|
|
|
@@ -262,8 +262,8 @@ export class KpiMetricValueEditorPage extends connect(store)(localize(i18next)(S
|
|
|
262
262
|
<div class="controls">
|
|
263
263
|
<md-outlined-text-field
|
|
264
264
|
label="그룹"
|
|
265
|
-
.value=${this.
|
|
266
|
-
@input=${(e: any) => (this.
|
|
265
|
+
.value=${this.org}
|
|
266
|
+
@input=${(e: any) => (this.org = e.target.value)}
|
|
267
267
|
style="width: 150px;"
|
|
268
268
|
></md-outlined-text-field>
|
|
269
269
|
|
|
@@ -492,7 +492,7 @@ export class KpiMetricValueEditorPage extends connect(store)(localize(i18next)(S
|
|
|
492
492
|
metricId
|
|
493
493
|
valueDate
|
|
494
494
|
value
|
|
495
|
-
|
|
495
|
+
org
|
|
496
496
|
}
|
|
497
497
|
total
|
|
498
498
|
}
|
|
@@ -500,7 +500,7 @@ export class KpiMetricValueEditorPage extends connect(store)(localize(i18next)(S
|
|
|
500
500
|
`,
|
|
501
501
|
variables: {
|
|
502
502
|
filters: [
|
|
503
|
-
...(this.
|
|
503
|
+
...(this.org ? [{ name: 'org', operator: 'eq', value: this.org }] : []),
|
|
504
504
|
{ name: 'valueDate', operator: 'between', value: [this.startDate, this.endDate] }
|
|
505
505
|
]
|
|
506
506
|
}
|
|
@@ -576,7 +576,7 @@ export class KpiMetricValueEditorPage extends connect(store)(localize(i18next)(S
|
|
|
576
576
|
patches.push({
|
|
577
577
|
id: existingValue.id,
|
|
578
578
|
value: data.value,
|
|
579
|
-
|
|
579
|
+
org: this.org,
|
|
580
580
|
cuFlag: 'M'
|
|
581
581
|
})
|
|
582
582
|
} else {
|
|
@@ -594,7 +594,7 @@ export class KpiMetricValueEditorPage extends connect(store)(localize(i18next)(S
|
|
|
594
594
|
metricId: metric.metricId,
|
|
595
595
|
valueDate: normalizedDate,
|
|
596
596
|
value: data.value,
|
|
597
|
-
|
|
597
|
+
org: this.org,
|
|
598
598
|
cuFlag: '+'
|
|
599
599
|
})
|
|
600
600
|
}
|
|
@@ -25,13 +25,13 @@ export class KpiMetricValueImporter extends LitElement {
|
|
|
25
25
|
|
|
26
26
|
@property({ type: Array }) metricValues: any[] = []
|
|
27
27
|
@property({ type: Object }) columns = {
|
|
28
|
-
list: { fields: ['metric', 'value', 'valueDate', '
|
|
28
|
+
list: { fields: ['metric', 'value', 'valueDate', 'org', 'meta'] },
|
|
29
29
|
pagination: { infinite: true },
|
|
30
30
|
columns: [
|
|
31
31
|
{ type: 'string', name: 'metric', header: 'Metric', width: 150 },
|
|
32
32
|
{ type: 'number', name: 'value', header: '값', width: 120 },
|
|
33
33
|
{ type: 'date', name: 'valueDate', header: '날짜', width: 120 },
|
|
34
|
-
{ type: 'string', name: '
|
|
34
|
+
{ type: 'string', name: 'org', header: '조직', width: 120 },
|
|
35
35
|
{ type: 'object', name: 'meta', header: '메타', width: 120 }
|
|
36
36
|
]
|
|
37
37
|
}
|