feat: 채번규칙 메뉴 스코프 전환 완료

 주요 변경사항:
- 백엔드: menuService.ts 추가 (형제 메뉴 조회 유틸리티)
- 백엔드: numberingRuleService.getAvailableRulesForMenu() 메뉴 스코프 적용
- 백엔드: tableCategoryValueService 메뉴 스코프 준비 (menuObjid 파라미터 추가)
- 프론트엔드: TextInputConfigPanel에 부모 메뉴 선택 UI 추가
- 프론트엔드: 메뉴별 채번규칙 필터링 (형제 메뉴 공유)

🔧 기술 세부사항:
- getSiblingMenuObjids(): 같은 부모를 가진 형제 메뉴 OBJID 조회
- 채번규칙 우선순위: menu (형제) > table > global
- 사용자 메뉴(menu_type='1') 레벨 2만 부모 메뉴로 선택 가능

📝 다음 단계:
- 카테고리 컴포넌트도 메뉴 스코프로 전환 예정
This commit is contained in:
kjs
2025-11-11 14:32:00 +09:00
parent 532c80a86b
commit 668b45d4ea
16 changed files with 1838 additions and 268 deletions

View File

@@ -26,6 +26,7 @@ interface NumberingRuleDesignerProps {
isPreview?: boolean;
className?: string;
currentTableName?: string; // 현재 화면의 테이블명 (자동 감지용)
menuObjid?: number; // 현재 메뉴 OBJID (메뉴 스코프)
}
export const NumberingRuleDesigner: React.FC<NumberingRuleDesignerProps> = ({
@@ -36,6 +37,7 @@ export const NumberingRuleDesigner: React.FC<NumberingRuleDesignerProps> = ({
isPreview = false,
className = "",
currentTableName,
menuObjid,
}) => {
const [savedRules, setSavedRules] = useState<NumberingRuleConfig[]>([]);
const [selectedRuleId, setSelectedRuleId] = useState<string | null>(null);
@@ -53,7 +55,7 @@ export const NumberingRuleDesigner: React.FC<NumberingRuleDesignerProps> = ({
const loadRules = useCallback(async () => {
setLoading(true);
try {
const response = await getNumberingRules();
const response = await getNumberingRules(menuObjid);
if (response.success && response.data) {
setSavedRules(response.data);
} else {
@@ -64,7 +66,7 @@ export const NumberingRuleDesigner: React.FC<NumberingRuleDesignerProps> = ({
} finally {
setLoading(false);
}
}, []);
}, [menuObjid]);
useEffect(() => {
if (currentRule) {
@@ -145,7 +147,7 @@ export const NumberingRuleDesigner: React.FC<NumberingRuleDesignerProps> = ({
"currentRule.tableName": currentRule.tableName,
"ruleToSave.tableName": ruleToSave.tableName,
"ruleToSave.scopeType": ruleToSave.scopeType,
ruleToSave
ruleToSave,
});
let response;
@@ -214,7 +216,7 @@ export const NumberingRuleDesigner: React.FC<NumberingRuleDesignerProps> = ({
const handleNewRule = useCallback(() => {
console.log("📋 새 규칙 생성 - currentTableName:", currentTableName);
const newRule: NumberingRuleConfig = {
ruleId: `rule-${Date.now()}`,
ruleName: "새 채번 규칙",
@@ -227,7 +229,7 @@ export const NumberingRuleDesigner: React.FC<NumberingRuleDesignerProps> = ({
};
console.log("📋 생성된 규칙 정보:", newRule);
setSelectedRuleId(newRule.ruleId);
setCurrentRule(newRule);
@@ -273,7 +275,7 @@ export const NumberingRuleDesigner: React.FC<NumberingRuleDesignerProps> = ({
savedRules.map((rule) => (
<Card
key={rule.ruleId}
className={`py-2 border-border hover:bg-accent cursor-pointer transition-colors ${
className={`border-border hover:bg-accent cursor-pointer py-2 transition-colors ${
selectedRuleId === rule.ruleId ? "border-primary bg-primary/5" : "bg-card"
}`}
onClick={() => handleSelectRule(rule)}
@@ -356,7 +358,7 @@ export const NumberingRuleDesigner: React.FC<NumberingRuleDesignerProps> = ({
{currentTableName && (
<div className="space-y-2">
<Label className="text-sm font-medium"> </Label>
<div className="flex h-9 items-center rounded-md border border-input bg-muted px-3 text-sm text-muted-foreground">
<div className="border-input bg-muted text-muted-foreground flex h-9 items-center rounded-md border px-3 text-sm">
{currentTableName}
</div>
<p className="text-muted-foreground text-xs">