vue-element-admin动态菜单,vue element admin 动态菜单

  vue-element-admin动态菜单,vue element admin 动态菜单

  在权限管理系统中,菜单也属于权限控制的资源和角色控制的一部分。不同角色的用户登录系统后,会有不同的系统菜单。结合菜单路径集,实现了对可访问路径的过滤,以及相应角色菜单的显示和可访问路径的控制。

  :

目录

   1.菜单资源和管理界面介绍2。菜单和路由的组合管理

  

1、菜单资源及管理界面介绍

  如前所述,权限管理通常涉及用户、组织、角色和权限功能。ABP框架的基本内容也涉及到这些方面,它们之间基本上是多对多的关系。它们的关系如下所示。

  添加菜单资源,并整理它们的关系和表格信息,如下所示。

  结合ABP后端提供的接口,Vue前端需要管理基本的用户、组织、角色、功能、权限,维护它们之间的关系。权限管理模块的Vue前端菜单列表如下所示。

  菜单管理界面如下图所示,主要包括树形列表显示菜单结构和具体的菜单列表查询处理。

  菜单视图详细界面如下图所示,主要是简单显示菜单相关的属性数据。

  编辑或添加菜单界面时,需要考虑从现有菜单中选择列表和图标信息。

  其中,我们封装了选择图标组件的牛逼图标,只从字体牛逼图标中选择。毕竟自带的元素图标太少,不符合要求。

  的Web图标选择控件根据e-icon-picker控件进行了修改,以采用字体Awesome图标集合。

  //Vue-牛逼图标自动加入。

  const req=require . context( vue-awesome/icons ,true,/\。js$/)

  const require all=require context=require context . keys()

  const re=/\。\/(.*)\.js/

  const font awesome=require all(req)。过滤器((键)={

  返回key.indexOf(index.js) 0

  }).地图(i={

  return i.match(re)[1]

  })

  菜单显示我们也可以根据配置从Awesome中选择图标项来构建菜单。

  在layout/components/sidebar/item . vue中修改了菜单项的组件,以适应牛逼图标的处理。

  render(createElement,context) {

  const { icon,title }=context .道具

  const vnodes=[]

  如果(图标){

  //vnodes . push(svg-icon icon-class={ icon }/)//使用自定义SVG图标

  //vnodes . push(I class={ icon }/)//使用内置元素图标

  vnodes . push(v-icon name={ icon } scale= 1.1 style= padding-right:3px /)//使用牛逼图标

  }

  如果(标题){

  vnodes . push(span slot= title { title)}/span

  }

  返回虚拟节点

  }

  通过在各个地方进行修改,我们可以使用牛逼的图标集合。

  

2、菜单和路由的结合管理

  通过前端接口动态获取菜单列表,通过菜单名和路由名的对应关系,我们对比菜单集,然后过滤所有本地静态路由的列表,然后获取用户可以访问的路由列表,给前端设置动态路由,从而实现界面根据用户的不同角色/权限,改变用户的菜单界面和可访问的路由集。

  菜单处理的一般操作流程如下。

  前端动态菜单、本地路由、菜单导航和可访问路由的几个概念如下图所示。

  在前端界面处理中,我们通过元素界面组件显示动态菜单信息,结合菜单与路由的关系,实现菜单跳转到相应视图的处理过程。

  所以在系统管理中的菜单信息配置界面,菜单的网址对应的是系统的静态路由名称,如下图界面所示。

  先前定义的系统的路由信息格式如下

  //定义本系统的所有路由。具体路线通过菜单数据过滤呈现。

  导出常量异步路由={

  仪表板:{

  路径:“/仪表板”,

  组件:布局,

  孩子:[{

  路径:“仪表板”,

  名称:“仪表板”,

  组件:()=导入( @/视图/仪表板/索引)

  }]

  },

  产品:

  路径:“/产品”,

  组件:布局,

  孩子:[{

  路径:“/产品”,

  名称:产品,

  组件:()=导入( @/视图/产品/索引)

  }]

  },

  ....//省略部分

  图标:{

  路径:“/icon”,

  组件:布局,

  孩子:[{

  路径:“/icon”,

  名称:“图标”,

  component:()=import( @/views/icons/index )

  }]

  },

  外部链接:{

  路径: http://www.iqidi.com ,

  名称:“外部链接”

  }

  }

  有了这些准备,我们就可以在用户登录系统后,从后台获取相应的菜单列表。

  在系统登录的过程中,考虑到初始化,如果用户是管理员admin,并且获取的用户菜单为空,可以考虑使用预置的静态菜单资源,让用户先配置权限菜单。

  //系统静态菜单

  var static menus=await getstatic menus()

  //console.log(菜单)

  //如果用户是admin,并且角色集中没有菜单,则使用静态菜单

  Var用户名=store.getters.name//username

  if(用户名===admin) {

  如果(!menus type of(menus)== undefined menus . length===0){

  Menus=staticmenus //系统管理员,初始化时使用静态菜单。

  }

  }

  由于之前开发了一个基于Winform的ABP前端应用,为了整合两个应用,我们在菜单表示中增加了一个Tag标签,以区分Winform界面的菜单和Web的菜单。毕竟两个菜单处理方式不同。

  AddForm: {//添加一个表单

  id: this.guid(),

  pid: ,

  名称: ,

  url: ,

  序列:“001”,

  isTop:假,

  展开:1,

  可见:1,

  网页图标: ,

  标签:“web”//特定于Web

  },

  WInform客户端的菜单也向服务器请求数据,并且是动态构造的。Winform客户端的菜单显示效果如下图所示。

  以上是Vue元素前端应用开发中菜单资源管理的详细内容。更多关于Vue元素的菜单资源管理,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: