zhou zhou
昨天 5d31cb5f1fb32a478d5b751ebfe97d47db890778
rsf-design/src/router/core/MenuProcessor.js
@@ -1,9 +1,40 @@
import { useUserStore } from '@/store/modules/user'
import { useAppMode } from '@/hooks/core/useAppMode'
import { fetchGetMenuList } from '@/api/system-manage'
import { fetchGetMenuList } from '@/api/auth'
import { asyncRoutes } from '../routes/asyncRoutes'
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',
    staticRoute: true
  },
  children: [
    {
      name: 'Console',
      path: 'console',
      component: WORKBENCH_PATH,
      meta: {
        title: 'menus.dashboard.console',
        icon: 'ri:home-smile-2-line',
        keepAlive: false,
        fixedTab: true,
        staticRoute: true
      }
    }
  ]
})
class MenuProcessor {
  /**
   * 获取菜单数据
@@ -16,6 +47,7 @@
    } else {
      menuList = await this.processBackendMenu()
    }
    menuList = this.prependWorkbenchMenu(menuList)
    this.validateMenuPaths(menuList)
    return this.normalizeMenuPaths(menuList)
  }
@@ -36,7 +68,7 @@
   */
  async processBackendMenu() {
    const list = await fetchGetMenuList()
    return this.filterEmptyMenus(list)
    return adaptBackendMenuTree(list)
  }
  /**
   * 根据角色过滤菜单
@@ -205,5 +237,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 }