복사 원본데이터 참조 오류 수정

This commit is contained in:
kjs 2025-12-23 17:06:21 +09:00
parent c910572754
commit 542c0bae94
1 changed files with 47 additions and 12 deletions

View File

@ -483,7 +483,8 @@ export class MenuCopyService {
properties: any,
screenIdMap: Map<number, number>,
flowIdMap: Map<number, number>,
numberingRuleIdMap?: Map<string, string>
numberingRuleIdMap?: Map<string, string>,
menuIdMap?: Map<number, number>
): any {
if (!properties) return properties;
@ -496,7 +497,8 @@ export class MenuCopyService {
screenIdMap,
flowIdMap,
"",
numberingRuleIdMap
numberingRuleIdMap,
menuIdMap
);
return updated;
@ -510,7 +512,8 @@ export class MenuCopyService {
screenIdMap: Map<number, number>,
flowIdMap: Map<number, number>,
path: string = "",
numberingRuleIdMap?: Map<string, string>
numberingRuleIdMap?: Map<string, string>,
menuIdMap?: Map<number, number>
): void {
if (!obj || typeof obj !== "object") return;
@ -522,7 +525,8 @@ export class MenuCopyService {
screenIdMap,
flowIdMap,
`${path}[${index}]`,
numberingRuleIdMap
numberingRuleIdMap,
menuIdMap
);
});
return;
@ -533,13 +537,16 @@ export class MenuCopyService {
const value = obj[key];
const currentPath = path ? `${path}.${key}` : key;
// screen_id, screenId, targetScreenId, leftScreenId, rightScreenId 매핑 (숫자 또는 숫자 문자열)
// screen_id, screenId, targetScreenId, leftScreenId, rightScreenId, addModalScreenId, editModalScreenId, modalScreenId 매핑 (숫자 또는 숫자 문자열)
if (
key === "screen_id" ||
key === "screenId" ||
key === "targetScreenId" ||
key === "leftScreenId" ||
key === "rightScreenId"
key === "rightScreenId" ||
key === "addModalScreenId" ||
key === "editModalScreenId" ||
key === "modalScreenId"
) {
const numValue = typeof value === "number" ? value : parseInt(value);
if (!isNaN(numValue) && numValue > 0) {
@ -549,6 +556,11 @@ export class MenuCopyService {
logger.info(
` 🔗 화면 참조 업데이트 (${currentPath}): ${value}${newId}`
);
} else {
// 매핑이 없으면 경고 로그 (복사되지 않은 화면 참조)
logger.warn(
` ⚠️ 화면 매핑 없음 (${currentPath}): ${value} - 원본 화면이 복사되지 않았을 수 있음`
);
}
}
}
@ -573,9 +585,9 @@ export class MenuCopyService {
}
}
// numberingRuleId 매핑 (문자열)
// numberingRuleId, ruleId 매핑 (문자열) - 채번규칙 참조
if (
key === "numberingRuleId" &&
(key === "numberingRuleId" || key === "ruleId") &&
numberingRuleIdMap &&
typeof value === "string" &&
value
@ -595,6 +607,25 @@ export class MenuCopyService {
}
}
// selectedMenuObjid 매핑 (메뉴 objid 참조)
if (key === "selectedMenuObjid" && menuIdMap) {
const numValue = typeof value === "number" ? value : parseInt(value);
if (!isNaN(numValue) && numValue > 0) {
const newId = menuIdMap.get(numValue);
if (newId) {
obj[key] = typeof value === "number" ? newId : String(newId);
logger.info(
` 🔗 메뉴 참조 업데이트 (${currentPath}): ${value}${newId}`
);
} else {
// 매핑이 없으면 경고 로그 (복사되지 않은 메뉴 참조)
logger.warn(
` ⚠️ 메뉴 매핑 없음 (${currentPath}): ${value} - 원본 메뉴가 복사되지 않았을 수 있음`
);
}
}
}
// 재귀 호출
if (typeof value === "object" && value !== null) {
this.recursiveUpdateReferences(
@ -602,7 +633,8 @@ export class MenuCopyService {
screenIdMap,
flowIdMap,
currentPath,
numberingRuleIdMap
numberingRuleIdMap,
menuIdMap
);
}
}
@ -981,7 +1013,8 @@ export class MenuCopyService {
userId,
client,
screenNameConfig,
numberingRuleIdMap
numberingRuleIdMap,
menuIdMap
);
// === 6단계: 화면-메뉴 할당 ===
@ -1315,7 +1348,8 @@ export class MenuCopyService {
removeText?: string;
addPrefix?: string;
},
numberingRuleIdMap?: Map<string, string>
numberingRuleIdMap?: Map<string, string>,
menuIdMap?: Map<number, number>
): Promise<Map<number, number>> {
const screenIdMap = new Map<number, number>();
@ -1601,7 +1635,8 @@ export class MenuCopyService {
layout.properties,
screenIdMap,
flowIdMap,
numberingRuleIdMap
numberingRuleIdMap,
menuIdMap
);
layoutValues.push(