@things-factory/kpi 10.1.40 → 10.1.42

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.
@@ -114,7 +114,7 @@ export class KpiMetricValueEditorPage extends localize(i18next)(ScopedElementsMi
114
114
  color: var(--md-sys-color-on-primary-container);
115
115
  }
116
116
 
117
- td.editable-cell:hover { background: var(--md-sys-color-primary-container-high);
117
+ td.editable-cell:hover { background: var(--md-sys-color-primary-container);
118
118
  }
119
119
 
120
120
  td.highlighted-cell { background: var(--md-sys-color-secondary-container);
@@ -122,7 +122,7 @@ export class KpiMetricValueEditorPage extends localize(i18next)(ScopedElementsMi
122
122
  font-weight: 500;
123
123
  }
124
124
 
125
- td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container-high);
125
+ td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container);
126
126
  }
127
127
 
128
128
  td.disabled-cell { background: var(--md-sys-color-surface-container);
@@ -129,7 +129,7 @@ export class KpiStatisticEditorPage extends localize(i18next)(ScopedElementsMixi
129
129
  color: var(--md-sys-color-on-primary-container);
130
130
  }
131
131
 
132
- td.editable-cell:hover { background: var(--md-sys-color-primary-container-high);
132
+ td.editable-cell:hover { background: var(--md-sys-color-primary-container);
133
133
  }
134
134
 
135
135
  td.highlighted-cell { background: var(--md-sys-color-secondary-container);
@@ -137,7 +137,7 @@ export class KpiStatisticEditorPage extends localize(i18next)(ScopedElementsMixi
137
137
  font-weight: 500;
138
138
  }
139
139
 
140
- td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container-high);
140
+ td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container);
141
141
  }
142
142
 
143
143
  td.disabled-cell { background: var(--md-sys-color-surface-container);
@@ -115,7 +115,7 @@ export class KpiValueEditorPage extends localize(i18next)(ScopedElementsMixin(Pa
115
115
  color: var(--md-sys-color-on-primary-container);
116
116
  }
117
117
 
118
- td.editable-cell:hover { background: var(--md-sys-color-primary-container-high);
118
+ td.editable-cell:hover { background: var(--md-sys-color-primary-container);
119
119
  }
120
120
 
121
121
  td.highlighted-cell { background: var(--md-sys-color-secondary-container);
@@ -123,7 +123,7 @@ export class KpiValueEditorPage extends localize(i18next)(ScopedElementsMixin(Pa
123
123
  font-weight: 500;
124
124
  }
125
125
 
126
- td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container-high);
126
+ td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container);
127
127
  }
128
128
 
129
129
  td.disabled-cell { background: var(--md-sys-color-surface-container);
@@ -113,7 +113,7 @@ let KpiMetricValueEditorPage = class KpiMetricValueEditorPage extends localize(i
113
113
  color: var(--md-sys-color-on-primary-container);
114
114
  }
115
115
 
116
- td.editable-cell:hover { background: var(--md-sys-color-primary-container-high);
116
+ td.editable-cell:hover { background: var(--md-sys-color-primary-container);
117
117
  }
118
118
 
119
119
  td.highlighted-cell { background: var(--md-sys-color-secondary-container);
@@ -121,7 +121,7 @@ let KpiMetricValueEditorPage = class KpiMetricValueEditorPage extends localize(i
121
121
  font-weight: 500;
122
122
  }
123
123
 
124
- td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container-high);
124
+ td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container);
125
125
  }
126
126
 
127
127
  td.disabled-cell { background: var(--md-sys-color-surface-container);
@@ -1 +1 @@
1
- {"version":3,"file":"kpi-metric-value-editor-page.js","sourceRoot":"","sources":["../../../client/pages/kpi-metric-value/kpi-metric-value-editor-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/elevated-button.js'\nimport '@material/web/textfield/outlined-text-field.js'\n\nimport { CommonButtonStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\n\ninterface KpiMetricValueData { metricId: string\n metricName: string\n periodType: string\n values: { [date: string]: { value: number | null; isDirty?: boolean } }\n}\n\ninterface EditorCell { date: string\n value: number | null\n isEditable: boolean\n isHighlighted: boolean\n}\n\n@customElement('kpi-metric-value-editor-page')\nexport class KpiMetricValueEditorPage extends localize(i18next)(ScopedElementsMixin(PageView)) { static styles = [\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host { display: flex;\n flex-direction: column;\n padding: 20px;\n overflow-x: auto;\n }\n\n .header { display: flex;\n gap: 16px;\n align-items: center;\n margin-bottom: 20px;\n padding: 16px;\n background: var(--md-sys-color-surface-container);\n border-radius: 8px;\n }\n\n .controls { display: flex;\n gap: 12px;\n align-items: center;\n }\n\n .table-container { flex: 1;\n overflow: auto;\n border: 1px solid var(--md-sys-color-outline);\n border-radius: 8px;\n }\n\n table { width: 100%;\n border-collapse: collapse;\n min-width: max-content;\n }\n\n th { background: var(--md-sys-color-surface-container-low);\n font-weight: 500;\n padding: 8px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n min-width: 80px;\n height: 120px;\n vertical-align: middle;\n }\n\n td { padding: 8px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n min-width: 80px;\n height: 60px;\n text-align: right;\n vertical-align: middle;\n }\n\n .metric-header { position: sticky;\n left: 0;\n top: 0;\n z-index: 3;\n }\n\n .metric-name { position: sticky;\n left: 0;\n background: var(--md-sys-color-surface);\n font-weight: 500;\n min-width: 200px;\n text-align: left;\n z-index: 2;\n }\n\n tr:hover { background: var(--md-sys-color-surface-container-high);\n }\n\n th.date-header { position: sticky;\n top: 0;\n z-index: 2;\n text-align: center;\n font-size: 11px;\n color: var(--md-sys-color-on-surface-variant);\n writing-mode: vertical-rl;\n text-orientation: mixed;\n min-height: 120px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n td.editable-cell { cursor: pointer;\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n\n td.editable-cell:hover { background: var(--md-sys-color-primary-container-high);\n }\n\n td.highlighted-cell { background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n font-weight: 500;\n }\n\n td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container-high);\n }\n\n td.disabled-cell { background: var(--md-sys-color-surface-container);\n color: var(--md-sys-color-on-surface-variant);\n cursor: not-allowed;\n }\n\n .value-input { width: 100%;\n text-align: center;\n border: none;\n background: transparent;\n color: inherit;\n font-size: 12px;\n padding: 2px;\n }\n\n .value-input:focus { outline: 2px solid var(--md-sys-color-primary);\n border-radius: 4px;\n }\n\n .period-type-badge { font-size: 10px;\n padding: 2px 6px;\n border-radius: 4px;\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n margin-left: 8px;\n }\n\n .loading { display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .error { color: var(--md-sys-color-error);\n padding: 16px;\n text-align: center;\n }\n\n .legend { display: flex;\n gap: 16px;\n margin-top: 16px;\n font-size: 12px;\n }\n\n .legend-item { display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .legend-color { width: 16px;\n height: 16px;\n border-radius: 2px;\n }\n `\n ]\n\n @property({ type: String }) org: string = ''\n @property({ type: String }) startDate: string = ''\n @property({ type: String }) endDate: string = ''\n\n @state() private metrics: KpiMetricValueData[] = []\n @state() private dates: string[] = []\n @state() private loading: boolean = false\n @state() private error: string = ''\n @state() private editingCell: { metricId: string; date: string } | null = null\n @state() private _existingValues: any[] = []\n\n get context() { return { title: i18next.t('title.kpi metric value editor'),\n actions: [\n { title: i18next.t('button.save'),\n action: this._saveValues.bind(this),\n ...CommonButtonStyles.save\n },\n { title: i18next.t('button.cancel'),\n action: this._cancel.bind(this),\n ...CommonButtonStyles.cancel\n }\n ]\n }\n }\n\n render() { if (this.loading) { return html`\n <div class=\"loading\">\n <md-icon>hourglass_empty</md-icon>\n <span>데이터를 불러오는 중...</span>\n </div>\n `\n }\n\n if (this.error) { return html`\n <div class=\"error\">\n <md-icon>error</md-icon>\n <span>${this.error}</span>\n </div>\n `\n }\n\n return html`\n <div class=\"header\">\n <div class=\"controls\">\n <md-outlined-text-field\n label=\"그룹\"\n .value=${this.org}\n @input=${(e: any) => (this.org = e.target.value)}\n style=\"width: 150px;\"\n ></md-outlined-text-field>\n\n <md-outlined-text-field\n label=\"시작일\"\n type=\"date\"\n .value=${this.startDate}\n @input=${(e: any) => (this.startDate = e.target.value)}\n style=\"width: 150px;\"\n ></md-outlined-text-field>\n\n <md-outlined-text-field\n label=\"종료일\"\n type=\"date\"\n .value=${this.endDate}\n @input=${(e: any) => (this.endDate = e.target.value)}\n style=\"width: 150px;\"\n ></md-outlined-text-field>\n\n <md-elevated-button @click=${this._loadData}>\n <md-icon slot=\"icon\">refresh</md-icon>\n 새로고침\n </md-elevated-button>\n </div>\n </div>\n\n <div class=\"table-container\">\n <table style=\"border-collapse: collapse; width: 100%;\">\n <thead>\n <tr>\n <th\n style=\"border: 1px solid #ccc; padding: 8px; background: #f5f5f5; min-width: 200px; left: 0; top: 0;\"\n class=\"metric-header\"\n >\n Metric명\n </th>\n ${this.dates.map(\n date => html`\n <th\n style=\"border: 1px solid #ccc; padding: 8px; background: #f5f5f5; min-width: 80px; position: sticky; top: 0;\"\n >\n ${this._formatDate(date)}\n </th>\n `\n )}\n </tr>\n </thead>\n <tbody>\n ${this.metrics.map(\n metric => html`\n <tr>\n <td\n style=\"border: 1px solid #ccc; padding: 8px; background: #fff; min-width: 200px;\"\n class=\"metric-name\"\n >\n ${metric.metricName}\n <span\n style=\"font-size: 10px; padding: 2px 6px; background: #e0e0e0; border-radius: 4px; margin-left: 8px;\"\n >${metric.periodType}</span\n >\n </td>\n ${this.dates.map(\n date => html`\n <td\n style=\"border: 1px solid #ccc; padding: 8px; background: #e3f2fd; text-align: center; min-width: 80px; cursor: pointer;\"\n @click=${() => this._startEdit(metric.metricId, date)}\n >\n ${this._renderCellContent(metric, date)}\n </td>\n `\n )}\n </tr>\n `\n )}\n </tbody>\n </table>\n </div>\n\n <div class=\"legend\">\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-primary-container);\"></div>\n <span>편집 가능</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-secondary-container);\"></div>\n <span>하이라이트 (PeriodType에 따라)</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-surface-container);\"></div>\n <span>편집 불가</span>\n </div>\n </div>\n `\n }\n\n private _renderCellContent(metric: KpiMetricValueData, date: string) { const isEditing = this.editingCell?.metricId === metric.metricId && this.editingCell?.date === date\n\n // periodType에 따라 값을 가져오는 방식 결정\n let value: number | null = null\n\n if (metric.periodType === 'DAY') { // DAY인 경우 해당 날짜의 값을 사용\n value = metric.values[date]?.value\n } else if (metric.periodType === 'WEEK') { // WEEK인 경우 해당 주의 월요일의 값을 사용\n const weekKey = this._getWeekKey(date)\n value = metric.values[weekKey]?.value\n } else if (metric.periodType === 'MONTH') { // MONTH인 경우 해당 월의 값을 사용\n const monthKey = this._getMonthKey(date)\n value = metric.values[monthKey]?.value\n } else if (metric.periodType === 'QUARTER') { // QUARTER인 경우 해당 분기의 값을 사용\n const quarterKey = this._getQuarterKey(date)\n value = metric.values[quarterKey]?.value\n } else if (metric.periodType === 'YEAR') { // YEAR인 경우 해당 연도의 값을 사용\n const yearKey = this._getYearKey(date)\n value = metric.values[yearKey]?.value\n } else { // 기본값: DAY와 동일\n value = metric.values[date]?.value\n }\n\n if (isEditing) { console.log('Rendering input for editing, value:', value)\n return html`\n <input\n type=\"number\"\n step=\"0.01\"\n .value=${(value || '').toString()}\n @blur=${(e: any) => this._finishEdit(metric.metricId, date, parseFloat(e.target.value) || 0)}\n @keydown=${(e: any) => e.key === 'Enter' && e.target.blur()}\n style=\"width: 100%; text-align: center; border: none; background: transparent;\"\n autofocus\n />\n `\n }\n\n return html`\n <div style=\"display: flex; flex-direction: column; gap: 2px;\">\n <span style=\"font-weight: 500; color: ${value !== null && value !== undefined ? 'inherit' : '#999'};\">\n ${value !== null && value !== undefined ? value.toLocaleString() : '클릭하여 입력'}\n </span>\n </div>\n `\n }\n\n private _formatDate(date: string): string { const d = new Date(date)\n return d.toLocaleDateString('ko-KR', { month: 'numeric', day: 'numeric' })\n }\n\n private _startEdit(metricId: string, date: string) { this.editingCell = { metricId, date }\n }\n\n private _finishEdit(metricId: string, date: string, value: number) { const metric = this.metrics.find(m => m.metricId === metricId)\n if (metric) { // periodType에 따라 저장할 키 결정\n let storageKey = date\n\n if (metric.periodType === 'WEEK') { storageKey = this._getWeekKey(date)\n } else if (metric.periodType === 'MONTH') { storageKey = this._getMonthKey(date)\n } else if (metric.periodType === 'QUARTER') { storageKey = this._getQuarterKey(date)\n } else if (metric.periodType === 'YEAR') { storageKey = this._getYearKey(date)\n }\n\n if (!metric.values[storageKey]) { metric.values[storageKey] = { value: 0, isDirty: false }\n }\n\n // 값이 변경되었는지 확인\n const originalValue = this._findExistingValue(metricId, storageKey)?.value\n const isChanged = originalValue !== value\n\n metric.values[storageKey].value = value\n metric.values[storageKey].isDirty = isChanged\n }\n this.editingCell = null\n }\n\n private async _loadData() { if (!this.startDate || !this.endDate) { this.error = '시작일, 종료일을 모두 입력해주세요.'\n return\n }\n\n this.loading = true\n this.error = ''\n\n try { // KPI Metric 목록 조회\n const metricsResponse = await client.query({ query: gql`\n query ($filters: [Filter!]) { kpiMetrics(filters: $filters) { items { id\n name\n periodType\n active\n }\n total\n }\n }\n `,\n variables: { filters: [{ name: 'active', operator: 'eq', value: true }]\n }\n })\n\n // KPI Metric Value 데이터 조회\n const valuesResponse = await client.query({ query: gql`\n query ($filters: [Filter!]) { kpiMetricValues(filters: $filters) { items { id\n metricId\n valueDate\n value\n org\n }\n total\n }\n }\n `,\n variables: { filters: [\n ...(this.org ? [{ name: 'org', operator: 'eq', value: this.org }] : []),\n { name: 'valueDate', operator: 'between', value: [this.startDate, this.endDate] }\n ]\n }\n })\n\n // 날짜 배열 생성\n this.dates = this._generateDateArray(this.startDate, this.endDate)\n\n // KPI Metric 목록을 기준으로 데이터 구성\n this.metrics = metricsResponse.data.kpiMetrics.items.map((metric: any) => ({ metricId: metric.id,\n metricName: metric.name,\n periodType: metric.periodType,\n values: {}\n }))\n\n // 기존 KPI Metric Value 데이터 저장\n this._existingValues = valuesResponse.data.kpiMetricValues.items\n\n // KPI Metric Value 데이터를 해당 Metric에 매핑\n valuesResponse.data.kpiMetricValues.items.forEach((value: any) => { const metric = this.metrics.find(m => m.metricId === value.metricId)\n if (metric) { metric.values[value.valueDate] = { value: value.value,\n isDirty: false\n }\n }\n })\n\n // KPI Metric Value가 없는 Metric도 빈 값으로 초기화\n this.metrics.forEach(metric => { this.dates.forEach(date => { if (!metric.values[date]) { metric.values[date] = { value: null, isDirty: false }\n }\n })\n })\n\n this.requestUpdate()\n } catch (error) { console.error('데이터 로드 중 오류:', error)\n this.error = '데이터를 불러오는 중 오류가 발생했습니다.'\n } finally { this.loading = false\n }\n }\n\n private _generateDateArray(startDate: string, endDate: string): string[] { const dates: string[] = []\n const start = new Date(startDate)\n const end = new Date(endDate)\n\n // 일별로 생성 (기본)\n for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) { dates.push(d.toLocaleDateString('sv-SE'))\n }\n\n return dates\n }\n\n private async _saveValues() { try { const patches: any[] = []\n\n this.metrics.forEach(metric => { Object.entries(metric.values).forEach(([date, data]) => { // dirty 상태인 데이터만 처리\n if (data.isDirty && data.value !== null && data.value !== undefined) { const existingValue = this._findExistingValue(metric.metricId, date)\n\n if (existingValue) { patches.push({ id: existingValue.id,\n value: data.value,\n org: this.org,\n cuFlag: 'M'\n })\n } else { console.log(\n 'Creating new value for metric:',\n metric.metricName,\n 'periodType:',\n metric.periodType,\n 'date:',\n date\n )\n const normalizedDate = this._normalizeDateByPeriodType(date, metric.periodType)\n console.log('Normalized date:', normalizedDate)\n patches.push({ metricId: metric.metricId,\n valueDate: normalizedDate,\n value: data.value,\n org: this.org,\n cuFlag: '+'\n })\n }\n }\n })\n })\n\n if (patches.length === 0) { notify({ message: '저장할 데이터가 없습니다.' })\n return\n }\n\n // 디버깅: patches 내용 확인\n console.log('Sending patches:', patches)\n\n // 단일 mutation으로 생성과 업데이트 처리\n const response = await client.mutate({ mutation: gql`\n mutation ($patches: [KpiMetricValuePatch!]!) { updateMultipleKpiMetricValue(patches: $patches) { id\n value\n valueDate\n metricId\n }\n }\n `,\n variables: { patches }\n })\n\n if (!response.errors) { // 저장 후 dirty 상태 해제\n response.data.updateMultipleKpiMetricValue.forEach((savedValue: any) => { const metric = this.metrics.find(m => m.metricId === savedValue.metricId)\n if (metric && metric.values[savedValue.valueDate]) { metric.values[savedValue.valueDate].isDirty = false\n }\n })\n\n notify({ message: 'KPI Metric 값이 성공적으로 저장되었습니다.' })\n this.requestUpdate()\n }\n } catch (error) { console.error('저장 중 오류:', error)\n notify({ message: '저장 중 오류가 발생했습니다.' })\n }\n }\n\n private _findExistingValue(metricId: string, date: string) { // 기존 로드된 KPI Metric Value 데이터에서 찾기\n return this._existingValues?.find((v: any) => v.metricId === metricId && v.valueDate === date)\n }\n\n private _getMonthKey(date: string): string { const dateObj = new Date(date)\n return `${dateObj.getFullYear()}-${String(dateObj.getMonth() + 1).padStart(2, '0')}`\n }\n\n private _getQuarterKey(date: string): string { const dateObj = new Date(date)\n const quarter = Math.floor(dateObj.getMonth() / 3) + 1\n return `${dateObj.getFullYear()}-Q${quarter}`\n }\n\n private _getYearKey(date: string): string { const dateObj = new Date(date)\n return `${dateObj.getFullYear()}`\n }\n\n private _getWeekKey(date: string): string { const dateObj = new Date(date)\n const dayOfWeek = dateObj.getDay()\n const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1\n const monday = new Date(dateObj)\n monday.setDate(dateObj.getDate() - daysToMonday)\n return monday.toLocaleDateString('sv-SE')\n }\n\n private _getMondayOfWeek(date: string): string { const dateObj = new Date(date)\n const dayOfWeek = dateObj.getDay()\n const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1\n const monday = new Date(dateObj)\n monday.setDate(dateObj.getDate() - daysToMonday)\n return monday.toLocaleDateString('sv-SE')\n }\n\n private _getFirstDayOfMonth(date: string): string { const dateObj = new Date(date)\n return new Date(dateObj.getFullYear(), dateObj.getMonth(), 1).toLocaleDateString('sv-SE')\n }\n\n private _getFirstDayOfQuarter(date: string): string { const dateObj = new Date(date)\n const quarter = Math.floor(dateObj.getMonth() / 3)\n const firstMonthOfQuarter = quarter * 3\n return new Date(dateObj.getFullYear(), firstMonthOfQuarter, 1).toLocaleDateString('sv-SE')\n }\n\n private _getFirstDayOfYear(date: string): string { const dateObj = new Date(date)\n return new Date(dateObj.getFullYear(), 0, 1).toLocaleDateString('sv-SE')\n }\n\n private _normalizeDateByPeriodType(date: string, periodType: string): string { console.log('Normalizing date:', date, 'for periodType:', periodType)\n\n const dateObj = new Date(date)\n\n switch (periodType) { case 'DAY':\n console.log('DAY - returning original date:', date)\n return date // 그대로 사용\n case 'WEEK':\n // 해당 주의 월요일로 설정\n const dayOfWeek = dateObj.getDay()\n const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1 // 일요일이면 6일 전, 아니면 dayOfWeek - 1\n const monday = new Date(dateObj)\n monday.setDate(dateObj.getDate() - daysToMonday)\n const weeklyDate = monday.toLocaleDateString('sv-SE')\n console.log('WEEK - returning monday:', weeklyDate)\n return weeklyDate\n case 'MONTH':\n // 년-월 형식으로 설정 (예: \"2025-01\")\n const monthlyDate = `${dateObj.getFullYear()}-${String(dateObj.getMonth() + 1).padStart(2, '0')}`\n console.log('MONTH - returning year-month format:', monthlyDate)\n return monthlyDate\n case 'QUARTER':\n // 분기 형식으로 설정 (예: \"2025-Q1\")\n const quarter = Math.floor(dateObj.getMonth() / 3) + 1\n const quarterlyDate = `${dateObj.getFullYear()}-Q${quarter}`\n console.log('QUARTER - returning quarter format:', quarterlyDate)\n return quarterlyDate\n case 'YEAR':\n // 년도 형식으로 설정 (예: \"2025\")\n const yearlyDate = `${dateObj.getFullYear()}`\n console.log('YEAR - returning year format:', yearlyDate)\n return yearlyDate\n default:\n console.log('DEFAULT - returning original date:', date)\n return date // 기본값\n }\n }\n\n private _cancel() { // 편집 취소 로직\n this.editingCell = null\n this._loadData() // 원본 데이터로 복원\n }\n\n async pageInitialized(lifecycle: any) { // 기본값 설정 - 지난 1개월\n if (!this.startDate) { const today = new Date()\n const oneMonthAgo = new Date(today.getFullYear(), today.getMonth() - 1, today.getDate())\n this.startDate = oneMonthAgo.toLocaleDateString('sv-SE')\n }\n if (!this.endDate) { const today = new Date()\n this.endDate = today.toLocaleDateString('sv-SE')\n }\n\n // 페이지 초기화 시 자동으로 데이터 로드\n await this._loadData()\n }\n}\n"]}
1
+ {"version":3,"file":"kpi-metric-value-editor-page.js","sourceRoot":"","sources":["../../../client/pages/kpi-metric-value/kpi-metric-value-editor-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/elevated-button.js'\nimport '@material/web/textfield/outlined-text-field.js'\n\nimport { CommonButtonStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\n\ninterface KpiMetricValueData { metricId: string\n metricName: string\n periodType: string\n values: { [date: string]: { value: number | null; isDirty?: boolean } }\n}\n\ninterface EditorCell { date: string\n value: number | null\n isEditable: boolean\n isHighlighted: boolean\n}\n\n@customElement('kpi-metric-value-editor-page')\nexport class KpiMetricValueEditorPage extends localize(i18next)(ScopedElementsMixin(PageView)) { static styles = [\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host { display: flex;\n flex-direction: column;\n padding: 20px;\n overflow-x: auto;\n }\n\n .header { display: flex;\n gap: 16px;\n align-items: center;\n margin-bottom: 20px;\n padding: 16px;\n background: var(--md-sys-color-surface-container);\n border-radius: 8px;\n }\n\n .controls { display: flex;\n gap: 12px;\n align-items: center;\n }\n\n .table-container { flex: 1;\n overflow: auto;\n border: 1px solid var(--md-sys-color-outline);\n border-radius: 8px;\n }\n\n table { width: 100%;\n border-collapse: collapse;\n min-width: max-content;\n }\n\n th { background: var(--md-sys-color-surface-container-low);\n font-weight: 500;\n padding: 8px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n min-width: 80px;\n height: 120px;\n vertical-align: middle;\n }\n\n td { padding: 8px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n min-width: 80px;\n height: 60px;\n text-align: right;\n vertical-align: middle;\n }\n\n .metric-header { position: sticky;\n left: 0;\n top: 0;\n z-index: 3;\n }\n\n .metric-name { position: sticky;\n left: 0;\n background: var(--md-sys-color-surface);\n font-weight: 500;\n min-width: 200px;\n text-align: left;\n z-index: 2;\n }\n\n tr:hover { background: var(--md-sys-color-surface-container-high);\n }\n\n th.date-header { position: sticky;\n top: 0;\n z-index: 2;\n text-align: center;\n font-size: 11px;\n color: var(--md-sys-color-on-surface-variant);\n writing-mode: vertical-rl;\n text-orientation: mixed;\n min-height: 120px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n td.editable-cell { cursor: pointer;\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n\n td.editable-cell:hover { background: var(--md-sys-color-primary-container);\n }\n\n td.highlighted-cell { background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n font-weight: 500;\n }\n\n td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container);\n }\n\n td.disabled-cell { background: var(--md-sys-color-surface-container);\n color: var(--md-sys-color-on-surface-variant);\n cursor: not-allowed;\n }\n\n .value-input { width: 100%;\n text-align: center;\n border: none;\n background: transparent;\n color: inherit;\n font-size: 12px;\n padding: 2px;\n }\n\n .value-input:focus { outline: 2px solid var(--md-sys-color-primary);\n border-radius: 4px;\n }\n\n .period-type-badge { font-size: 10px;\n padding: 2px 6px;\n border-radius: 4px;\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n margin-left: 8px;\n }\n\n .loading { display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .error { color: var(--md-sys-color-error);\n padding: 16px;\n text-align: center;\n }\n\n .legend { display: flex;\n gap: 16px;\n margin-top: 16px;\n font-size: 12px;\n }\n\n .legend-item { display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .legend-color { width: 16px;\n height: 16px;\n border-radius: 2px;\n }\n `\n ]\n\n @property({ type: String }) org: string = ''\n @property({ type: String }) startDate: string = ''\n @property({ type: String }) endDate: string = ''\n\n @state() private metrics: KpiMetricValueData[] = []\n @state() private dates: string[] = []\n @state() private loading: boolean = false\n @state() private error: string = ''\n @state() private editingCell: { metricId: string; date: string } | null = null\n @state() private _existingValues: any[] = []\n\n get context() { return { title: i18next.t('title.kpi metric value editor'),\n actions: [\n { title: i18next.t('button.save'),\n action: this._saveValues.bind(this),\n ...CommonButtonStyles.save\n },\n { title: i18next.t('button.cancel'),\n action: this._cancel.bind(this),\n ...CommonButtonStyles.cancel\n }\n ]\n }\n }\n\n render() { if (this.loading) { return html`\n <div class=\"loading\">\n <md-icon>hourglass_empty</md-icon>\n <span>데이터를 불러오는 중...</span>\n </div>\n `\n }\n\n if (this.error) { return html`\n <div class=\"error\">\n <md-icon>error</md-icon>\n <span>${this.error}</span>\n </div>\n `\n }\n\n return html`\n <div class=\"header\">\n <div class=\"controls\">\n <md-outlined-text-field\n label=\"그룹\"\n .value=${this.org}\n @input=${(e: any) => (this.org = e.target.value)}\n style=\"width: 150px;\"\n ></md-outlined-text-field>\n\n <md-outlined-text-field\n label=\"시작일\"\n type=\"date\"\n .value=${this.startDate}\n @input=${(e: any) => (this.startDate = e.target.value)}\n style=\"width: 150px;\"\n ></md-outlined-text-field>\n\n <md-outlined-text-field\n label=\"종료일\"\n type=\"date\"\n .value=${this.endDate}\n @input=${(e: any) => (this.endDate = e.target.value)}\n style=\"width: 150px;\"\n ></md-outlined-text-field>\n\n <md-elevated-button @click=${this._loadData}>\n <md-icon slot=\"icon\">refresh</md-icon>\n 새로고침\n </md-elevated-button>\n </div>\n </div>\n\n <div class=\"table-container\">\n <table style=\"border-collapse: collapse; width: 100%;\">\n <thead>\n <tr>\n <th\n style=\"border: 1px solid #ccc; padding: 8px; background: #f5f5f5; min-width: 200px; left: 0; top: 0;\"\n class=\"metric-header\"\n >\n Metric명\n </th>\n ${this.dates.map(\n date => html`\n <th\n style=\"border: 1px solid #ccc; padding: 8px; background: #f5f5f5; min-width: 80px; position: sticky; top: 0;\"\n >\n ${this._formatDate(date)}\n </th>\n `\n )}\n </tr>\n </thead>\n <tbody>\n ${this.metrics.map(\n metric => html`\n <tr>\n <td\n style=\"border: 1px solid #ccc; padding: 8px; background: #fff; min-width: 200px;\"\n class=\"metric-name\"\n >\n ${metric.metricName}\n <span\n style=\"font-size: 10px; padding: 2px 6px; background: #e0e0e0; border-radius: 4px; margin-left: 8px;\"\n >${metric.periodType}</span\n >\n </td>\n ${this.dates.map(\n date => html`\n <td\n style=\"border: 1px solid #ccc; padding: 8px; background: #e3f2fd; text-align: center; min-width: 80px; cursor: pointer;\"\n @click=${() => this._startEdit(metric.metricId, date)}\n >\n ${this._renderCellContent(metric, date)}\n </td>\n `\n )}\n </tr>\n `\n )}\n </tbody>\n </table>\n </div>\n\n <div class=\"legend\">\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-primary-container);\"></div>\n <span>편집 가능</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-secondary-container);\"></div>\n <span>하이라이트 (PeriodType에 따라)</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-surface-container);\"></div>\n <span>편집 불가</span>\n </div>\n </div>\n `\n }\n\n private _renderCellContent(metric: KpiMetricValueData, date: string) { const isEditing = this.editingCell?.metricId === metric.metricId && this.editingCell?.date === date\n\n // periodType에 따라 값을 가져오는 방식 결정\n let value: number | null = null\n\n if (metric.periodType === 'DAY') { // DAY인 경우 해당 날짜의 값을 사용\n value = metric.values[date]?.value\n } else if (metric.periodType === 'WEEK') { // WEEK인 경우 해당 주의 월요일의 값을 사용\n const weekKey = this._getWeekKey(date)\n value = metric.values[weekKey]?.value\n } else if (metric.periodType === 'MONTH') { // MONTH인 경우 해당 월의 값을 사용\n const monthKey = this._getMonthKey(date)\n value = metric.values[monthKey]?.value\n } else if (metric.periodType === 'QUARTER') { // QUARTER인 경우 해당 분기의 값을 사용\n const quarterKey = this._getQuarterKey(date)\n value = metric.values[quarterKey]?.value\n } else if (metric.periodType === 'YEAR') { // YEAR인 경우 해당 연도의 값을 사용\n const yearKey = this._getYearKey(date)\n value = metric.values[yearKey]?.value\n } else { // 기본값: DAY와 동일\n value = metric.values[date]?.value\n }\n\n if (isEditing) { console.log('Rendering input for editing, value:', value)\n return html`\n <input\n type=\"number\"\n step=\"0.01\"\n .value=${(value || '').toString()}\n @blur=${(e: any) => this._finishEdit(metric.metricId, date, parseFloat(e.target.value) || 0)}\n @keydown=${(e: any) => e.key === 'Enter' && e.target.blur()}\n style=\"width: 100%; text-align: center; border: none; background: transparent;\"\n autofocus\n />\n `\n }\n\n return html`\n <div style=\"display: flex; flex-direction: column; gap: 2px;\">\n <span style=\"font-weight: 500; color: ${value !== null && value !== undefined ? 'inherit' : '#999'};\">\n ${value !== null && value !== undefined ? value.toLocaleString() : '클릭하여 입력'}\n </span>\n </div>\n `\n }\n\n private _formatDate(date: string): string { const d = new Date(date)\n return d.toLocaleDateString('ko-KR', { month: 'numeric', day: 'numeric' })\n }\n\n private _startEdit(metricId: string, date: string) { this.editingCell = { metricId, date }\n }\n\n private _finishEdit(metricId: string, date: string, value: number) { const metric = this.metrics.find(m => m.metricId === metricId)\n if (metric) { // periodType에 따라 저장할 키 결정\n let storageKey = date\n\n if (metric.periodType === 'WEEK') { storageKey = this._getWeekKey(date)\n } else if (metric.periodType === 'MONTH') { storageKey = this._getMonthKey(date)\n } else if (metric.periodType === 'QUARTER') { storageKey = this._getQuarterKey(date)\n } else if (metric.periodType === 'YEAR') { storageKey = this._getYearKey(date)\n }\n\n if (!metric.values[storageKey]) { metric.values[storageKey] = { value: 0, isDirty: false }\n }\n\n // 값이 변경되었는지 확인\n const originalValue = this._findExistingValue(metricId, storageKey)?.value\n const isChanged = originalValue !== value\n\n metric.values[storageKey].value = value\n metric.values[storageKey].isDirty = isChanged\n }\n this.editingCell = null\n }\n\n private async _loadData() { if (!this.startDate || !this.endDate) { this.error = '시작일, 종료일을 모두 입력해주세요.'\n return\n }\n\n this.loading = true\n this.error = ''\n\n try { // KPI Metric 목록 조회\n const metricsResponse = await client.query({ query: gql`\n query ($filters: [Filter!]) { kpiMetrics(filters: $filters) { items { id\n name\n periodType\n active\n }\n total\n }\n }\n `,\n variables: { filters: [{ name: 'active', operator: 'eq', value: true }]\n }\n })\n\n // KPI Metric Value 데이터 조회\n const valuesResponse = await client.query({ query: gql`\n query ($filters: [Filter!]) { kpiMetricValues(filters: $filters) { items { id\n metricId\n valueDate\n value\n org\n }\n total\n }\n }\n `,\n variables: { filters: [\n ...(this.org ? [{ name: 'org', operator: 'eq', value: this.org }] : []),\n { name: 'valueDate', operator: 'between', value: [this.startDate, this.endDate] }\n ]\n }\n })\n\n // 날짜 배열 생성\n this.dates = this._generateDateArray(this.startDate, this.endDate)\n\n // KPI Metric 목록을 기준으로 데이터 구성\n this.metrics = metricsResponse.data.kpiMetrics.items.map((metric: any) => ({ metricId: metric.id,\n metricName: metric.name,\n periodType: metric.periodType,\n values: {}\n }))\n\n // 기존 KPI Metric Value 데이터 저장\n this._existingValues = valuesResponse.data.kpiMetricValues.items\n\n // KPI Metric Value 데이터를 해당 Metric에 매핑\n valuesResponse.data.kpiMetricValues.items.forEach((value: any) => { const metric = this.metrics.find(m => m.metricId === value.metricId)\n if (metric) { metric.values[value.valueDate] = { value: value.value,\n isDirty: false\n }\n }\n })\n\n // KPI Metric Value가 없는 Metric도 빈 값으로 초기화\n this.metrics.forEach(metric => { this.dates.forEach(date => { if (!metric.values[date]) { metric.values[date] = { value: null, isDirty: false }\n }\n })\n })\n\n this.requestUpdate()\n } catch (error) { console.error('데이터 로드 중 오류:', error)\n this.error = '데이터를 불러오는 중 오류가 발생했습니다.'\n } finally { this.loading = false\n }\n }\n\n private _generateDateArray(startDate: string, endDate: string): string[] { const dates: string[] = []\n const start = new Date(startDate)\n const end = new Date(endDate)\n\n // 일별로 생성 (기본)\n for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) { dates.push(d.toLocaleDateString('sv-SE'))\n }\n\n return dates\n }\n\n private async _saveValues() { try { const patches: any[] = []\n\n this.metrics.forEach(metric => { Object.entries(metric.values).forEach(([date, data]) => { // dirty 상태인 데이터만 처리\n if (data.isDirty && data.value !== null && data.value !== undefined) { const existingValue = this._findExistingValue(metric.metricId, date)\n\n if (existingValue) { patches.push({ id: existingValue.id,\n value: data.value,\n org: this.org,\n cuFlag: 'M'\n })\n } else { console.log(\n 'Creating new value for metric:',\n metric.metricName,\n 'periodType:',\n metric.periodType,\n 'date:',\n date\n )\n const normalizedDate = this._normalizeDateByPeriodType(date, metric.periodType)\n console.log('Normalized date:', normalizedDate)\n patches.push({ metricId: metric.metricId,\n valueDate: normalizedDate,\n value: data.value,\n org: this.org,\n cuFlag: '+'\n })\n }\n }\n })\n })\n\n if (patches.length === 0) { notify({ message: '저장할 데이터가 없습니다.' })\n return\n }\n\n // 디버깅: patches 내용 확인\n console.log('Sending patches:', patches)\n\n // 단일 mutation으로 생성과 업데이트 처리\n const response = await client.mutate({ mutation: gql`\n mutation ($patches: [KpiMetricValuePatch!]!) { updateMultipleKpiMetricValue(patches: $patches) { id\n value\n valueDate\n metricId\n }\n }\n `,\n variables: { patches }\n })\n\n if (!response.errors) { // 저장 후 dirty 상태 해제\n response.data.updateMultipleKpiMetricValue.forEach((savedValue: any) => { const metric = this.metrics.find(m => m.metricId === savedValue.metricId)\n if (metric && metric.values[savedValue.valueDate]) { metric.values[savedValue.valueDate].isDirty = false\n }\n })\n\n notify({ message: 'KPI Metric 값이 성공적으로 저장되었습니다.' })\n this.requestUpdate()\n }\n } catch (error) { console.error('저장 중 오류:', error)\n notify({ message: '저장 중 오류가 발생했습니다.' })\n }\n }\n\n private _findExistingValue(metricId: string, date: string) { // 기존 로드된 KPI Metric Value 데이터에서 찾기\n return this._existingValues?.find((v: any) => v.metricId === metricId && v.valueDate === date)\n }\n\n private _getMonthKey(date: string): string { const dateObj = new Date(date)\n return `${dateObj.getFullYear()}-${String(dateObj.getMonth() + 1).padStart(2, '0')}`\n }\n\n private _getQuarterKey(date: string): string { const dateObj = new Date(date)\n const quarter = Math.floor(dateObj.getMonth() / 3) + 1\n return `${dateObj.getFullYear()}-Q${quarter}`\n }\n\n private _getYearKey(date: string): string { const dateObj = new Date(date)\n return `${dateObj.getFullYear()}`\n }\n\n private _getWeekKey(date: string): string { const dateObj = new Date(date)\n const dayOfWeek = dateObj.getDay()\n const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1\n const monday = new Date(dateObj)\n monday.setDate(dateObj.getDate() - daysToMonday)\n return monday.toLocaleDateString('sv-SE')\n }\n\n private _getMondayOfWeek(date: string): string { const dateObj = new Date(date)\n const dayOfWeek = dateObj.getDay()\n const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1\n const monday = new Date(dateObj)\n monday.setDate(dateObj.getDate() - daysToMonday)\n return monday.toLocaleDateString('sv-SE')\n }\n\n private _getFirstDayOfMonth(date: string): string { const dateObj = new Date(date)\n return new Date(dateObj.getFullYear(), dateObj.getMonth(), 1).toLocaleDateString('sv-SE')\n }\n\n private _getFirstDayOfQuarter(date: string): string { const dateObj = new Date(date)\n const quarter = Math.floor(dateObj.getMonth() / 3)\n const firstMonthOfQuarter = quarter * 3\n return new Date(dateObj.getFullYear(), firstMonthOfQuarter, 1).toLocaleDateString('sv-SE')\n }\n\n private _getFirstDayOfYear(date: string): string { const dateObj = new Date(date)\n return new Date(dateObj.getFullYear(), 0, 1).toLocaleDateString('sv-SE')\n }\n\n private _normalizeDateByPeriodType(date: string, periodType: string): string { console.log('Normalizing date:', date, 'for periodType:', periodType)\n\n const dateObj = new Date(date)\n\n switch (periodType) { case 'DAY':\n console.log('DAY - returning original date:', date)\n return date // 그대로 사용\n case 'WEEK':\n // 해당 주의 월요일로 설정\n const dayOfWeek = dateObj.getDay()\n const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1 // 일요일이면 6일 전, 아니면 dayOfWeek - 1\n const monday = new Date(dateObj)\n monday.setDate(dateObj.getDate() - daysToMonday)\n const weeklyDate = monday.toLocaleDateString('sv-SE')\n console.log('WEEK - returning monday:', weeklyDate)\n return weeklyDate\n case 'MONTH':\n // 년-월 형식으로 설정 (예: \"2025-01\")\n const monthlyDate = `${dateObj.getFullYear()}-${String(dateObj.getMonth() + 1).padStart(2, '0')}`\n console.log('MONTH - returning year-month format:', monthlyDate)\n return monthlyDate\n case 'QUARTER':\n // 분기 형식으로 설정 (예: \"2025-Q1\")\n const quarter = Math.floor(dateObj.getMonth() / 3) + 1\n const quarterlyDate = `${dateObj.getFullYear()}-Q${quarter}`\n console.log('QUARTER - returning quarter format:', quarterlyDate)\n return quarterlyDate\n case 'YEAR':\n // 년도 형식으로 설정 (예: \"2025\")\n const yearlyDate = `${dateObj.getFullYear()}`\n console.log('YEAR - returning year format:', yearlyDate)\n return yearlyDate\n default:\n console.log('DEFAULT - returning original date:', date)\n return date // 기본값\n }\n }\n\n private _cancel() { // 편집 취소 로직\n this.editingCell = null\n this._loadData() // 원본 데이터로 복원\n }\n\n async pageInitialized(lifecycle: any) { // 기본값 설정 - 지난 1개월\n if (!this.startDate) { const today = new Date()\n const oneMonthAgo = new Date(today.getFullYear(), today.getMonth() - 1, today.getDate())\n this.startDate = oneMonthAgo.toLocaleDateString('sv-SE')\n }\n if (!this.endDate) { const today = new Date()\n this.endDate = today.toLocaleDateString('sv-SE')\n }\n\n // 페이지 초기화 시 자동으로 데이터 로드\n await this._loadData()\n }\n}\n"]}
@@ -127,7 +127,7 @@ let KpiStatisticEditorPage = class KpiStatisticEditorPage extends localize(i18ne
127
127
  color: var(--md-sys-color-on-primary-container);
128
128
  }
129
129
 
130
- td.editable-cell:hover { background: var(--md-sys-color-primary-container-high);
130
+ td.editable-cell:hover { background: var(--md-sys-color-primary-container);
131
131
  }
132
132
 
133
133
  td.highlighted-cell { background: var(--md-sys-color-secondary-container);
@@ -135,7 +135,7 @@ let KpiStatisticEditorPage = class KpiStatisticEditorPage extends localize(i18ne
135
135
  font-weight: 500;
136
136
  }
137
137
 
138
- td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container-high);
138
+ td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container);
139
139
  }
140
140
 
141
141
  td.disabled-cell { background: var(--md-sys-color-surface-container);
@@ -1 +1 @@
1
- {"version":3,"file":"kpi-statistic-editor-page.js","sourceRoot":"","sources":["../../../client/pages/kpi-statistic/kpi-statistic-editor-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/elevated-button.js'\nimport '@material/web/textfield/outlined-text-field.js'\n\nimport { CommonButtonStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\n\ninterface KpiStatisticData { kpi: { id: string\n name: string\n }\n valueDate: string\n periodType: string\n statistics: { count?: number\n sum?: number\n range?: number\n mean?: number\n median?: number\n minimum?: number\n maximum?: number\n standardDeviation?: number\n variance?: number\n percentile25?: number\n percentile75?: number\n iqr?: number\n lowerFence?: number\n upperFence?: number\n isDirty?: boolean\n }\n}\n\ninterface EditorCell { field: string\n value: number | null\n isEditable: boolean\n isHighlighted: boolean\n}\n\n@customElement('kpi-statistic-editor-page')\nexport class KpiStatisticEditorPage extends localize(i18next)(ScopedElementsMixin(PageView)) { static styles = [\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host { display: flex;\n flex-direction: column;\n padding: 20px;\n overflow-x: auto;\n }\n\n .header { display: flex;\n gap: 16px;\n align-items: center;\n margin-bottom: 20px;\n padding: 16px;\n background: var(--md-sys-color-surface-container);\n border-radius: 8px;\n }\n\n .controls { display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n }\n\n .table-container { flex: 1;\n overflow: auto;\n border: 1px solid var(--md-sys-color-outline);\n border-radius: 8px;\n }\n\n table { width: 100%;\n border-collapse: collapse;\n min-width: max-content;\n }\n\n th { background: var(--md-sys-color-surface-container-low);\n font-weight: 500;\n padding: 8px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n min-width: 120px;\n height: 60px;\n vertical-align: middle;\n text-align: center;\n }\n\n td { padding: 8px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n min-width: 120px;\n height: 60px;\n text-align: center;\n vertical-align: middle;\n }\n\n .kpi-header { position: sticky;\n left: 0;\n top: 0;\n z-index: 3;\n min-width: 200px;\n text-align: left;\n }\n\n .field-header { position: sticky;\n left: 0;\n top: 0;\n z-index: 2;\n min-width: 200px;\n text-align: center;\n }\n\n .kpi-name { position: sticky;\n left: 0;\n background: var(--md-sys-color-surface);\n font-weight: 500;\n min-width: 200px;\n text-align: left;\n z-index: 2;\n }\n\n tr:hover { background: var(--md-sys-color-surface-container-high);\n }\n\n td.editable-cell { cursor: pointer;\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n\n td.editable-cell:hover { background: var(--md-sys-color-primary-container-high);\n }\n\n td.highlighted-cell { background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n font-weight: 500;\n }\n\n td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container-high);\n }\n\n td.disabled-cell { background: var(--md-sys-color-surface-container);\n color: var(--md-sys-color-on-surface-variant);\n cursor: not-allowed;\n }\n\n .value-input { width: 100%;\n text-align: center;\n border: none;\n background: transparent;\n color: inherit;\n font-size: 12px;\n padding: 2px;\n }\n\n .value-input:focus { outline: 2px solid var(--md-sys-color-primary);\n border-radius: 4px;\n }\n\n .period-badge { font-size: 10px;\n padding: 2px 6px;\n border-radius: 4px;\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n margin-left: 8px;\n }\n\n .loading { display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .error { color: var(--md-sys-color-error);\n padding: 16px;\n text-align: center;\n }\n\n .legend { display: flex;\n gap: 16px;\n margin-top: 16px;\n font-size: 12px;\n }\n\n .legend-item { display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .legend-color { width: 16px;\n height: 16px;\n border-radius: 2px;\n }\n\n .field-group { display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .field-name { font-size: 10px;\n color: var(--md-sys-color-on-surface-variant);\n font-weight: 500;\n }\n\n .field-value { font-size: 12px;\n font-weight: 500;\n }\n `\n ]\n\n @property({ type: String }) periodType: string = 'MONTH'\n @property({ type: String }) valueDate: string = ''\n @property({ type: String }) targetDate: string = '' // 기준 날짜 (예: 2025-08-03)\n\n @state() private kpis: KpiStatisticData[] = []\n @state() private loading: boolean = false\n @state() private error: string = ''\n @state() private editingCell: { kpi: { id: string }; field: string } | null = null\n @state() private _existingStatistics: any[] = []\n\n // 통계 필드 정의\n private readonly statisticFields = [\n { name: 'count', label: 'Count', group: 'basic' },\n { name: 'sum', label: 'Sum', group: 'basic' },\n { name: 'range', label: 'Range', group: 'basic' },\n { name: 'mean', label: 'Mean', group: 'central' },\n { name: 'median', label: 'Median', group: 'central' },\n { name: 'minimum', label: 'Min', group: 'range' },\n { name: 'maximum', label: 'Max', group: 'range' },\n { name: 'standardDeviation', label: 'Std Dev', group: 'dispersion' },\n { name: 'variance', label: 'Variance', group: 'dispersion' },\n { name: 'percentile25', label: 'P25', group: 'percentile' },\n { name: 'percentile75', label: 'P75', group: 'percentile' },\n { name: 'iqr', label: 'IQR', group: 'percentile' },\n { name: 'lowerFence', label: 'Lower Fence', group: 'fence' },\n { name: 'upperFence', label: 'Upper Fence', group: 'fence' }\n ]\n\n get context() { return { title: i18next.t('title.kpi statistic editor'),\n actions: [\n { title: i18next.t('button.save'),\n action: this._saveStatistics.bind(this),\n ...CommonButtonStyles.save\n },\n { title: i18next.t('button.cancel'),\n action: this._cancel.bind(this),\n ...CommonButtonStyles.cancel\n }\n ]\n }\n }\n\n render() { if (this.loading) { return html`\n <div class=\"loading\">\n <md-icon>hourglass_empty</md-icon>\n <span>데이터를 불러오는 중...</span>\n </div>\n `\n }\n\n if (this.error) { return html`\n <div class=\"error\">\n <md-icon>error</md-icon>\n <span>${this.error}</span>\n </div>\n `\n }\n\n return html`\n <div class=\"header\">\n <div class=\"controls\">\n <md-outlined-text-field\n label=\"기간 유형\"\n .value=${this.periodType}\n @input=${(e: any) => this._onPeriodChange(e.target.value)}\n style=\"width: 120px;\"\n ></md-outlined-text-field>\n\n <md-outlined-text-field\n label=\"기준 날짜\"\n type=\"date\"\n .value=${this.targetDate}\n @input=${(e: any) => this._onTargetDateChange(e.target.value)}\n style=\"width: 150px;\"\n ></md-outlined-text-field>\n\n <md-outlined-text-field\n label=\"값 날짜\"\n .value=${this.valueDate}\n @input=${(e: any) => (this.valueDate = e.target.value)}\n style=\"width: 150px;\"\n readonly\n ></md-outlined-text-field>\n\n <md-elevated-button @click=${this._loadData}>\n <md-icon slot=\"icon\">refresh</md-icon>\n 새로고침\n </md-elevated-button>\n </div>\n </div>\n\n <div class=\"table-container\">\n <table>\n <thead>\n <tr>\n <th class=\"kpi-header\">KPI명</th>\n ${this.statisticFields.map(\n field => html`\n <th class=\"field-header\">\n <div class=\"field-group\">\n <div class=\"field-name\">${field.label}</div>\n <div class=\"field-value\">${field.name}</div>\n </div>\n </th>\n `\n )}\n </tr>\n </thead>\n <tbody>\n ${this.kpis.map(\n kpi => html`\n <tr>\n <td class=\"kpi-name\">\n ${kpi.kpi.name}\n <span class=\"period-badge\">${kpi.periodType}</span>\n </td>\n ${this.statisticFields.map(\n field => html`\n <td\n class=${this._getCellClass(kpi, field.name)}\n @click=${() => this._startEdit(kpi.kpi.id, field.name)}\n >\n ${this._renderCellContent(kpi, field.name)}\n </td>\n `\n )}\n </tr>\n `\n )}\n </tbody>\n </table>\n </div>\n\n <div class=\"legend\">\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-primary-container);\"></div>\n <span>편집 가능</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-secondary-container);\"></div>\n <span>하이라이트 (중요 필드)</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-surface-container);\"></div>\n <span>편집 불가</span>\n </div>\n </div>\n `\n }\n\n private _getCellClass(kpi: KpiStatisticData, fieldName: string): string { const isEditable = this._isFieldEditable(fieldName)\n const isHighlighted = this._isFieldHighlighted(fieldName)\n\n if (!isEditable) { return 'disabled-cell'\n }\n if (isHighlighted) { return 'highlighted-cell'\n }\n return 'editable-cell'\n }\n\n private _isFieldEditable(fieldName: string): boolean { // 모든 필드를 편집 가능하게 설정 (필요에 따라 제한 가능)\n return true\n }\n\n private _isFieldHighlighted(fieldName: string): boolean { // 중요 필드들을 하이라이트\n const importantFields = ['count', 'mean', 'median', 'minimum', 'maximum', 'standardDeviation']\n return importantFields.includes(fieldName)\n }\n\n private _renderCellContent(kpi: KpiStatisticData, fieldName: string) { const isEditing = this.editingCell?.kpi?.id === kpi.kpi.id && this.editingCell?.field === fieldName\n const value = kpi.statistics[fieldName]\n\n if (isEditing) { return html`\n <input\n class=\"value-input\"\n type=\"number\"\n step=\"0.01\"\n .value=${(value || '').toString()}\n @blur=${(e: any) => this._finishEdit(kpi.kpi.id, fieldName, parseFloat(e.target.value) || null)}\n @keydown=${(e: any) => e.key === 'Enter' && e.target.blur()}\n autofocus\n />\n `\n }\n\n return html`\n <span style=\"color: ${value !== null && value !== undefined ? 'inherit' : '#999'};\">\n ${value !== null && value !== undefined ? value.toLocaleString() : '클릭하여 입력'}\n </span>\n `\n }\n\n private _startEdit(kpiId: string, fieldName: string) { this.editingCell = { kpi: { id: kpiId }, field: fieldName }\n }\n\n private _finishEdit(kpiId: string, fieldName: string, value: number | null) { const kpi = this.kpis.find(k => k.kpi.id === kpiId)\n if (kpi) { const originalValue = this._findExistingStatistic(kpiId)?.[fieldName]\n const isChanged = originalValue !== value\n\n kpi.statistics[fieldName] = value\n kpi.statistics.isDirty = isChanged\n }\n this.editingCell = null\n }\n\n private async _loadData() { if (!this.valueDate) { this.error = '값 날짜를 입력해주세요.'\n return\n }\n\n this.loading = true\n this.error = ''\n\n try { // KPI 목록 조회\n const kpisResponse = await client.query({ query: gql`\n query ($filters: [Filter!]) { kpis(filters: $filters) { items { id\n name\n periodType\n active\n category: parent { id\n name\n }\n }\n total\n }\n }\n `,\n variables: { filters: [{ name: 'active', operator: 'eq', value: true }]\n }\n })\n\n // 기존 KPI Statistic 데이터 조회\n const statisticsResponse = await client.query({ query: gql`\n query ($filters: [Filter!]) { kpiStatistics(filters: $filters) { items { id\n kpi { id\n name\n }\n valueDate\n periodType\n count\n sum\n range\n mean\n median\n minimum\n maximum\n standardDeviation\n variance\n percentile25\n percentile75\n iqr\n lowerFence\n upperFence\n additionalStatistics\n metadata\n }\n total\n }\n }\n `,\n variables: { filters: [\n { name: 'valueDate', operator: 'eq', value: this.valueDate },\n { name: 'periodType', operator: 'eq', value: this.periodType }\n ]\n }\n })\n\n // KPI 목록을 기준으로 데이터 구성 (카테고리별로 필터링)\n console.log('KPI 원본 데이터:', kpisResponse.data.kpis.items)\n\n const filteredKpis = kpisResponse.data.kpis.items\n console.log('모든 KPI 포함:', filteredKpis)\n\n console.log('필터링된 KPI:', filteredKpis)\n\n this.kpis = filteredKpis.map((kpi: any) => ({ kpi: kpi,\n valueDate: this.valueDate,\n periodType: this.periodType,\n statistics: { count: null,\n sum: null,\n range: null,\n mean: null,\n median: null,\n minimum: null,\n maximum: null,\n standardDeviation: null,\n variance: null,\n percentile25: null,\n percentile75: null,\n iqr: null,\n lowerFence: null,\n upperFence: null,\n isDirty: false\n }\n }))\n\n // 기존 KPI Statistic 데이터 저장\n this._existingStatistics = statisticsResponse.data.kpiStatistics.items\n console.log('기존 통계 데이터:', this._existingStatistics)\n\n // 기존 통계 데이터를 해당 KPI에 매핑\n statisticsResponse.data.kpiStatistics.items.forEach((statistic: any) => { const kpi = this.kpis.find(k => k.kpi.id === statistic.kpi.id) // KPI ID로 매칭\n console.log(`통계 데이터 매핑: statistic.kpi.id=${statistic.kpi.id}, 찾은 KPI:`, kpi?.kpi.name || '없음')\n if (kpi) { kpi.statistics = { count: statistic.count,\n sum: statistic.sum,\n range: statistic.range,\n mean: statistic.mean,\n median: statistic.median,\n minimum: statistic.minimum,\n maximum: statistic.maximum,\n standardDeviation: statistic.standardDeviation,\n variance: statistic.variance,\n percentile25: statistic.percentile25,\n percentile75: statistic.percentile75,\n iqr: statistic.iqr,\n lowerFence: statistic.lowerFence,\n upperFence: statistic.upperFence,\n isDirty: false\n }\n }\n })\n\n console.log('KPI 총 개수:', kpisResponse.data.kpis.total)\n console.log('KPI 목록:', kpisResponse.data.kpis.items)\n console.log('기존 통계 데이터:', this._existingStatistics)\n console.log('구성된 KPI 통계 데이터:', this.kpis)\n console.log('최종 KPI 배열 길이:', this.kpis.length)\n\n this.requestUpdate()\n } catch (error) { console.error('데이터 로드 중 오류:', error)\n this.error = '데이터를 불러오는 중 오류가 발생했습니다.'\n } finally { this.loading = false\n }\n }\n\n private async _saveStatistics() { try { const patches: any[] = []\n\n this.kpis.forEach(kpi => { // dirty 상태인 데이터만 처리\n if (kpi.statistics.isDirty) { const existingStatistic = this._findExistingStatistic(kpi.kpi.id)\n\n if (existingStatistic) { // 기존 데이터 업데이트\n const { isDirty, ...statisticsWithoutDirty } = kpi.statistics\n patches.push({ id: existingStatistic.id,\n ...statisticsWithoutDirty,\n cuFlag: 'M'\n })\n } else { // 새로운 데이터 생성\n const { isDirty, ...statisticsWithoutDirty } = kpi.statistics\n patches.push({ kpi: { id: kpi.kpi.id\n },\n valueDate: kpi.valueDate,\n periodType: kpi.periodType,\n ...statisticsWithoutDirty,\n additionalStatistics: {},\n metadata: { calculationMethod: 'manual',\n lastCalculated: new Date(),\n dataCount: kpi.statistics.count || 0\n },\n cuFlag: '+'\n })\n }\n }\n })\n\n if (patches.length === 0) { notify({ message: '저장할 데이터가 없습니다.' })\n return\n }\n\n const response = await client.mutate({ mutation: gql`\n mutation ($patches: [KpiStatisticPatch!]!) { updateMultipleKpiStatistic(patches: $patches) { id\n kpi { id\n name\n }\n valueDate\n periodType\n }\n }\n `,\n variables: { patches }\n })\n\n if (!response.errors) { // 저장 후 dirty 상태 해제\n this.kpis.forEach(kpi => { kpi.statistics.isDirty = false\n })\n\n notify({ message: 'KPI 통계값이 성공적으로 저장되었습니다.' })\n this.requestUpdate()\n }\n } catch (error) { console.error('저장 중 오류:', error)\n notify({ message: '저장 중 오류가 발생했습니다.' })\n }\n }\n\n private _findExistingStatistic(kpiId: string) { return this._existingStatistics?.find((s: any) => s.kpi === kpiId)\n }\n\n private _onTargetDateChange(targetDate: string) { this.targetDate = targetDate\n this._calculateDateRange()\n }\n\n private _onPeriodChange(periodType: string) { this.periodType = periodType\n this._calculateDateRange()\n }\n\n private _calculateDateRange() { if (!this.targetDate || !this.periodType) return\n\n const target = new Date(this.targetDate)\n let valueDate: string\n\n switch (this.periodType) { case 'DAY':\n valueDate = target.toISOString().split('T')[0]\n break\n case 'WEEK':\n // 해당 주의 월요일\n const dayOfWeek = target.getDay()\n const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1\n const monday = new Date(target)\n monday.setDate(target.getDate() - daysToMonday)\n valueDate = monday.toISOString().split('T')[0]\n break\n case 'MONTH':\n valueDate = `${target.getFullYear()}-${String(target.getMonth() + 1).padStart(2, '0')}`\n break\n case 'QUARTER':\n const quarter = Math.floor(target.getMonth() / 3) + 1\n valueDate = `${target.getFullYear()}-Q${quarter}`\n break\n case 'YEAR':\n valueDate = target.getFullYear().toString()\n break\n default:\n valueDate = target.toISOString().split('T')[0]\n }\n\n this.valueDate = valueDate\n }\n\n private _cancel() { this.editingCell = null\n this._loadData() // 원본 데이터로 복원\n }\n\n async pageInitialized(lifecycle: any) { // 기본값 설정 - 현재 날짜를 기준으로\n if (!this.targetDate) { this.targetDate = new Date().toLocaleDateString('sv-SE')\n }\n\n // 기간 유형에 따라 날짜 범위 계산\n this._calculateDateRange()\n\n await this._loadData()\n }\n}\n"]}
1
+ {"version":3,"file":"kpi-statistic-editor-page.js","sourceRoot":"","sources":["../../../client/pages/kpi-statistic/kpi-statistic-editor-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/elevated-button.js'\nimport '@material/web/textfield/outlined-text-field.js'\n\nimport { CommonButtonStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify } from '@operato/layout'\nimport gql from 'graphql-tag'\n\ninterface KpiStatisticData { kpi: { id: string\n name: string\n }\n valueDate: string\n periodType: string\n statistics: { count?: number\n sum?: number\n range?: number\n mean?: number\n median?: number\n minimum?: number\n maximum?: number\n standardDeviation?: number\n variance?: number\n percentile25?: number\n percentile75?: number\n iqr?: number\n lowerFence?: number\n upperFence?: number\n isDirty?: boolean\n }\n}\n\ninterface EditorCell { field: string\n value: number | null\n isEditable: boolean\n isHighlighted: boolean\n}\n\n@customElement('kpi-statistic-editor-page')\nexport class KpiStatisticEditorPage extends localize(i18next)(ScopedElementsMixin(PageView)) { static styles = [\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host { display: flex;\n flex-direction: column;\n padding: 20px;\n overflow-x: auto;\n }\n\n .header { display: flex;\n gap: 16px;\n align-items: center;\n margin-bottom: 20px;\n padding: 16px;\n background: var(--md-sys-color-surface-container);\n border-radius: 8px;\n }\n\n .controls { display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n }\n\n .table-container { flex: 1;\n overflow: auto;\n border: 1px solid var(--md-sys-color-outline);\n border-radius: 8px;\n }\n\n table { width: 100%;\n border-collapse: collapse;\n min-width: max-content;\n }\n\n th { background: var(--md-sys-color-surface-container-low);\n font-weight: 500;\n padding: 8px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n min-width: 120px;\n height: 60px;\n vertical-align: middle;\n text-align: center;\n }\n\n td { padding: 8px 12px;\n border: 1px solid var(--md-sys-color-outline-variant);\n min-width: 120px;\n height: 60px;\n text-align: center;\n vertical-align: middle;\n }\n\n .kpi-header { position: sticky;\n left: 0;\n top: 0;\n z-index: 3;\n min-width: 200px;\n text-align: left;\n }\n\n .field-header { position: sticky;\n left: 0;\n top: 0;\n z-index: 2;\n min-width: 200px;\n text-align: center;\n }\n\n .kpi-name { position: sticky;\n left: 0;\n background: var(--md-sys-color-surface);\n font-weight: 500;\n min-width: 200px;\n text-align: left;\n z-index: 2;\n }\n\n tr:hover { background: var(--md-sys-color-surface-container-high);\n }\n\n td.editable-cell { cursor: pointer;\n background: var(--md-sys-color-primary-container);\n color: var(--md-sys-color-on-primary-container);\n }\n\n td.editable-cell:hover { background: var(--md-sys-color-primary-container);\n }\n\n td.highlighted-cell { background: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n font-weight: 500;\n }\n\n td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container);\n }\n\n td.disabled-cell { background: var(--md-sys-color-surface-container);\n color: var(--md-sys-color-on-surface-variant);\n cursor: not-allowed;\n }\n\n .value-input { width: 100%;\n text-align: center;\n border: none;\n background: transparent;\n color: inherit;\n font-size: 12px;\n padding: 2px;\n }\n\n .value-input:focus { outline: 2px solid var(--md-sys-color-primary);\n border-radius: 4px;\n }\n\n .period-badge { font-size: 10px;\n padding: 2px 6px;\n border-radius: 4px;\n background: var(--md-sys-color-tertiary-container);\n color: var(--md-sys-color-on-tertiary-container);\n margin-left: 8px;\n }\n\n .loading { display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n color: var(--md-sys-color-on-surface-variant);\n }\n\n .error { color: var(--md-sys-color-error);\n padding: 16px;\n text-align: center;\n }\n\n .legend { display: flex;\n gap: 16px;\n margin-top: 16px;\n font-size: 12px;\n }\n\n .legend-item { display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .legend-color { width: 16px;\n height: 16px;\n border-radius: 2px;\n }\n\n .field-group { display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .field-name { font-size: 10px;\n color: var(--md-sys-color-on-surface-variant);\n font-weight: 500;\n }\n\n .field-value { font-size: 12px;\n font-weight: 500;\n }\n `\n ]\n\n @property({ type: String }) periodType: string = 'MONTH'\n @property({ type: String }) valueDate: string = ''\n @property({ type: String }) targetDate: string = '' // 기준 날짜 (예: 2025-08-03)\n\n @state() private kpis: KpiStatisticData[] = []\n @state() private loading: boolean = false\n @state() private error: string = ''\n @state() private editingCell: { kpi: { id: string }; field: string } | null = null\n @state() private _existingStatistics: any[] = []\n\n // 통계 필드 정의\n private readonly statisticFields = [\n { name: 'count', label: 'Count', group: 'basic' },\n { name: 'sum', label: 'Sum', group: 'basic' },\n { name: 'range', label: 'Range', group: 'basic' },\n { name: 'mean', label: 'Mean', group: 'central' },\n { name: 'median', label: 'Median', group: 'central' },\n { name: 'minimum', label: 'Min', group: 'range' },\n { name: 'maximum', label: 'Max', group: 'range' },\n { name: 'standardDeviation', label: 'Std Dev', group: 'dispersion' },\n { name: 'variance', label: 'Variance', group: 'dispersion' },\n { name: 'percentile25', label: 'P25', group: 'percentile' },\n { name: 'percentile75', label: 'P75', group: 'percentile' },\n { name: 'iqr', label: 'IQR', group: 'percentile' },\n { name: 'lowerFence', label: 'Lower Fence', group: 'fence' },\n { name: 'upperFence', label: 'Upper Fence', group: 'fence' }\n ]\n\n get context() { return { title: i18next.t('title.kpi statistic editor'),\n actions: [\n { title: i18next.t('button.save'),\n action: this._saveStatistics.bind(this),\n ...CommonButtonStyles.save\n },\n { title: i18next.t('button.cancel'),\n action: this._cancel.bind(this),\n ...CommonButtonStyles.cancel\n }\n ]\n }\n }\n\n render() { if (this.loading) { return html`\n <div class=\"loading\">\n <md-icon>hourglass_empty</md-icon>\n <span>데이터를 불러오는 중...</span>\n </div>\n `\n }\n\n if (this.error) { return html`\n <div class=\"error\">\n <md-icon>error</md-icon>\n <span>${this.error}</span>\n </div>\n `\n }\n\n return html`\n <div class=\"header\">\n <div class=\"controls\">\n <md-outlined-text-field\n label=\"기간 유형\"\n .value=${this.periodType}\n @input=${(e: any) => this._onPeriodChange(e.target.value)}\n style=\"width: 120px;\"\n ></md-outlined-text-field>\n\n <md-outlined-text-field\n label=\"기준 날짜\"\n type=\"date\"\n .value=${this.targetDate}\n @input=${(e: any) => this._onTargetDateChange(e.target.value)}\n style=\"width: 150px;\"\n ></md-outlined-text-field>\n\n <md-outlined-text-field\n label=\"값 날짜\"\n .value=${this.valueDate}\n @input=${(e: any) => (this.valueDate = e.target.value)}\n style=\"width: 150px;\"\n readonly\n ></md-outlined-text-field>\n\n <md-elevated-button @click=${this._loadData}>\n <md-icon slot=\"icon\">refresh</md-icon>\n 새로고침\n </md-elevated-button>\n </div>\n </div>\n\n <div class=\"table-container\">\n <table>\n <thead>\n <tr>\n <th class=\"kpi-header\">KPI명</th>\n ${this.statisticFields.map(\n field => html`\n <th class=\"field-header\">\n <div class=\"field-group\">\n <div class=\"field-name\">${field.label}</div>\n <div class=\"field-value\">${field.name}</div>\n </div>\n </th>\n `\n )}\n </tr>\n </thead>\n <tbody>\n ${this.kpis.map(\n kpi => html`\n <tr>\n <td class=\"kpi-name\">\n ${kpi.kpi.name}\n <span class=\"period-badge\">${kpi.periodType}</span>\n </td>\n ${this.statisticFields.map(\n field => html`\n <td\n class=${this._getCellClass(kpi, field.name)}\n @click=${() => this._startEdit(kpi.kpi.id, field.name)}\n >\n ${this._renderCellContent(kpi, field.name)}\n </td>\n `\n )}\n </tr>\n `\n )}\n </tbody>\n </table>\n </div>\n\n <div class=\"legend\">\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-primary-container);\"></div>\n <span>편집 가능</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-secondary-container);\"></div>\n <span>하이라이트 (중요 필드)</span>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-color\" style=\"background: var(--md-sys-color-surface-container);\"></div>\n <span>편집 불가</span>\n </div>\n </div>\n `\n }\n\n private _getCellClass(kpi: KpiStatisticData, fieldName: string): string { const isEditable = this._isFieldEditable(fieldName)\n const isHighlighted = this._isFieldHighlighted(fieldName)\n\n if (!isEditable) { return 'disabled-cell'\n }\n if (isHighlighted) { return 'highlighted-cell'\n }\n return 'editable-cell'\n }\n\n private _isFieldEditable(fieldName: string): boolean { // 모든 필드를 편집 가능하게 설정 (필요에 따라 제한 가능)\n return true\n }\n\n private _isFieldHighlighted(fieldName: string): boolean { // 중요 필드들을 하이라이트\n const importantFields = ['count', 'mean', 'median', 'minimum', 'maximum', 'standardDeviation']\n return importantFields.includes(fieldName)\n }\n\n private _renderCellContent(kpi: KpiStatisticData, fieldName: string) { const isEditing = this.editingCell?.kpi?.id === kpi.kpi.id && this.editingCell?.field === fieldName\n const value = kpi.statistics[fieldName]\n\n if (isEditing) { return html`\n <input\n class=\"value-input\"\n type=\"number\"\n step=\"0.01\"\n .value=${(value || '').toString()}\n @blur=${(e: any) => this._finishEdit(kpi.kpi.id, fieldName, parseFloat(e.target.value) || null)}\n @keydown=${(e: any) => e.key === 'Enter' && e.target.blur()}\n autofocus\n />\n `\n }\n\n return html`\n <span style=\"color: ${value !== null && value !== undefined ? 'inherit' : '#999'};\">\n ${value !== null && value !== undefined ? value.toLocaleString() : '클릭하여 입력'}\n </span>\n `\n }\n\n private _startEdit(kpiId: string, fieldName: string) { this.editingCell = { kpi: { id: kpiId }, field: fieldName }\n }\n\n private _finishEdit(kpiId: string, fieldName: string, value: number | null) { const kpi = this.kpis.find(k => k.kpi.id === kpiId)\n if (kpi) { const originalValue = this._findExistingStatistic(kpiId)?.[fieldName]\n const isChanged = originalValue !== value\n\n kpi.statistics[fieldName] = value\n kpi.statistics.isDirty = isChanged\n }\n this.editingCell = null\n }\n\n private async _loadData() { if (!this.valueDate) { this.error = '값 날짜를 입력해주세요.'\n return\n }\n\n this.loading = true\n this.error = ''\n\n try { // KPI 목록 조회\n const kpisResponse = await client.query({ query: gql`\n query ($filters: [Filter!]) { kpis(filters: $filters) { items { id\n name\n periodType\n active\n category: parent { id\n name\n }\n }\n total\n }\n }\n `,\n variables: { filters: [{ name: 'active', operator: 'eq', value: true }]\n }\n })\n\n // 기존 KPI Statistic 데이터 조회\n const statisticsResponse = await client.query({ query: gql`\n query ($filters: [Filter!]) { kpiStatistics(filters: $filters) { items { id\n kpi { id\n name\n }\n valueDate\n periodType\n count\n sum\n range\n mean\n median\n minimum\n maximum\n standardDeviation\n variance\n percentile25\n percentile75\n iqr\n lowerFence\n upperFence\n additionalStatistics\n metadata\n }\n total\n }\n }\n `,\n variables: { filters: [\n { name: 'valueDate', operator: 'eq', value: this.valueDate },\n { name: 'periodType', operator: 'eq', value: this.periodType }\n ]\n }\n })\n\n // KPI 목록을 기준으로 데이터 구성 (카테고리별로 필터링)\n console.log('KPI 원본 데이터:', kpisResponse.data.kpis.items)\n\n const filteredKpis = kpisResponse.data.kpis.items\n console.log('모든 KPI 포함:', filteredKpis)\n\n console.log('필터링된 KPI:', filteredKpis)\n\n this.kpis = filteredKpis.map((kpi: any) => ({ kpi: kpi,\n valueDate: this.valueDate,\n periodType: this.periodType,\n statistics: { count: null,\n sum: null,\n range: null,\n mean: null,\n median: null,\n minimum: null,\n maximum: null,\n standardDeviation: null,\n variance: null,\n percentile25: null,\n percentile75: null,\n iqr: null,\n lowerFence: null,\n upperFence: null,\n isDirty: false\n }\n }))\n\n // 기존 KPI Statistic 데이터 저장\n this._existingStatistics = statisticsResponse.data.kpiStatistics.items\n console.log('기존 통계 데이터:', this._existingStatistics)\n\n // 기존 통계 데이터를 해당 KPI에 매핑\n statisticsResponse.data.kpiStatistics.items.forEach((statistic: any) => { const kpi = this.kpis.find(k => k.kpi.id === statistic.kpi.id) // KPI ID로 매칭\n console.log(`통계 데이터 매핑: statistic.kpi.id=${statistic.kpi.id}, 찾은 KPI:`, kpi?.kpi.name || '없음')\n if (kpi) { kpi.statistics = { count: statistic.count,\n sum: statistic.sum,\n range: statistic.range,\n mean: statistic.mean,\n median: statistic.median,\n minimum: statistic.minimum,\n maximum: statistic.maximum,\n standardDeviation: statistic.standardDeviation,\n variance: statistic.variance,\n percentile25: statistic.percentile25,\n percentile75: statistic.percentile75,\n iqr: statistic.iqr,\n lowerFence: statistic.lowerFence,\n upperFence: statistic.upperFence,\n isDirty: false\n }\n }\n })\n\n console.log('KPI 총 개수:', kpisResponse.data.kpis.total)\n console.log('KPI 목록:', kpisResponse.data.kpis.items)\n console.log('기존 통계 데이터:', this._existingStatistics)\n console.log('구성된 KPI 통계 데이터:', this.kpis)\n console.log('최종 KPI 배열 길이:', this.kpis.length)\n\n this.requestUpdate()\n } catch (error) { console.error('데이터 로드 중 오류:', error)\n this.error = '데이터를 불러오는 중 오류가 발생했습니다.'\n } finally { this.loading = false\n }\n }\n\n private async _saveStatistics() { try { const patches: any[] = []\n\n this.kpis.forEach(kpi => { // dirty 상태인 데이터만 처리\n if (kpi.statistics.isDirty) { const existingStatistic = this._findExistingStatistic(kpi.kpi.id)\n\n if (existingStatistic) { // 기존 데이터 업데이트\n const { isDirty, ...statisticsWithoutDirty } = kpi.statistics\n patches.push({ id: existingStatistic.id,\n ...statisticsWithoutDirty,\n cuFlag: 'M'\n })\n } else { // 새로운 데이터 생성\n const { isDirty, ...statisticsWithoutDirty } = kpi.statistics\n patches.push({ kpi: { id: kpi.kpi.id\n },\n valueDate: kpi.valueDate,\n periodType: kpi.periodType,\n ...statisticsWithoutDirty,\n additionalStatistics: {},\n metadata: { calculationMethod: 'manual',\n lastCalculated: new Date(),\n dataCount: kpi.statistics.count || 0\n },\n cuFlag: '+'\n })\n }\n }\n })\n\n if (patches.length === 0) { notify({ message: '저장할 데이터가 없습니다.' })\n return\n }\n\n const response = await client.mutate({ mutation: gql`\n mutation ($patches: [KpiStatisticPatch!]!) { updateMultipleKpiStatistic(patches: $patches) { id\n kpi { id\n name\n }\n valueDate\n periodType\n }\n }\n `,\n variables: { patches }\n })\n\n if (!response.errors) { // 저장 후 dirty 상태 해제\n this.kpis.forEach(kpi => { kpi.statistics.isDirty = false\n })\n\n notify({ message: 'KPI 통계값이 성공적으로 저장되었습니다.' })\n this.requestUpdate()\n }\n } catch (error) { console.error('저장 중 오류:', error)\n notify({ message: '저장 중 오류가 발생했습니다.' })\n }\n }\n\n private _findExistingStatistic(kpiId: string) { return this._existingStatistics?.find((s: any) => s.kpi === kpiId)\n }\n\n private _onTargetDateChange(targetDate: string) { this.targetDate = targetDate\n this._calculateDateRange()\n }\n\n private _onPeriodChange(periodType: string) { this.periodType = periodType\n this._calculateDateRange()\n }\n\n private _calculateDateRange() { if (!this.targetDate || !this.periodType) return\n\n const target = new Date(this.targetDate)\n let valueDate: string\n\n switch (this.periodType) { case 'DAY':\n valueDate = target.toISOString().split('T')[0]\n break\n case 'WEEK':\n // 해당 주의 월요일\n const dayOfWeek = target.getDay()\n const daysToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1\n const monday = new Date(target)\n monday.setDate(target.getDate() - daysToMonday)\n valueDate = monday.toISOString().split('T')[0]\n break\n case 'MONTH':\n valueDate = `${target.getFullYear()}-${String(target.getMonth() + 1).padStart(2, '0')}`\n break\n case 'QUARTER':\n const quarter = Math.floor(target.getMonth() / 3) + 1\n valueDate = `${target.getFullYear()}-Q${quarter}`\n break\n case 'YEAR':\n valueDate = target.getFullYear().toString()\n break\n default:\n valueDate = target.toISOString().split('T')[0]\n }\n\n this.valueDate = valueDate\n }\n\n private _cancel() { this.editingCell = null\n this._loadData() // 원본 데이터로 복원\n }\n\n async pageInitialized(lifecycle: any) { // 기본값 설정 - 현재 날짜를 기준으로\n if (!this.targetDate) { this.targetDate = new Date().toLocaleDateString('sv-SE')\n }\n\n // 기간 유형에 따라 날짜 범위 계산\n this._calculateDateRange()\n\n await this._loadData()\n }\n}\n"]}
@@ -114,7 +114,7 @@ let KpiValueEditorPage = class KpiValueEditorPage extends localize(i18next)(Scop
114
114
  color: var(--md-sys-color-on-primary-container);
115
115
  }
116
116
 
117
- td.editable-cell:hover { background: var(--md-sys-color-primary-container-high);
117
+ td.editable-cell:hover { background: var(--md-sys-color-primary-container);
118
118
  }
119
119
 
120
120
  td.highlighted-cell { background: var(--md-sys-color-secondary-container);
@@ -122,7 +122,7 @@ let KpiValueEditorPage = class KpiValueEditorPage extends localize(i18next)(Scop
122
122
  font-weight: 500;
123
123
  }
124
124
 
125
- td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container-high);
125
+ td.highlighted-cell:hover { background: var(--md-sys-color-secondary-container);
126
126
  }
127
127
 
128
128
  td.disabled-cell { background: var(--md-sys-color-surface-container);