当前位置: 代码网 > it编程>编程语言>Javascript > react 权限树形结构实现代码

react 权限树形结构实现代码

2024年06月11日 Javascript 我要评论
项目背景 react + ant design实现效果1 将后台返回的平铺数据 , 转成树形结构 const [roleid, setroleid] = usestate('') //存储角色id

项目背景 react + ant design

实现效果

1 将后台返回的平铺数据 , 转成树形结构

 const [roleid, setroleid] = usestate('') //存储角色id
  // 弹权限弹窗
  const empowerhandle = async record => {
    setroleid(record.roleid)
    //获取单独的权限
    const res1 = await getpermission({ roleid: record.roleid })
    console.log('res1', res1)
    const res2 = await getsimple()
    console.log('res2', res2)
    //平铺数据转树形结构
    function buildtree (data, parentid = 0) {
      let tree = [] // 用于存放结果的数组
      // 遍历数据,找到parentid匹配的项
      for (let item of data) {
        if (item.parentid === parentid) {
          // 创建一个新对象,准备添加子节点
          let node = { ...item, children: buildtree(data, item.permissionid) } // 递归调用,处理子节点
          tree.push(node) // 将当前节点添加到结果数组中
        }
      }
      return tree
    }
    // title替换permissionname,让树形结构内容可以展示出来
    const res3 = res2.map(item => {
      return {
        ...item,
        title: item.permissionname,
        key: item.permissionid
      }
    })
    const result1 = buildtree(res1, 0) // 获取单独的权限
    console.log('res1111111', result1)
    // 获取res1中的permissionid作为已选中的id列表
    const selectedids = res1.map(item => item.permissionid)
    console.log('selectedids', selectedids)
    // 构建treedata时同时处理选中状态
    const result = buildtree(res3, 0)
    console.log('3333333333333', result)
    settreedata(result)
    setcheckedkeys(selectedids)
    setempower(true)
  }

2 拿到角色id并传递到tree中

  // 获取选中的权限,为了修改权限
  const ontreecheck = checkedkeysvalue => {
    console.log('oncheck', checkedkeysvalue.checked) // 这里可以拿到选中的所有的权限id
    setcheckedkeys(checkedkeysvalue.checked)
  }
  // 修改权限提交
  const treesubmit = async () => {
    const res1 = await geteditpermission({
      roleid: roleid,
      permissionids: checkedkeys
    })
    setempower(false)
  }
    <tree
                checkable
                checkedkeys={checkedkeys}
                defaultexpandall={false} //让授权后的弹窗只展示根标签
                treedata={treedata}
                // multiple // 支持多选。当父子不关联,添加后,点击父,不能控制所有子
                // showline //删除这里,树形结构左侧的下拉线消失,图标从+-更改为默认的△
                checkstrictly // 开启后,父子节点不关联(子空一个,父就空)
                oncheck={ontreecheck}
              />
  const [treedata, settreedata] = usestate([
    {
      title: '0-1',
      key: '0-1',
      children: [
        {
          title: '0-1-0-0',
          key: '0-1-0-0'
        },
        {
          title: '0-1-0-1',
          key: '0-1-0-1'
        },
        {
          title: '0-1-0-2',
          key: '0-1-0-2'
        }
      ]
    },
    {
      title: '0-2',
      key: '0-2'
    }
  ])

到此这篇关于react 权限树形结构实现的文章就介绍到这了,更多相关react 权限树形结构内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com