blob: 1be8a4fec50aea9cfccb0bfaf1eb8e4d67ebb922 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
// lib/menu-v2/types.ts
export type NodeType = 'menu_group' | 'group' | 'menu' | 'additional';
export type MenuDomain = 'evcp' | 'partners';
export interface MenuTreeNode {
id: number;
domain: MenuDomain;
parentId: number | null;
nodeType: NodeType;
sortOrder: number;
titleKo: string;
titleEn: string | null;
descriptionKo: string | null;
descriptionEn: string | null;
menuPath: string | null;
icon: string | null;
scrId: string | null;
isActive: boolean;
manager1Id: number | null;
manager2Id: number | null;
createdAt: Date;
updatedAt: Date;
// 조회 시 추가되는 필드
children?: MenuTreeNode[];
}
export interface DiscoveredMenu {
domain: MenuDomain;
menuPath: string;
pageFilePath: string;
routeGroup: string;
}
// 도메인별 앱 라우터 경로 설정
export const DOMAIN_APP_PATHS: Record<MenuDomain, {
appDir: string;
basePath: string;
}> = {
evcp: {
appDir: 'app/[lng]/evcp/(evcp)',
basePath: '/evcp'
},
partners: {
appDir: 'app/[lng]/partners',
basePath: '/partners'
}
};
// 관리자용 트리 조회 결과 타입
// tree: 메뉴그룹(드롭다운) + 최상위 메뉴(단일 링크) 통합
export interface MenuTreeAdminResult {
tree: MenuTreeNode[];
unassigned: MenuTreeNode[];
}
// 헤더용 트리 조회 결과 타입
// tree: 메뉴그룹(드롭다운) + 최상위 메뉴(단일 링크) 통합
export interface MenuTreeActiveResult {
tree: MenuTreeNode[];
}
// 노드 생성 타입
export interface CreateMenuGroupInput {
titleKo: string;
titleEn?: string;
sortOrder?: number;
}
export interface CreateGroupInput {
parentId: number;
titleKo: string;
titleEn?: string;
sortOrder?: number;
}
// 최상위 메뉴 생성 (단일 링크)
export interface CreateTopLevelMenuInput {
titleKo: string;
titleEn?: string;
menuPath: string;
sortOrder?: number;
}
// 노드 업데이트 타입
export interface UpdateNodeInput {
titleKo?: string;
titleEn?: string;
descriptionKo?: string;
descriptionEn?: string;
isActive?: boolean;
scrId?: string;
icon?: string;
manager1Id?: number | null;
manager2Id?: number | null;
}
// 순서 변경 타입
export interface ReorderNodeInput {
id: number;
sortOrder: number;
}
|