From 675e5f58d1926eb4005eabcee6e1533050b9f2aa Mon Sep 17 00:00:00 2001 From: rsone001 Date: Wed, 8 Jul 2026 17:39:35 +0900 Subject: [PATCH] =?UTF-8?q?[st]=20-=20fix=20log=20detail=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../management/LogHistoryDetailDialog.tsx | 5 +- .../management/LogHistoryDetailColumn.ts | 50 ++++++++++++++++++- .../statistics/model/statistics-interface.ts | 2 +- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/apps/st/src/components/statistics/management/LogHistoryDetailDialog.tsx b/apps/st/src/components/statistics/management/LogHistoryDetailDialog.tsx index 416543fa1..46675c000 100644 --- a/apps/st/src/components/statistics/management/LogHistoryDetailDialog.tsx +++ b/apps/st/src/components/statistics/management/LogHistoryDetailDialog.tsx @@ -25,6 +25,7 @@ import { emptyLogHistoryDetailColumnInfo, LOG_DETAIL_DETAILS_FIELD, LOG_DETAIL_DETAILS_RAW_FIELD, + normalizeLogDetailList, type LogDetailVerificationItem, prepareLogDetailRowsForGrid, } from "@/components/util/column/management/LogHistoryDetailColumn"; @@ -113,9 +114,7 @@ export function LogHistoryDetailDialog({ return; } - const list = Array.isArray(response.data) - ? response.data - : []; + const list = normalizeLogDetailList(response.data); const nextColumnInfo = buildLogHistoryDetailColumnInfo(list); const nextRows = alignLogDetailRowsToColumns( prepareLogDetailRowsForGrid(list), diff --git a/apps/st/src/components/util/column/management/LogHistoryDetailColumn.ts b/apps/st/src/components/util/column/management/LogHistoryDetailColumn.ts index 220aa70e5..e10e68df8 100644 --- a/apps/st/src/components/util/column/management/LogHistoryDetailColumn.ts +++ b/apps/st/src/components/util/column/management/LogHistoryDetailColumn.ts @@ -32,9 +32,46 @@ const FIELD_HEADER: Record = { sggNm: "시군구", admdstCd: "행정구역코드", admdstNm: "행정구역명", + vrfcSn: "검증순번", + vrfcNm: "검증명", + trgtStatsCd: "대상통계코드", + trgtStatsNm: "대상통계명", + vrfcClsfCd: "검증분류코드", + vrfcClsfNm: "검증분류명", + dcptDigtCnt: "소수점자릿수", + dcptPrcsMthCd: "소수점처리방법코드", + dcptPrcsMthNm: "소수점처리방법명", + useYn: "사용여부", + regDt: "등록일시", + mdfcnDt: "수정일시", [LOG_DETAIL_DETAILS_FIELD]: "상세", }; +/** 검증 규칙 로그 상세(vrfcSn 등) 컬럼 표시 순서 */ +const VERIFICATION_FIELD_ORDER = [ + "vrfcSn", + "vrfcNm", + "trgtStatsCd", + "trgtStatsNm", + "vrfcClsfCd", + "vrfcClsfNm", + "dcptDigtCnt", + "dcptPrcsMthCd", + "dcptPrcsMthNm", + "useYn", + "regDt", + "mdfcnDt", +] as const; + +/** API `data`가 배열 또는 단일 객체일 때 그리드 행 배열로 정규화 */ +export function normalizeLogDetailList( + data: StatisticsLogDetailRow[] | StatisticsLogDetailRow | null | undefined, +): StatisticsLogDetailRow[] { + if (Array.isArray(data)) return data; + if (data != null && typeof data === "object") return [data]; + return []; +} + function parseLogDetailsValue( value: unknown, ): LogDetailVerificationItem[] | null { @@ -104,11 +141,20 @@ function collectFieldNames(rows: StatisticsLogDetailRow[]): string[] { keys.add(key); } } + const verification = VERIFICATION_FIELD_ORDER.filter((k) => keys.has(k)); const common = COMMON_FIELD_ORDER.filter((k) => keys.has(k)); + const ordered = new Set([ + ...verification, + ...common, + LOG_DETAIL_DETAILS_FIELD, + ]); const rest = [...keys] - .filter((k) => !COMMON_FIELD_ORDER.includes(k as (typeof COMMON_FIELD_ORDER)[number])) + .filter((k) => !ordered.has(k) && k !== LOG_DETAIL_DETAILS_RAW_FIELD) .sort((a, b) => a.localeCompare(b, "ko")); - return [...common, ...rest]; + const details = keys.has(LOG_DETAIL_DETAILS_FIELD) + ? [LOG_DETAIL_DETAILS_FIELD] + : []; + return [...verification, ...common, ...rest, ...details]; } function isNumericField(rows: StatisticsLogDetailRow[], fieldName: string): boolean { diff --git a/apps/st/src/entities/statistics/model/statistics-interface.ts b/apps/st/src/entities/statistics/model/statistics-interface.ts index 571835065..2b533d955 100644 --- a/apps/st/src/entities/statistics/model/statistics-interface.ts +++ b/apps/st/src/entities/statistics/model/statistics-interface.ts @@ -310,7 +310,7 @@ export interface StatisticsLogDetailRow { export interface StatisticsLogDetailResponse { status: string; message?: string; - data?: StatisticsLogDetailRow[]; + data?: StatisticsLogDetailRow[] | StatisticsLogDetailRow; } export interface getReviewOpinionDetailRequest {