import type { SystemModel, TransformData } from '#/api'; export function fromMenus(menus: TransformData[]): SystemModel.Menu[] { const getType = (menu: TransformData): SystemModel.Menu['type'] => { if (menu.type) return menu.type; if (menu.component && menu.children === null) return 'menu'; return menu.component ? 'catalog' : 'button'; }; return Array.isArray(menus) ? menus .map((menu: TransformData) => { menu.meta ??= {}; menu.meta.order ??= menu?.orderNum ?? -1; return { type: getType(menu), id: menu.id ?? menu.meta.id, pid: menu.parentId, name: menu.name, path: menu.path, component: menu.component, meta: fromMenuMeta(menu.meta), children: fromMenus(menu.children), } satisfies SystemModel.Menu; }) .sort((a, b) => (a.meta.order ?? -1) - (b.meta.order ?? -1)) : []; } type MenuMeta = SystemModel.Menu['meta']; export function getDefaultMenuMeta(meta?: MenuMeta): MenuMeta { return Object.assign( { keepAlive: true, }, meta, ); } function fromMenuMeta(meta: TransformData): MenuMeta { return getDefaultMenuMeta(meta satisfies MenuMeta); }