Skip to content

nMenuPlugin - 菜单组件

什么是 nMenuPlugin?

nMenuPlugin 是一个用于菜单管理的插件。它最终会输出 n-menu 所需要的属性供 n-menu 组件消费,它和权限无关,菜单的生成取决于用户传递的配置。

INFO

它被设计成一个插件是因为可以在路由配置中定义一些菜单配置

启用插件

typescript
import { createRouter, nMenuPlugin } from '@pro/router'

const router = createRouter({
  // ... 其他配置
  plugins: [
    nMenuPlugin({
      service: () => {
        return {
          routes: data // 内部会将 data 数据处理成 n-menu 组件需要的数据,这里 data 根据实际场景来控制,在 Admin 中这里使用的是权限过滤后的路由数据
        }
      }
    })
  ]
})

在组件中

vue
<template>
  <n-menu :options="$router.buildMenus()"/>
</template>

在路由中配置

typescript
const routes = [
  {
    path: '/dashboard',
    component: Dashboard,
    meta: {
      title: '菜单标题',
      icon: '菜单图标',
      hideInMenu: true, // 不在菜单中显示
      order: 1, // 菜单排序,越小越靠前
    }
  },
]

插件配置选项

选项类型默认值说明
serviceService-必填,菜单配置选项,详细类型见下方
typescript
import type { Merge } from 'type-fest'
import type { MenuOption } from 'naive-ui'
import type { RouteRecordRaw } from 'vue-router'

type ServiceRoute = Merge<
  RouteRecordRaw,
  { component?: any, children?: any[] }
>

type Service = () => {
  /**
   * 根据此配置生成菜单数据
   */
  routes: ServiceRoute[]
  /**
   * 二次处理菜单项,比如支持国际化
   * @param item 处理后的菜单项
   * @param rawItem 原始菜单项
   */
  resolveMenuItem?: (item: MenuOption, rawItem: ServiceRoute) => MenuOption
}

路由 Meta 配置选项

选项类型默认值说明
titlestring-选填,菜单标题
iconstring'ant-design:menu-outlined'选填,菜单图标,可填写 iconify 网站支持的图标,也可以填写图片地址
hideInMenubooleanfalse选填,是否不在菜单中显示
ordernumber-选填,菜单排序,越小越靠前