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, }; }