feat: 채번 규칙 및 코드 메뉴별 격리 구현
**주요 변경사항:** 1. **메뉴 스코프 변경 (getSiblingMenuObjids)** - 기존: 형제 메뉴 + 모든 형제의 자식 메뉴 포함 - 변경: 자신 + 자신의 자식 메뉴만 포함 - 결과: 각 2레벨 메뉴가 완전히 독립적으로 격리됨 2. **채번 규칙 메뉴 선택 상태 유지** - useState 초기값 함수에서 저장된 selectedMenuObjid 복원 - 속성창 닫았다 열어도 선택한 메뉴와 채번 규칙 유지 - config.autoGeneration.selectedMenuObjid에 저장 3. **로그 정리** - 프론트엔드: 디버깅 로그 제거 - 백엔드: info 레벨 로그를 debug 레벨로 변경 - 운영 환경에서 불필요한 로그 출력 최소화 **영향:** - 영업관리 메뉴: 영업관리의 채번 규칙/코드만 조회 - 기준정보 메뉴: 기준정보의 채번 규칙/코드만 조회 - 각 메뉴 그룹이 독립적으로 데이터 관리 가능
This commit is contained in:
@@ -29,7 +29,12 @@ export const TextInputConfigPanel: React.FC<TextInputConfigPanelProps> = ({ conf
|
||||
|
||||
// 부모 메뉴 목록 상태 (채번규칙 사용을 위한 선택)
|
||||
const [parentMenus, setParentMenus] = useState<any[]>([]);
|
||||
const [selectedMenuObjid, setSelectedMenuObjid] = useState<number | undefined>(menuObjid);
|
||||
|
||||
// useState 초기값에서 저장된 값 복원 (우선순위: 저장된 값 > menuObjid prop)
|
||||
const [selectedMenuObjid, setSelectedMenuObjid] = useState<number | undefined>(() => {
|
||||
return config.autoGeneration?.selectedMenuObjid || menuObjid;
|
||||
});
|
||||
|
||||
const [loadingMenus, setLoadingMenus] = useState(false);
|
||||
|
||||
// 부모 메뉴 목록 로드 (사용자 메뉴의 레벨 2만)
|
||||
@@ -49,7 +54,6 @@ export const TextInputConfigPanel: React.FC<TextInputConfigPanelProps> = ({ conf
|
||||
);
|
||||
|
||||
setParentMenus(level2UserMenus);
|
||||
console.log("✅ 부모 메뉴 로드 완료:", level2UserMenus.length, "개", level2UserMenus);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("부모 메뉴 로드 실패:", error);
|
||||
@@ -63,21 +67,23 @@ export const TextInputConfigPanel: React.FC<TextInputConfigPanelProps> = ({ conf
|
||||
// 채번 규칙 목록 로드 (선택된 메뉴 기준)
|
||||
useEffect(() => {
|
||||
const loadRules = async () => {
|
||||
// autoGeneration.type이 numbering_rule이 아니면 로드하지 않음
|
||||
if (config.autoGeneration?.type !== "numbering_rule") {
|
||||
return;
|
||||
}
|
||||
|
||||
// 메뉴가 선택되지 않았으면 로드하지 않음
|
||||
if (!selectedMenuObjid) {
|
||||
console.log("⚠️ 메뉴가 선택되지 않아 채번 규칙을 로드하지 않습니다");
|
||||
setNumberingRules([]);
|
||||
return;
|
||||
}
|
||||
|
||||
setLoadingRules(true);
|
||||
try {
|
||||
console.log("🔍 선택된 메뉴 기반 채번 규칙 로드", { selectedMenuObjid });
|
||||
const response = await getAvailableNumberingRules(selectedMenuObjid);
|
||||
|
||||
if (response.success && response.data) {
|
||||
setNumberingRules(response.data);
|
||||
console.log("✅ 채번 규칙 로드 완료:", response.data.length, "개");
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("채번 규칙 목록 로드 실패:", error);
|
||||
@@ -87,11 +93,8 @@ export const TextInputConfigPanel: React.FC<TextInputConfigPanelProps> = ({ conf
|
||||
}
|
||||
};
|
||||
|
||||
// autoGeneration.type이 numbering_rule일 때만 로드
|
||||
if (config.autoGeneration?.type === "numbering_rule") {
|
||||
loadRules();
|
||||
}
|
||||
}, [config.autoGeneration?.type, selectedMenuObjid]);
|
||||
loadRules();
|
||||
}, [selectedMenuObjid, config.autoGeneration?.type]);
|
||||
|
||||
const handleChange = (key: keyof TextInputConfig, value: any) => {
|
||||
onChange({ [key]: value });
|
||||
@@ -202,7 +205,12 @@ export const TextInputConfigPanel: React.FC<TextInputConfigPanelProps> = ({ conf
|
||||
onValueChange={(value) => {
|
||||
const menuObjid = parseInt(value);
|
||||
setSelectedMenuObjid(menuObjid);
|
||||
console.log("✅ 메뉴 선택됨:", menuObjid);
|
||||
|
||||
// 컴포넌트 설정에 저장하여 언마운트 시에도 유지
|
||||
handleChange("autoGeneration", {
|
||||
...config.autoGeneration,
|
||||
selectedMenuObjid: menuObjid,
|
||||
});
|
||||
}}
|
||||
disabled={loadingMenus}
|
||||
>
|
||||
|
||||
Reference in New Issue
Block a user