| | |
| | | import { RoutesAlias } from '../routesAlias' |
| | | import { adaptBackendMenuTree } from '../adapters/backendMenuAdapter' |
| | | import { formatMenuTitle } from '@/utils' |
| | | |
| | | const WORKBENCH_PATH = '/dashboard/console' |
| | | const WORKBENCH_ROOT_PATH = '/dashboard' |
| | | |
| | | const WORKBENCH_MENU = Object.freeze({ |
| | | name: 'Dashboard', |
| | | path: WORKBENCH_ROOT_PATH, |
| | | component: RoutesAlias.Layout, |
| | | redirect: WORKBENCH_PATH, |
| | | meta: { |
| | | title: 'menus.dashboard.title', |
| | | icon: 'ri:home-smile-2-line' |
| | | }, |
| | | children: [ |
| | | { |
| | | name: 'Console', |
| | | path: 'console', |
| | | component: WORKBENCH_PATH, |
| | | meta: { |
| | | title: 'menus.dashboard.console', |
| | | icon: 'ri:home-smile-2-line', |
| | | keepAlive: false, |
| | | fixedTab: true |
| | | } |
| | | } |
| | | ] |
| | | }) |
| | | |
| | | class MenuProcessor { |
| | | /** |
| | | * 获取菜单数据 |
| | |
| | | } else { |
| | | menuList = await this.processBackendMenu() |
| | | } |
| | | menuList = this.prependWorkbenchMenu(menuList) |
| | | this.validateMenuPaths(menuList) |
| | | return this.normalizeMenuPaths(menuList) |
| | | } |
| | |
| | | } |
| | | return `/${path}` |
| | | } |
| | | |
| | | prependWorkbenchMenu(menuList) { |
| | | if (!Array.isArray(menuList)) { |
| | | return [this.createWorkbenchMenu()] |
| | | } |
| | | |
| | | const hasWorkbench = menuList.some((item) => this.containsWorkbenchMenu(item)) |
| | | if (hasWorkbench) { |
| | | return menuList |
| | | } |
| | | |
| | | return [this.createWorkbenchMenu(), ...menuList] |
| | | } |
| | | |
| | | createWorkbenchMenu() { |
| | | return { |
| | | ...WORKBENCH_MENU, |
| | | meta: { |
| | | ...WORKBENCH_MENU.meta |
| | | }, |
| | | children: WORKBENCH_MENU.children.map((child) => ({ |
| | | ...child, |
| | | meta: { |
| | | ...child.meta |
| | | } |
| | | })) |
| | | } |
| | | } |
| | | |
| | | isWorkbenchMenu(item) { |
| | | if (!item || typeof item !== 'object') { |
| | | return false |
| | | } |
| | | const path = String(item.path || '') |
| | | const component = String(item.component || '') |
| | | return ( |
| | | path === WORKBENCH_ROOT_PATH || |
| | | path === WORKBENCH_PATH || |
| | | component === WORKBENCH_PATH |
| | | ) |
| | | } |
| | | |
| | | containsWorkbenchMenu(item) { |
| | | if (this.isWorkbenchMenu(item)) { |
| | | return true |
| | | } |
| | | if (!Array.isArray(item?.children) || item.children.length === 0) { |
| | | return false |
| | | } |
| | | return item.children.some((child) => this.containsWorkbenchMenu(child)) |
| | | } |
| | | } |
| | | export { MenuProcessor } |