当前位置: 首页 > article >正文

管理后台项目-07-菜单管理和动态展示菜单和按钮

目录

1-菜单管理

1.1-菜单管理列表

1.2-添加|修改功能

1.3-删除菜单

2-动态菜单按钮展示

2.1-路由文件的整理

2.2-动态展示不同的路由


1-菜单管理

 

当用户点击菜单管理的时候,会展示当前所有菜单,树型结构展示...并且可以对菜单进行新增编辑删除操作。需要留意页面结构,菜单默认最多三级(全部数据不算菜单),但是服务端需要拼凑四级菜单数据(全部数据算顶级level=1),到了第三级(按钮级别),就不能再新增下一级了。

1.1-菜单管理列表

进入页面,需要直接获取菜单的全部数据,并且树型结构展示,,需要使用到el-table树形数据。需要调用服务端接口,页面结构如下:

 页面加载完成需要调用接口
getPermissionList() {return request({url: `${api_name}`,method: 'get'})}

服务端返回数据类似如下:
 

 

 

 

 

 

1.2-添加|修改功能

 

当用户点击列表的添加或者编辑按钮时,需要展示dialog对话框,并且我们需要动态显示添加几级菜单文字。而且还需要对添加的内容进行简单的校验rules自定义校验规则;一些小的细节,菜单两级(level=2||level=3),按钮(level=4)一级总共三级,需要一些按钮进行判断disabled。

 

 动态计算标题和校验规则;

 这里需要用到的组件调用的api方法和页面的methods方法贴出

 

 /* 根据级别得到要显示的添加dialog的标题*/
    getAddTitle (level) {
      if (level===1 || level===2) {
        return '添加菜单'
      } else if (level===3){
        return '添加功能'
      }
    }, 
   
    /* 显示添加权限的界面(菜单或功能)*/
    toAddPermission (row) {
      this.dialogPermissionVisible = true
      this.permission.pid = row.id
      this.permission.level = row.level + 1
      this.permission.type = this.permission.level===4 ? 2 : 1
      this.permission.pname = row.name // 用于显示父名称, 但提交请求时是不需要的
      
      // 清除校验(必须在界面更新之后)
      this.$nextTick(() => this.$refs.permission.clearValidate())
    },

    /* 显示菜单添加或更新的dialog*/
    toUpdatePermission(row) {
      this.dialogPermissionVisible = true
      this.permission = {...row}  // 使用浅拷贝
      this.permission.type = this.permission.level===4 ? 2 : 1
      // 清除校验(必须在界面更新之后)
      this.$nextTick(() => this.$refs.permission.clearValidate())
    },


    /* 添加或更新功能权限*/
    addOrUpdatePermission() {
      this.$refs.permission.validate(async valid => {
        if (valid) {
          const {pname, ...perm} = this.permission // pname不需要携带
          const result = await this.$API.permission[perm.id ? 'updatePermission' : 'addPermission'](perm)
          this.$message.success(result.message || `${perm.id ? '修改' : '添加'}成功!`)
          this.resetData()
          this.fetchPermissionList()
        }
      })
    }

 

1.3-删除菜单

当我们点击删除按钮的时候,我们需要调用服务端接口删除对应的数据;

 

 

 

2-动态菜单按钮展示

当我们给不同的角色授权成功的时候,当不同的用户登录后,每个用户看到的界面菜单不一样,这时我们就需要动态展示菜单;所以我们需要对当前的路由进行划分几类,比如常量路由(所有欧用户都可以看到),异步路由(授权的用户才可以看到),任意路由。

2.1-路由文件的整理

src\router\index.js文件中我们需要将之前的路由分类,之前我们是放到了常量路由里面,不管什么用户登录进来都可以看到,现在我们需要将路由进行分类。

 

 

 

 

2.2-动态展示不同的路由

我们在登录成功后,调用了服务器获取用户详细信息,服务器返回了当前用户的路由和按钮信息,我们需要拿到这些信息进行处理,过滤出当前用户的菜单按钮权限信息。我们需要对查询用户信息的vuex中的store文件进行相关开发,在vuex中存储相关信息。

用户信息接口返回数据:



在action提交相关数据: 



 

 

 

然后需要修改src\layout\components\Sidebar\index.vue中的循环路由的数据,没有修改之前,模板代码只是拿常量路由。我们应该重新赋值,使用我们计算的路由信息。

 如果要展示和隐藏按钮需要使用仓库数据判断是否存在就行。

 这个在给角色授权的时候,需要留意一下。

 vue elementUI tree树形控件获取父节点ID的实例
        修改源码:
        情况1: element-ui没有实现按需引入打包
          node_modules\element-ui\lib\element-ui.common.js    25382行修改源码  去掉 'includeHalfChecked &&'
          // if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {
          if ((child.checked || child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {
        情况2: element-ui实现了按需引入打包
          node_modules\element-ui\lib\tree.js    1051行修改源码  去掉 'includeHalfChecked &&'
          // if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {
          if ((child.checked || child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {


http://www.kler.cn/a/15603.html

相关文章:

  • 深入理解 C++ 二叉树
  • SpringBoot多环境配置的实现
  • 【MySQL】MySQL的笛卡尔积现象是什么?简单说说
  • 2.STM32之通信接口《精讲》之USART通信
  • 【STL】set,multiset,map,multimap的介绍以及使用
  • OpenTelemetry 赋能DevOps流程的可观测性革命
  • API淘宝数据接口
  • 0426 java内部类
  • 针对Vue前后端分离项目的渗透思路
  • 【Python_Opencv图像处理框架】信用卡数字识别项目
  • ORACLE常用命令
  • java基础+注解笔记【狂神说java】
  • Go基础篇:类型系统
  • “数字中国·福启海丝”多屏互动光影艺术秀27日在福州举办
  • Windows更新【bug】
  • (一)Kubernetes - 介绍
  • Disruptor --优雅的使用
  • 国民技术N32G430开发笔记(5)- 基本定时器TIM6的使用
  • 外网SSH远程连接linux服务器,看这一篇就够了
  • 动态内存管理
  • 【zotero】从知网万方维普WOS等数据库上导出格式引文-引文格式到zotero中
  • 【RPA开发】lxml 库之 etree 使用详解
  • AI智能课程:第五讲chatGPT搞定APP小程序
  • 【VM服务管家】VM4.x算法模块开发_4.2 联合OpenCV开发
  • 推荐一些免费可用的热门 API
  • JAVA面试中遇到的那些坑,80%的人都种过招