电商后台管理系统——权限管理模块

电商后台管理系统——权限管理模块电商后台管理系统——权限管理模块电商后台管理系统的权限管理模块分为角色列表和权限列表两部分,两部分流程图大概如下权限列表实现过程:

大家好,又见面了,我是你们的朋友全栈君。

电商后台管理系统——权限管理模块

电商后台管理系统的权限管理模块分为角色列表和权限列表两部分,两部分流程图大概如下
在这里插入图片描述
在这里插入图片描述

1.权限列表实现过程

创建路由组件配置路由——布局基本面包屑导航卡片视图——表单绑定数据提供方法获取权限列表数据
表单有三列数据:权限名称, 路径 ,权限等级,权限等级通过作用域与 插槽放入el-tag实现自定义格式,再根据数据的level判断显示哪个等级的tag
表单结构:

<el-card>
      <el-table :data="rightList" border stripe>
          <el-table-column type="index"></el-table-column>
          <el-table-column label="权限名称" prop="authName"></el-table-column>
          <el-table-column label="路径" prop="path"></el-table-column>
          <el-table-column label="权限等级" prop="level">
            <template slot-scope="scope">
             <el-tag v-if="scope.row.level==='0'">一级</el-tag>
             <el-tag type="success" v-else-if="scope.row.level==='1'">二级</el-tag>
             <el-tag type="warning" v-else>三级</el-tag>
             </template>
          </el-table-column>
      </el-table>
  </el-card>

方法:通过发送get请求获取数据

methods:{ 
   
        //获取权限列表
      async  getRightList(){ 
   
            const { 
   data:res}=await this.$http.get('rights/list')
            if(res.meta.status!==200){ 
   
                return this.$message.error('获取权限列表失败')
            }
            this.rightList=res.data
        }
    }

2.角色列表实现过程

整个页面功能有添加角色功能,以及一个表单,表单有三列数据:角色名称,角色描述,操作 。操作通过作用域插槽实现布局编辑,删除,分配权限按钮。
实现流程:添加角色列表组件配置路由——布局基本面包屑导航卡片视图表单等——表单绑定数据提供方法获取权限列表数据——操作功能模块实现
困难点:

1.表单的展开列实现还需要通过三重嵌套for循环生成下拉列表
通过在作用域与插槽里使用栅格布局el-row(行),el-col(列),分为24列
通过scope.row.children拿到一级权限数据,将key值设置为拿到的数据item的id

<el-tag closable @close="removeRightById(scope.row, item1.id)">{ 
   { 
   item1.authName}}</el-tag>

通过 for 循环 嵌套渲染二级权限

`<el-row :class="[i2 === 0 ? '' : 'bdtop', 'vcenter']" v-for="(item2, i2) in item1.children" :key="item2.id">`

i2是索引
通过for继续渲染三级权限

 <el-tag type="warning" v-for="(item3, i3) in item2.children" :key="item3.id" closable @close="removeRightById(scope.row, item3.id)">{ 
   { 
   item3.authName}}</el-tag>

2.分配权限的操作

分配权限按钮对话框(树形结构弹窗)——分配权限按钮绑定点击事件——渲染所有权限数据一级默认选中数据到页面树形结构——分配权限对话框确定按钮绑定分配权限事件

<el-tree :data="rightslist" :props="treeProps" show-checkbox node-key="id" default-expand-all :default-checked-keys="defKeys" ref="treeRef"></el-tree>

所有权限数据获取与前面数据获取写法一致。默认数据选中需要通过 el-tree的属性: default-checked-keys=“defKeys” defkeys 。
思路是点击分配权限按钮时将当前角色所有的三级权限id存入defkeys,当前角色的id通过在点击分配权限按钮事件里传入scope.row

getLeafKeys(node, arr) { 
   
      // 如果当前 node 节点不包含 children 属性,则是三级节点
      if (!node.children) { 
   
        return arr.push(node.id)
      }

      node.children.forEach(item => this.getLeafKeys(item, arr))
    },

上面代码块是通过递归的形式,获取角色下所有三级权限的id,并保存到 defKeys 数组中(判断是否包含child属性,包含则不是三级节点,则让该节点的子节点循环遍历递归调用该函数)
注意需要监听关闭对话框事件,因为需要重置defkeys数组,不清空的话,每次之前的角色都保存在数组里了。
确定按钮绑定事件:
el-tree的getCheckedKeys(),getHalfCheckedKeys()可以获得全选和半选中的数组,将数据post传入后台,再重新调用获取角色方法。

async allotRights() { 
   
      const keys = [
        ...this.$refs.treeRef.getCheckedKeys(),
        ...this.$refs.treeRef.getHalfCheckedKeys()
      ]

      const idStr = keys.join(',')

      const { 
    data: res } = await this.$http.post(
        `roles/${ 
     this.roleId}/rights`,
        { 
    rids: idStr }
      )

      if (res.meta.status !== 200) { 
   
        return this.$message.error('分配权限失败!')
      }

      this.$message.success('分配权限成功!')
      this.getRolesList()
      this.setRightDialogVisible = false
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145903.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 纵向、横向导航菜单及二级弹出菜单

    纵向、横向导航菜单及二级弹出菜单一、纵向导航菜单及二级弹出菜单首先在body中添加一个div标签,其中包含ulliul的标签结构存放网站菜单,效果如下:&lt;%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%&gt;&lt;%Stringpath=request.getContextPath();StringbasePath=…

    2022年7月26日
    11
  • ocker nginx 配置反向代理和负载均衡[通俗易懂]

    ocker nginx 配置反向代理和负载均衡

    2022年4月2日
    39
  • 简单区分单射、满射与双射

    简单区分单射、满射与双射我的机器学习教程「美团」算法工程师带你入门机器学习已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~利用泛…

    2022年6月10日
    112
  • Java开发人员必须掌握的Linux命令-学以致用(五)

    子曰:“工欲善其事,必先利其器。“做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解让知识或者技术,让学习之旅充满乐趣,这就是写博文的初心。今天是周末,首先祝大家周末愉快了,分享一张今天早上去外面拍的照片:图书馆外面的小公园的春意。这周整理了Linux的命令,也被我称为Linux…

    2022年2月28日
    39
  • jvm垃圾回收算法有哪些_jvm垃圾回收过程

    jvm垃圾回收算法有哪些_jvm垃圾回收过程JVM垃圾回收算法两个概念:新生代:存放生命周期较短的对象的区域。老年代:存放生命周期较长的对象的区域。相同点:都在Java堆上1.标记–清除算法执行步骤:标记:遍历内存区域,对需要回收的对象打上标记。清除:再次遍历内存,对已经标记过的内存进行回收。图解:缺点:效率问题;遍历了两次内存空间(第一次标记,第二次清除)。空间问题:容易产生大量内存碎片,当再需要一块比…

    2022年9月11日
    0
  • 怎样卸载干净eclipse_eclipse卸载又重新安装之曲折心路

    以前下过EclipseIDEforJavaDevelopers(其实当时自己下的时候也没有什么详细查应该下哪个,随便下的一个版本),课程老师要求下载红框框起来的这个EclipseIDEforEnterpriseJavaDevelopers(压缩包名字:eclipse-jee-2019-09-R-win32-x86_64)。其实问题不大,卸了重下呗。但是(敲黑板),踩了几个坑,差点摔…

    2022年4月6日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号