zhou zhou
7 小时以前 03167ec81343fb8bf8967da13768a1137c89b24d
rsf-design/src/router/core/MenuProcessor.js
@@ -5,6 +5,34 @@
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 {
  /**
   * 获取菜单数据
@@ -17,6 +45,7 @@
    } else {
      menuList = await this.processBackendMenu()
    }
    menuList = this.prependWorkbenchMenu(menuList)
    this.validateMenuPaths(menuList)
    return this.normalizeMenuPaths(menuList)
  }
@@ -206,5 +235,56 @@
    }
    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 }