87 lines
2.2 KiB
TypeScript
87 lines
2.2 KiB
TypeScript
import { z } from "zod";
|
|
|
|
export const MENU_TYPE = {
|
|
EMPTY: "EMPTY",
|
|
CONTENTS: "CONTENTS",
|
|
BOARD: "BOARD",
|
|
INSIDE: "INSIDE",
|
|
OUTSIDE: "OUTSIDE",
|
|
BOTTOM: "BOTTOM",
|
|
} as const;
|
|
|
|
export type MenuType = (typeof MENU_TYPE)[keyof typeof MENU_TYPE];
|
|
|
|
export interface TreeNode {
|
|
menuCd?: number;
|
|
name?: string;
|
|
sortSeq?: number;
|
|
parentId?: number | null;
|
|
levelNo?: number;
|
|
icon?: string;
|
|
children?: TreeNode[];
|
|
}
|
|
|
|
export interface TreeMenu extends Omit<TreeNode, "name" | "icon" | "children"> {
|
|
menuKornNm: string;
|
|
menuEngNm?: string;
|
|
iconNm?: string;
|
|
children?: TreeMenu[];
|
|
urlPath?: string;
|
|
menuLnkgTypeCd: string;
|
|
menuLnkgSn?: number;
|
|
qrcd?: string;
|
|
useYn: string;
|
|
otptYn: string;
|
|
requiredUrlPath?: boolean;
|
|
}
|
|
|
|
export const menuFormSchema = z.object({
|
|
siteId: z.string(),
|
|
menuKornNm: z.string(),
|
|
menuSubKornNm: z.string().nullish(),
|
|
menuEngNm: z.string().nullish(),
|
|
menuSubEngNm: z.string().nullish(),
|
|
levelNo: z.number(),
|
|
urlPath: z.string().nullish(),
|
|
iconNm: z.string().nullish(),
|
|
menuLnkgTypeCd: z.enum([
|
|
MENU_TYPE.EMPTY,
|
|
MENU_TYPE.CONTENTS,
|
|
MENU_TYPE.BOARD,
|
|
MENU_TYPE.INSIDE,
|
|
MENU_TYPE.OUTSIDE,
|
|
MENU_TYPE.BOTTOM,
|
|
]),
|
|
menuLnkgSn: z.number().nullish(),
|
|
otptYn: z.string().default("Y"),
|
|
prntMenuCd: z.number().nullish(),
|
|
sortSeq: z.number(),
|
|
evlUseYn: z.string().default("Y"),
|
|
qrcd: z.string().nullish(),
|
|
useYn: z.string().default("Y"),
|
|
newWndwYn: z.string().nullish(),
|
|
menuLnkgSnNm: z.string().nullish(),
|
|
menuPicUserUnqId: z.string().nullish(),
|
|
menuPicUserUnqIdNm: z.string().nullish(),
|
|
menuPicDsgnYmd: z.string().nullish(),
|
|
});
|
|
|
|
export type MenuFormData = z.infer<typeof menuFormSchema>;
|
|
export type Menu = Omit<MenuFormData, "iconNm"> & {
|
|
menuCd: number;
|
|
iconName?: string;
|
|
};
|
|
|
|
export interface MenuService {
|
|
getMenuInfo: (menuCd: number) => Promise<Menu>;
|
|
createMenu: (data: MenuFormData) => Promise<void>;
|
|
modifyMenu: (
|
|
menuCd: number,
|
|
data: Omit<MenuFormData, "siteId">,
|
|
) => Promise<void>;
|
|
deleteMenu: (menuCd: number) => Promise<void>;
|
|
getTreeMenuList: (siteId: string) => Promise<TreeMenu[]>;
|
|
modifyTreeMenu: (siteId: string, data: TreeNode[]) => Promise<void>;
|
|
modifyMenuName: (menuCd: number, name: string) => Promise<void>;
|
|
}
|