通过递归的形式,获取角色下所有三级权限id,并保存到数组中(后台数据为树形)

通过递归的形式,获取角色下所有三级权限id,并保存到数组中(后台数据为树形)

1.通过@click="showSetRightDialog(scope.row)拿到数据对象

<!-- slot-scope="scope" -->
<template slot-scope="scope"> 
    <el-button size="mini" type="primary" icon="el-icon-edit">编辑</el-button>
    <el-button size="mini" type="danger" icon="el-icon-delete">删除</el-button>
    <el-button size="mini" type="warning" icon="el-icon-setting" @click="showSetRightDialog(scope.row)">分配权限</el-button>
</template>

2.私有数据 重点:默认选中节点id值数组 defKeys: [],

   data() {
        return {
            //所有角色列表数据
            rolelist: [],
            //控制分配权限的对话框显示与隐藏
            setRightDialogVisible: false,
            //所有权限的数据
            rightlist: [],
            // 树形控件 指定数据源中绑定的字段
            treeProps: {
            children: 'children',
            label: 'authName'
            },
            //默认选中节点id值数组
            defKeys: [],
            //当前即将分配权限的角色id
            roleId:'',
        }
    },

3.通过递归的形式,获取角色下所有三级权限id,并保存到defKeys数组。这个if判断就是停止要求 ,他的要求就是,如果该节点没有children属性,证明了这是一个三级节点,然后arr.push(node.id),把这个id保存到数组中。
这里的node,arr,都是形参。

            // 通过递归的形式,获取角色下所有三级权限id,并保存到defKeys数组中
            getLeafKeys(node, arr) {
            //如果当前node没节点不包含children属性,则是三级节点
            if (!node.children) {
            return arr.push(node.id)
            }
            // console.log(node);
            node.children.forEach(item =>
            this.getLeafKeys(item,arr)
            )
  1. async showSetRightDialog(role)该函数进行数据渲染,调用递归函数this.getLeafKeys(role, this.defKeys) ,然后进行数据展示
            // 展示分配权限的对话框
            async showSetRightDialog(role) {
            this.roleId=role.id
            //获取所有权限数据
            const {data:res}=await this.$http.get('rights/tree')
            if (res.meta.status !== 200) {
            return this.$message.error("权限数据获取失败")
            }
            this.rightlist = res.data
            //console.log(this.rightlist);
            //递归回去三级节点的id
            this.getLeafKeys(role, this.defKeys)
            //console.log(this.defKeys);
            this.setRightDialogVisible = true  
            },
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值