Vue element实现权限管理业务流程详解

目录
  • 展开渲染标签编辑权限
  • 对话框内树形组件编辑权限
  • 展示所有权限

添加 编辑 删除 角色 都与上一篇 用户类似 只是接口不同

我们只关注其他不一样的:

展开渲染标签编辑权限

el-table-column type="expand"设置了expand则显示为一个可展开的按钮

显示图上的效果 使用了 三重for循环 按照 tree 数据结构 .children 取得下一级数据

<el-table-column type="expand">
          <template slot-scope="scope">
            <el-row v-for="(rights1,index) in scope.row.children" class="vertical" :key="index">
              <el-col :span="5">
                <el-tag class="tag1"
                        disable-transitions
                        closable
                        @close="remRight(scope.row,rights1.id)">
                  {{rights1.authName}}
                </el-tag>
                <i class="el-icon-caret-right"></i>
              </el-col>
              <el-col :span="19">
                <el-row v-for="(rights2,index2) in rights1.children" class="vertical" :key="index2">
                  <el-col :span="6">
                    <el-tag class="tag2"
                            type="success"
                            disable-transitions
                            closable
                            @close="remRight(scope.row,rights2.id)">
                      {{rights2.authName}}
                    </el-tag>
                    <i class="el-icon-caret-right"></i>
                  </el-col>
                  <el-col :span="18">
                    <el-tag class="tag3"
                            type="warning"
                            v-for="(rights3,index3) in rights2.children"
                            disable-transitions
                            :key="index3"
                            closable
                            @close="remRight(scope.row,rights3.id)">
                      {{rights3.authName}}
                    </el-tag>
                  </el-col>
                </el-row>
              </el-col>
            </el-row>
pre 标签 整齐的排列 文本 代码
<!--            <pre>-->
<!--              {{scope.row.children}}-->
<!--            </pre>-->
          </template>
        </el-table-column>
     // 关闭下拉的权限标签 事件
      async remRight(role,rightId){
        //弹窗询问用户是否删除数据
        const confirmResult = await  this.$queding(
          '确定要为该角色删除此权限吗?',
          '提示',
          {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          }
        ).catch(err => err)
        // 如果用户确认删除,则返回值为字符串 confirm
        // 如果用户取消删除,则返回值为字符串 cancel
        // console.log(confirmResult)
        if (confirmResult !== 'confirm'){
          return this.$Msg.info('已取消删除')
        }
        const {data:res} = await this.$http.delete(`roles/${role.id}/rights/${rightId}`)
        if (res.meta.status !== 200) return this.$Msg.error('删除此权限失败!')
        this.$Msg.success('删除用户成功!')
        // 参数不直接引用role.id 为了给 role.children 重新赋值 动态更新 不用刷新页面 再展开查看
        // 返回的data, 是当前角色下最新的权限数据
        role.children = res.data
      },

对话框内树形组件编辑权限

显示树形组件的对话框:

    <!--    编辑角色权限的对话框-->
    <el-dialog
      title="修改角色权限"
      :visible.sync="editNPCRightBox"
      @close="ERNPCClose"
      width="45%">
<!--      树形控件组件-->
      <el-tree
        展示数据源
        :data="RightList"
        适用于需要选择层级时使用
        show-checkbox
        每个树节点用来作为唯一标识的属性,整棵树应该是唯一的
        node-key="id"
        ref="PushRoleRef"
        默认全部展开
        default-expand-all
        默认勾选的节点的 key 的数组
        :default-checked-keys="defKeys"
        配置选项
        :props="treeProps">
      </el-tree>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="ToEditRightNPC">确 定</el-button>
        <el-button @click="editNPCRightBox = false">取 消</el-button>
      </span>
    </el-dialog>
<script>
        editNPCRightBox:false,
        RightList:null,
        // 树形配置 根据哪一个来渲染 名字和children属性
        treeProps:{
          label:'authName',// 看到的是哪一个属性
          children:'children'// 父子嵌套的关系
        },
        defKeys:[],
        // 点击编辑权限按钮时 记录当前ID 供应其他方法使用
        PushRolesId:null
</script>

点击编辑权限按钮 先把要展示的数据源 RightList 再使用递归把拥有权限的id push到 defKeys里 之后显示对话框

// 点击表单内的编辑按钮
      async editNPCRightBoxShow(role){
        this.PushRolesId = role.id
        const {data:res} = await this.$http.get('rights/tree')
        if (res.meta.status !==200) return this.$Msg.error('获取权限列表失败')
        this.RightList = res.data
        //console.log(role)
        await this.getThreeKeys(role,this.defKeys)
        this.editNPCRightBox = true
      },
      // 通过递归的方式 获取角色下所有的三级权限的id 并保存到defKeys 数组中
      getThreeKeys(node,arr){
        // 如果当前节点不包含 children 那么他就是三级节点
        if(!node.children){
          return arr.push(node.id)
        }
        node.children.forEach(item =>{
          this.getThreeKeys(item,arr)
        })
      },

点击体检按钮时 通过ref调用

getCheckedKeys(返回目前被选中的节点所组成的数组)

getHalfCheckedKeys (返回目前半选中的节点的 key 所组成的数组)

把他俩合并 并转成字符串 按照接口约定 向服务器发送请求

      // 编辑角色权限的对话框 内的确定按钮 发送请求
      async ToEditRightNPC(){
        const prams = [
          ...this.$refs.PushRoleRef.getCheckedKeys(),
          ...this.$refs.PushRoleRef.getHalfCheckedKeys()
        ]
        const xxx = prams.join(',')
        //console.log(prams)
        const {data:res} = await this.$http.post(`roles/${this.PushRolesId}/rights`,{rids:xxx})
        if (res.meta.status !==200) return this.$Msg.error('为此角色修改权限失败')
        await this.getNPCList()
        this.editNPCRightBox = false
        this.$Msg.success('修改角色权限成功')
      },
      // 编辑角色权限的对话框被关闭时 清空默认选中的值 防止打开时id 重复
      ERNPCClose(){
        this.defKeys = []
      }

展示所有权限

很简单 就是请求数据 表格渲染

<template>
  <div>
    <!--    面包屑导航-->
    <el-breadcrumb separator-class="el-icon-arrow-right">
      <el-breadcrumb-item :to="{ path: '/home' }" >首页</el-breadcrumb-item>
      <el-breadcrumb-item>权限管理</el-breadcrumb-item>
      <el-breadcrumb-item>权限列表</el-breadcrumb-item>
    </el-breadcrumb>
    <!--卡片区域-->
    <el-card>
      <el-table
        :data="RightsList"
        style="width: 100%"
        stripe
        border>
        <el-table-column type="index" label="#"></el-table-column>
        <el-table-column prop="authName" label="权限名称"></el-table-column>
        <el-table-column prop="path" label="路径"></el-table-column>
        <el-table-column label="权限等级">
          <template slot-scope="scope">
            <el-tag v-if="scope.row.level == 0">一级</el-tag>
            <el-tag v-else-if="scope.row.level == 1" type="success">二级</el-tag>
            <el-tag v-else type="warning">三级</el-tag>
          </template>
        </el-table-column>
      </el-table>
    </el-card>
  </div>
</template>
<script>
  export default {
    name: 'Rights-content',
    created() {
      this.getRightsList()
    },
    data(){
      return{
        RightsList:null
      }
    },
    methods:{
       async getRightsList(){
        const {data:res} = await this.$http.get('rights/list')
         if (res.meta.status !==200) return this.$Msg.error('获取权限列表失败')
         this.RightsList = res.data
      }
    }
  }
</script>

到此这篇关于Vue element实现权限管理业务流程详解的文章就介绍到这了,更多相关Vue element权限管理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue Element前端应用开发之功能点管理及权限控制

    目录 概述 1.权限功能点管理 2.VUE+Element 前端权限控制 概述 本篇随笔介绍功能点管理及权限控制,功能点是作为一个业务对象数据进行管理,在角色范畴上进行分配,而在界面元素控制上,VUE+Element 前端引入Vue自定义指令Directives进行控制. 1.权限功能点管理 我们在前面分析过一个权限系统的表和关系的说明,如下所示. 权限功能点的管理就是对TB_Function的表的管理操作,这个表是我们定义用于系统控制的功能点. 权限功能点的管理为了展示它的树状结果,包括树列表

  • Vue element实现权限管理业务流程详解

    目录 展开渲染标签编辑权限 对话框内树形组件编辑权限 展示所有权限 添加 编辑 删除 角色 都与上一篇 用户类似 只是接口不同 我们只关注其他不一样的: 展开渲染标签编辑权限 el-table-column type="expand"设置了expand则显示为一个可展开的按钮 显示图上的效果 使用了 三重for循环 按照 tree 数据结构 .children 取得下一级数据 <el-table-column type="expand"> <tem

  • Vue Element使用icon图标教程详解(第三方)

    element-ui自带的图标库还是不够全,还是需要需要引入第三方icon,自己在用的时候一直有些问题,参考了些教程,详细地记录补充下 对于我们来说,首选的当然是阿里icon库 教程: 1.打开阿里icon,注册 >登录>图标管理>我的项目 图标管理>我的项目,点进去 新建项目 新建项目 项目名称随便写.前缀注意,不要跟element-ui自带的icon(前缀为:el-icon)重名了. 设置完,点新建 注意前缀.设置完,点新建 现在我们返回阿里icon首页,点进去你想要的icon

  • linux中权限管理命令详解(chmod/chown/chgrp/unmask)

    Linux操作系统对多用户的管理,是非常繁琐的,所以用组的概念来管理用户就变得简单,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户.本文给大家介绍linux中权限管理命令详解(chmod/chown/chgrp/unmask),具体内容如下: chmod 解释 命令名称:chmod 命令英文原意:change the permissions mode of a file 命令所在路径:/bin/chmod 执行权限:所有用户功能描述:改变文件或目录权限 语法 chmod [{ug

  • oracle用户权限管理使用详解

    一.系统的默认用户 1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是sys.登录语句:SQL> conn sys/sys as sysdba; 2)system用户是管理操作员,权限也很大.具有sysoper角色,没有create database的权限,默认的密码是manager.登录语句:SQL> conn system/manager; 3)sys和system这两个用户最大的区别是在于有没有create datab

  • Laravel5权限管理方法详解

    本文实例讲述了Laravel5权限管理的实现方法.分享给大家供大家参考,具体如下: 关于权限管理的思考 最近用laravel设计后台,后台需要有个权限管理.权限管理实质上分为两个部分,首先是认证,然后是权限.认证部分非常好做,就是管理员登录,记录session.这个laravel中也有自带Auth来实现这个.最麻烦就是权限认证. 权限认证本质上就是谁有权限管理什么东西.这里有两个方面的维度,谁,就是用户维度,在用户维度,权限管理的粒度可以是用户一个人,也可以是将用户分组,如果将用户分组,则涉及到

  • 基于vue+element实现全局loading过程详解

    项目中使用的是vue+element实现的全局loading 1.引入所需组件,这里主要就是router和element组件,element组件引入可以参考element官网 2.下面就是重点及代码实现了 首先是全局的一个变量配置参数,代码如下: //全局页面跳转是否启用loading export const routerLoading = true; //全局api接口调用是否启用loading export const apiLoading = true; //loading参数配置 ex

  • 如何优雅地在vue中添加权限控制示例详解

    前言 在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作.作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制. 需求 因为这是一个工作上的业务需求,所以对于我来说主要有两个地方需要进行权限控制. 第一个是侧边菜单栏,需要控制显示与隐藏. 第二个就是页面内的各个按钮,弹窗等. 流程 1.如何获取用户权限? 后端(当前用户拥有的权限列表)-> 前端(通过后端的接口获取到,下文中我们把当前用户的权限列表叫做 permissi

  • Vue登录功能的实现流程详解

    目录 Vue项目中实现登录大致思路 安装插件 创建store 封装axios qs vue 插件 api.js的作用 路由拦截 登录页面实际使用 Vue项目中实现登录大致思路 1.第一次登录的时候,前端调后端的登陆接口,发送用户名和密码 2.后端收到请求,验证用户名和密码,验证成功,就给前端返回一个token 3.前端拿到token,将token存储到localStorage和vuex中,并跳转路由页面 4.前端每次跳转路由,就判断 localStroage 中有无 token ,没有就跳转到登

  • Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解

    一.Vue的实例 1.1.创建一个 Vue 的实例 每个 Vue 应用都是通过 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({// 选项}) 虽然没有完全遵循 MVVM 模型,Vue 的设计无疑受到了它的启发.因此在文档中经常会使用 vm (ViewModel 的简称) 这个变量名表示 Vue 实例. 1.vue.js就是一个构造器,通过构造器Vue来实例化一个对象:例如:var vm = new Vue({}); 2.实例化Vue时,需要传入一个参数(选项

  • vue中的ElementUI的使用详解

    登录+sessionStorage 效果展示 登录成功后会把用户id存入前端的sessionStorage,拦截器会根据是否存在用户id来进行拦截 也可以将用户权限存入sessionStorage,然后当访问某个页面的时候在created方法中判断是否具有权限 <template> <div class="login-wrap"> <el-form class="login-container" ref="loginFormR

随机推荐