import { useRoute } from 'vue-router' import { sessionCache } from '@/store' import { AuthMenu } from './interface' export function useMenu() { const route = useRoute(); const menus = sessionCache.getValue('menus'); /** * 通过code获取对应的子菜单 * @param routeName * @returns */ const getChildrenMenu = (routeName?: string) => { const filter = (items: Ermcp.AccountMenu[], name?: string) => { let result: Ermcp.AccountMenu[] = []; if (name) { for (let i = 0; i < items.length; i++) { const { code, children } = items[i]; if (code === name) return children ?? result; if (children) { result = filter(children, name) if (result.length) return result; } } } return result; } return filter(menus, routeName ?? route.name?.toString()); } /** * 获取权限菜单 * @returns */ const getAuthMenu = () => { const filter = (menu: Ermcp.AccountMenu) => ({ path: menu.path, name: menu.code, label: menu.title, icon: menu.icon, }) return menus.map((menu) => { const result: AuthMenu = filter(menu); if (menu.children) { result.children = menu.children.map((child) => filter(child)); } return result; }) } /** * 获取当前页面操作权限 * @param filtered 过滤的数据项 * @param reverse 是否反向过滤 * @returns */ const getAuth = (filtered: string[] = [], reverse = false) => { const result = route.meta.auth as Ermcp.AccountMenu.Auth[]; if (filtered.length) { if (reverse) { // 返回除指定的权限代码 return result.filter((e) => !filtered.includes(e.code)); } else { // 返回指定的权限代码 return result.filter((e) => filtered.includes(e.code)); } } return result; } return { menus, getChildrenMenu, getAuth, getAuthMenu, } }