【Vue+Element】利用render函数实现一个递归的权限菜单

之前是写过一个利用单文件组件name进行递归的菜单版本,这次分享一个利用render函数实现的版本,加入了meta里的权限信息,控制菜单的显示与否,供需要的同学参考。

路由数据

meta中定义权限相关字段,有的页面不需要展示在菜单,用hiddenInMenu将其过滤;有的页面需要登录才能查看,通过isAuthRequired字段控制;有的页面登录后,需要区分指定角色才可查看,增加role字段来控制。(这里简单的使用了字符串比较像等,实际上有的页面是多角色可见,可以升级成数组,通过role.includes(currentRole)来控制)

import Layout from "@/components/layout/Layout.vue";
import Empty from "./empty.vue";

/**
 * 路由对象的meta
 * @property {boolean} isAuthRequired - 是否需要登录才可进入页面
 * @property {string|array} role - 角色验证 - 前提是 isAuthRequired === true (即已经登录)
 * @property {boolean} title - 菜单名
 * @property {boolean} hiddenInMenu - 是否展示在菜单中
 */
export const routes = [
  // 仓库管理
  {
   
    path: "/repository",
    redirect: "/repository/index",
    component: Layout,
    meta: {
   
      title: "仓库管理"
    },
    children: [
      {
   
        path: "index",
        name: "Management",
        component: Empty,
        meta: {
   
          title: "系统管理",
          isAuthRequired: true
        }
      },
      {
   
        path: "registry",
        name: "Registry",
        component: Empty,
        meta: {
   
          title: "系统注册",
          isAuthRequired: true
        }
      },
      {
   
        path: "modify",
        name: "Modify",
        component: Empty,
        meta: {
   
          title: "系统修改",
          isAuthRequired: true,
          hiddenInMenu: true
        }
      }
    ]
  },
  // 个人单页
  {
   
    path: "/profile",
    redirect: "/profile/index",
    component: Layout,
    meta: {
   
      title: "无子菜单"
    },
    children: [
      {
   
        path: "index",
        name: "User View",
        component: Empty,
        meta: {
   
          title: "升级菜单",
          isAuthRequired: true
        }
      },
      {
   
        path: "modify",
        name: "Modify",
        component: Empty,
        meta: {
   
          title: "不显示",
          isAuthRequired: 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值