From 9cc5bbbf05402dbcb547039e4ab78316b9658e43 Mon Sep 17 00:00:00 2001 From: kjs Date: Mon, 12 Jan 2026 13:53:57 +0900 Subject: [PATCH] =?UTF-8?q?=EC=97=91=EC=85=80=20=EC=97=85=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/services/masterDetailExcelService.ts | 26 ++++++++++++++++--- frontend/lib/utils/buttonActions.ts | 8 ++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/backend-node/src/services/masterDetailExcelService.ts b/backend-node/src/services/masterDetailExcelService.ts index 4b1a7218..0c1dfafe 100644 --- a/backend-node/src/services/masterDetailExcelService.ts +++ b/backend-node/src/services/masterDetailExcelService.ts @@ -47,8 +47,13 @@ export interface SplitPanelConfig { columns: Array<{ name: string; label: string; width?: number }>; relation?: { type: string; - foreignKey: string; - leftColumn: string; + foreignKey?: string; + leftColumn?: string; + // 복합키 지원 (새로운 방식) + keys?: Array<{ + leftColumn: string; + rightColumn: string; + }>; }; }; } @@ -210,8 +215,21 @@ class MasterDetailExcelService { } // 2. 분할 패널의 relation 정보가 있으면 우선 사용 - let masterKeyColumn = splitPanel.rightPanel.relation?.leftColumn; - let detailFkColumn = splitPanel.rightPanel.relation?.foreignKey; + // 🔥 keys 배열을 우선 사용 (새로운 복합키 지원 방식) + let masterKeyColumn: string | undefined; + let detailFkColumn: string | undefined; + + const relationKeys = splitPanel.rightPanel.relation?.keys; + if (relationKeys && relationKeys.length > 0) { + // keys 배열에서 첫 번째 키 사용 + masterKeyColumn = relationKeys[0].leftColumn; + detailFkColumn = relationKeys[0].rightColumn; + logger.info(`keys 배열에서 관계 정보 사용: ${masterKeyColumn} -> ${detailFkColumn}`); + } else { + // 하위 호환성: 기존 leftColumn/foreignKey 사용 + masterKeyColumn = splitPanel.rightPanel.relation?.leftColumn; + detailFkColumn = splitPanel.rightPanel.relation?.foreignKey; + } // 3. relation 정보가 없으면 column_labels에서 Entity 관계 조회 if (!masterKeyColumn || !detailFkColumn) { diff --git a/frontend/lib/utils/buttonActions.ts b/frontend/lib/utils/buttonActions.ts index 182e0cdc..f03774f1 100644 --- a/frontend/lib/utils/buttonActions.ts +++ b/frontend/lib/utils/buttonActions.ts @@ -4858,6 +4858,10 @@ export class ButtonActionExecutor { detailTable: relationResponse.data.detailTable, masterKeyColumn: relationResponse.data.masterKeyColumn, detailFkColumn: relationResponse.data.detailFkColumn, + // 채번 규칙 ID 추가 (excelNumberingRuleId를 numberingRuleId로 매핑) + numberingRuleId: config.masterDetailExcel.numberingRuleId || config.excelNumberingRuleId, + // 업로드 후 제어 설정 추가 + afterUploadFlows: config.masterDetailExcel.afterUploadFlows || config.excelAfterUploadFlows, }; } else { // 버튼 설정이 없으면 분할 패널 정보만 사용 @@ -4867,6 +4871,10 @@ export class ButtonActionExecutor { masterKeyColumn: relationResponse.data.masterKeyColumn, detailFkColumn: relationResponse.data.detailFkColumn, simpleMode: true, // 기본값으로 간단 모드 사용 + // 채번 규칙 ID 추가 (excelNumberingRuleId 사용) + numberingRuleId: config.excelNumberingRuleId, + // 업로드 후 제어 설정 추가 + afterUploadFlows: config.excelAfterUploadFlows, }; }