react 权限树形结构实现

项目背景 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) // 这里可以拿到选中的所有的权限idsetcheckedKeys(checkedKeysValue.checked)}// 修改权限提交const treesubmit = async () => {const res1 = await getEditPermission({roleId: roleId,permissionIds: checkedKeys})setempower(false)}<TreecheckablecheckedKeys={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'}])


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中线程调度与进程调度全解析

1.线程调度与进程调度的基本概念 1.1 什么是线程调度 线程调度是计算机多线程操作系统中分配CPU时间给各个线程的过程。每个线程代表程序中的一个执行路径&#xff0c;操作系统通过线程调度器分配处理器时间&#xff0c;决定哪个线程将获得执行的机会&#xff0c;以及获得的时…

力扣96. 不同的二叉搜索树

Problem: 96. 不同的二叉搜索树 文章目录 题目描述思路复杂度Code 题目描述 思路 一个数字做根节点的话可能的结果为&#xff1a;其左边数字做子树的组合数字乘以其右边数字做子树的个数之积 1.创建备忘录memo&#xff1b; 2.递归分别求取当前数字左边和右边数字做子树的数量&…

Vue 中 diff 算法原理

1. Diff 概念 vue 基于虚拟 DOM 做更新 。diff 的核心就是比较两个虚拟节点的差异 。Vue 的 diff 算法是平级比较,不考虑跨级比较的情况。内部采用深度递归的方式 + 双指针的方式进行比较。 2. Vue2 Diff 比较流程. 1.1先比较是否是相同节点 key tag 1.2相同节点比较属性,并…

【数据结构与算法 刷题系列】移除链表元素

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;数据结构与算法刷题系列&#xff08;C语言&#xff09; 期待您的关注 目录 一、问题描述 二、解题思路 三、源代码实现 一、问题…

phpstudy配置网站伪静态

apache的伪静态写法&#xff1a; RewriteEngine On RewriteCond % {REQUEST_FILENAME} !-f RewriteCond % (REQUEST_FILENAME) !-d RewriteRule ^(.*)$ indexp?/$1 [QSA, PT,L] nginx写法&#xff1a; location / { index index.html index.php; #autoindex on; if(!…

V2P(车与人)简介

V2P&#xff08;车与人&#xff09;简介 一、定义与概述 V2P&#xff08;Vehicle-to-Pedestrian&#xff09;是车联网&#xff08;V2X&#xff09;技术的一个重要组成部分&#xff0c;指的是车辆与行人之间的通信技术。它基于专用短波通讯DSRC或LTE-V等方式&#xff0c;实现车…

【MySQL精通之路】InnoDB静态数据加密(13)

目录 1.关于静止数据加密 2.加密先决条件 3.为库和通用表空间定义加密默认值 4.FPT表空间加密 5.通用表空间加密 6.Doublewrite文件加密 7.mysql系统表空间加密 8.redolog日志加密 9.undolog日志加密 10.主密钥轮转 11.加密和恢复 12.导出加密的表空间 13.加密和复…

一个程序员的牢狱生涯(35)惊疑

星期一 惊 疑 ‘四道门’被关上,我和老杨在厨房的小窗口处把四哥递出来的饭菜安顿在小推车上。等号子里的小吕也过来后,一起推着小推车挨个给每个号子打饭。女号子那个长头发忧郁的女犯人仍旧没有出来。 打完饭后,我和老杨回到了号子里,众人大都在喝着打回来的小米稀饭。老…

vs报错:E1696 C++ 无法打开 源 文件

项目–> 项目属性–>C/C -->常规 -->使用Windows运行时扩展 -->选"是" vs 2019 报错&#xff1a;C 无法打开 源 文件 - 知乎 (zhihu.com)

基于trunk、yew构建web开发脚手架

trunk 构建、打包 rust wasm 程序&#xff1b;yewweb 前端开发库&#xff1b; 项目仓库yew-web trunk 之前已经简单介绍了trunk,全局安装&#xff1a; $> cargo install --locked trunk常用命令&#xff1a; trunk build 基于wasm-bindgen构建 wasm 程序。trunk watch …

stm32学习-串口发送和接口

串口接收的方法 查询 流程&#xff1a; 1.在主函数里不断判断RXNE标志位&#xff1b;如果置1了&#xff0c;就说明接收到数据了&#xff1b; 2.调用ReceiveData读取DR寄存器 #include "stm32f10x.h" // Device header #include "Delay.h&…

vue17:v-bind对css样式的控制增强

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

『USB3.0Cypress』FPGA开发(3)GPIF II短包零包时序分析

文章目录 1.时序参数2.FX3_PCLK3.短包和零包3.1短包时序3.2零包ZLP时序 4.传送门 1.时序参数 AN65974文档中明确了操作GPIF II接口时的时序参数&#xff0c;上一篇文章中给出了读写时序图&#xff0c;本篇第二节给出ZLP写周期时序&#xff0c;这里说明相关的时序参数。应该注意…

initial begin end 和always语句区别

initial语句&#xff1a;只执行一次always语句&#xff1a;不断重复执行&#xff0c;直到仿真结束&#xff0c; initial begin 语句1; ... 语句n; end always (posedge clk or negedge clear) begin if(!clear) qout 0; //异步清零 else qout 1; end…

用户态下屏蔽全局消息钩子 —— ClientLoadLibrary 指针覆盖

目录 前言 一、研究 SetWindowsHookEx 的机制 二、概念验证 三、运行效果分析 四、总结与展望 参考文献 原文出处链接&#xff1a;[https://blog.csdn.net/qq_59075481/article/details/139206017] 前言 SetWindowsHookEx 函数帮助其他人员注入模块到我们的进程&#x…

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17 需强化知识点 组合问题&#xff1a;感受遍历的横向和纵向 题目 77. 组合 注意path要深拷贝 class Solution:def combine(self, n: int, k: int) -> List[List[int]]:result []def backtrac…

C++中的模板类的定义与使用

文章目录 前言模板类的定义与使用方式模板类的总结 前言 在C中&#xff0c;模板类是一种通用的类模板&#xff0c;允许在类定义和成员函数实现时使用不具体指定的数据类型或参数。下面是模板类的定义与使用方式&#xff0c;并对其进行总结&#xff1a; 模板类的定义与使用方式…

Kubernetes(k8s) v1.30.1 本地集群部署 安装metallb 支持LoadBalancer 生产环境 推荐 BGP模式部署

1 metallb 安装参考:Kubernetes(k8s) v1.30.1 本地集群部署 默认不支持LoadBalancer metallb来解决-CSDN博客 2 删除 Layer 2 模式 配置 kubectl delete -f IPAddressPool.yaml kubectl delete -f L2Advertisement.yaml kubectl delete -f discuz-srv.yaml 3 配置 k8s Metal…

nacos-opera(k8s)安装问题解决

整理一些关于k8s部署nacos出现的一些恶心的问题 网上说其他说的更改数据库连接都未解决。 在用nacos-opera想安装高可用nacos时连接mysql数据库报错: 报错具体项: No DataSource set 具体就是说没找到数据源。 第一个 检查一下nacos连接数据库配置 : 第二个 检查一下数据库…