温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Vue element怎么实现权限管理业务

发布时间:2022-08-30 15:16:27 来源:亿速云 阅读:145 作者:iii 栏目:开发技术

这篇文章主要介绍了Vue element怎么实现权限管理业务的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue element怎么实现权限管理业务文章都会有所收获,下面我们一起来看看吧。

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
      },

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

Vue element怎么实现权限管理业务

显示树形组件的对话框:

    <!--    编辑角色权限的对话框-->
    <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 = []
      }

展示所有权限

Vue element怎么实现权限管理业务

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

<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"
        
        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怎么实现权限管理业务”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI