IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 改写el-tree实现角色权限设置 -> 正文阅读

[JavaScript知识库]改写el-tree实现角色权限设置

改写el-tree实现角色权限设置

  • 取消el-tree自带的父子关系,自己通过递归实现父子关系,这样在选中其中一个子级的时候,父级也会勾选,点击父级也可以全选和取消全选等 ,能够随心控制
<template>
 
      <el-tree
        ref="tree"
        :data="data"
        node-key="menuId"
        :check-strictly="true"
        :props="props"
        show-checkbox
        :default-expanded-keys="[-1]"
        @check="handleCheckChange"
      />
</template>

<script>

export default {
  name: 'TrialEthicsWebRoleMenu',
  data() {
    return {
      data: [
        {
          menuName: '全选',
          menuId: -1,
          children: []
        }
      ],
      props: {
        children: 'children',
        label: 'menuName'
      },
      postId: ''
    }
  },
  created() {
    this.getList()
  },
  mounted() {},

  methods: {
    handleCheckChange(node, flag) {
      node.flag = !node.flag
      if (node.flag) {
        if (node.children?.length) {
          this.recuision(node.children)
          return
        }
        if (node.parentId == 0) {
          return
        }
        this.a(node.parentId)
      } else {
        const arr = this.$refs.tree.getCheckedKeys()
        this.$refs.tree.setCheckedKeys(arr.filter((v) => v !== -1))
        this.data[0].flag = false
        if (node.children?.length) {
          this.recuisionClose(node.children)
        }
        if (node.parentId == 0) {
          return
        }
      }
    },
    // 从子级递归找父级 并选中
    a(parentId) {
      const find = this.findId(this.data, parentId)
      find.flag = true
      this.$refs.tree.setCheckedKeys([
        ...this.$refs.tree.getCheckedKeys(),
        parentId
      ])
      if (find.parentId !== 0) {
        this.a(find.parentId)
      }
    },
    // 查找Id节点
    findId(array, parentId) {
      var obj = {}
      for (let index = 0; index < array.length; index++) {
        const item = array[index]
        if (item.menuId === parentId) {
          obj = item
          break
        }
        if (item.children?.length) {
          if (JSON.stringify(this.findId(item.children, parentId)) != '{}') {
            obj = this.findId(item.children, parentId)
          }
        }
      }
      return obj
    },
    // 点父节点全选中
    recuision(array) {
      for (let index = 0; index < array.length; index++) {
        const item = array[index]
        item.flag = true
        this.$refs.tree.setCheckedKeys([
          ...this.$refs.tree.getCheckedKeys(),
          item.menuId
        ])
        if (item.children?.length) {
          this.recuision(item.children)
        }
      }
    },
    // 点父节点 取消
    recuisionClose(array) {
      for (let index = 0; index < array.length; index++) {
        const item = array[index]
        const arr = this.$refs.tree.getCheckedKeys()
        item.flag = false
        this.$refs.tree.setCheckedKeys(arr.filter((v) => v !== item.menuId))
        if (item.children?.length) {
          this.recuisionClose(item.children)
        }
      }
    },
    submit() {
      if (!this.postId) {
        this.$message.warning('请选择角色')
        return
      }
      if (!this.$refs.tree.getCheckedKeys().length) {
        this.$message.warning('请选择权限')
        return
      }
      const data = {
        belong: 'ethics',
        menuIds: this.$refs.tree.getCheckedKeys(),
        postId: this.postId
      }
      this.system('postPermission', data, (res) => {
        this.$message.success('保存成功')
      })
    },
    getCheckList(postId) {
      this.postId = postId
      const data = {
        postId: postId,
        belong: 'ethics'
      }
      this.system('menuRoleId', this.$qs.stringify(data), (res) => {
        this.getList(res.data)
      })
    },
    getList(arr) {
      const data = {
        belong: 'ethics'
      }
      this.system('menuListAll', data, (res) => {
        this.data[0].children = res.data
        this.resour(this.data)
      })
    },
    resour(array) {
      for (let index = 0; index < array.length; index++) {
        const item = array[index]
        item.flag = false
        if (item.children) {
          this.resour(item.children)
        }
      }
    }
  }
}
</script>

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:27:19  更:2022-04-22 18:30:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:32:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码