Merge branch 'iipbs/st/dev' of https://www.onasys.co.kr:3000/ONAANDALL/frontend into iipbs/st/dev
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -32,9 +32,46 @@ const FIELD_HEADER: Record<string, string> = {
|
||||
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<string>([
|
||||
...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 {
|
||||
|
||||
@@ -310,7 +310,7 @@ export interface StatisticsLogDetailRow {
|
||||
export interface StatisticsLogDetailResponse {
|
||||
status: string;
|
||||
message?: string;
|
||||
data?: StatisticsLogDetailRow[];
|
||||
data?: StatisticsLogDetailRow[] | StatisticsLogDetailRow;
|
||||
}
|
||||
|
||||
export interface getReviewOpinionDetailRequest {
|
||||
|
||||
Reference in New Issue
Block a user