RBAC三级树状菜单实现(从前端到后端)未完待续
1、表格设计
RBAC
2、前端路由
根据不同的用户id显示不同的菜单。
根据路由
3、多级菜单
展示所有权限,并且根据当前用户id展示它所属的角色的所有菜单。
前端树状展示
思路:
后端:传给前端map,map里1个是所有菜单,1个是它有的菜单。

前端代码:
树形图:
<div v-if="menuData.length > 0"><el-treeref="tree":data="menuData"show-checkbox:default-checked-keys="getMenuByRoleId"node-key="id"default-expand-all@check-change="handleCheckChange":props="defaultProps"></el-tree>
</div>
data区域
data() {return {roleOptions: [], //角色分类selectedRole: 2, // 选中的角色分类menuData: [], //根据角色分类查所有的菜单selectedPermissions: [], // 选中的权限defaultProps: {children: "childrenList",label: "name",},getMenuByRoleId: [],};},
method:
methods: {//选的所有的权限handleCheckChange() {const checkedKeys = this.$refs.tree.getCheckedKeys();console.log("已勾选的节点:", checkedKeys);},savePermissions() {// 执行保存权限的逻辑,可以将选中的权限发送到后端进行处理console.log(this.selectedPermissions);// 发送请求或者执行其他操作...},handleRoleChange() {// 角色分类变化时,清空选中的权限this.findAllRole();this.selectedPermissions = [];},findAllRole() {console.log(this.selectedRole);this.$axios.get("/api/pc-zdy-sys/role?roleId=" + this.selectedRole).then((res) => {if (res.data.code === 200) {this.menuData = res.data.data.allMenu; //所有菜单数组const roleList = res.data.data.getMenuByRoleId; // 角色拥有的菜单对象数组this.getMenuByRoleId = roleList.map((e) => e.id); //变成菜单id}});},findRoleType() {this.$axios.get("/api/pc-zdy-sys/role/roleType").then((res) => {if (res.data.code == 200) {this.roleOptions = res.data.data;}});},},created() {this.findRoleType();this.findAllRole();},

4、菜单递归处理
4.1 父菜单找子菜单
public List<MenuVO> queryMenuByUserId() {String userId = Application.getUserId();//根据用户查角色,查角色拥有的所有菜单List<Menu> menus = menuMapper.queryMenyByUserId(userId);//把子菜单弄给父菜单List<MenuVO> menuVOList = new ArrayList<>();for (Menu menu : menus) {MenuVO menuVO = new MenuVO();BeanUtils.copyProperties(menu,menuVO);menuVOList.add(menuVO);}//针对List<MenuVO>,先过滤一遍,留下有父id 的菜单List<MenuVO> collect = menuVOList.stream().filter(menu -> menu.getParentId() == null)//有父id的菜单 放到对应的id的菜单下.map(menu -> {menu.setChildrenList(getMenus(menuVOList, menu));return menu;}).collect(Collectors.toList());return collect;}
4.2 为子菜单找子菜单
private List<MenuVO> getMenus(List<MenuVO> list, MenuVO menu) {List<MenuVO> menuVOList = new ArrayList<>();for (MenuVO son : list) {// 判断 son 的 parentId 是否等于传入的一级菜单的 idif (son.getParentId() != null && son.getParentId().equals(menu.getId())) {if (son.getChildrenList() == null) {son.setChildrenList(new ArrayList<>());}// 为子菜单找孙菜单son.setChildrenList(getMenus(list, son));menuVOList.add(son);}}return menuVOList;}
相关文章:
RBAC三级树状菜单实现(从前端到后端)未完待续
1、表格设计 RBAC 2、前端路由 根据不同的用户id显示不同的菜单。 根据路由 3、多级菜单 展示所有权限,并且根据当前用户id展示它所属的角色的所有菜单。 前端树状展示 思路: 后端:传给前端map,map里1个是所有菜单&am…...
牛客网Verilog刷题——VL41
牛客网Verilog刷题——VL41 题目答案 题目 请设计一个可以实现任意小数分频的时钟分频器,比如说8.7分频的时钟信号,注意rst为低电平复位。提示:其实本质上是一个简单的数学问题,即如何使用最小公倍数得到时钟周期的分别频比。设小…...
大整数截取解决方法(java代码)
大整数截取解决方法(java代码) 描述输入描述输出描述输入示例输出示例前置知识:代码 解题思路来自这个博客:简单^不简单 https://blog.csdn.net/younger_china/article/details/126376374 描述 花花有一个很珍贵的数字串…...
Spring Boot使用@Async实现异步调用:自定义线程池
一、定义线程池 第一步,先在Spring Boot主类中定义一个线程池,比如: SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}EnableAsyncConfigurat…...
GFS 分布式文件系统
目录 一、GlusterFS 概述 1.2.GlusterFS特点 1.3.GlusterFS 术语 1.4GlusterFS 的工作流程 二、GlusterFS的卷类型 2.1分布式卷(Distribute volume) 2.1.1特点 2.2条带卷(Stripe volume) 2.2.1条…...
PHP-mysql学习笔记
如题 记录发送emoji数据无法正常显示的问题PHPMysql 记录 发送emoji数据无法正常显示的问题 问题描述 前端发送关于emoji的表情数据给php,php写入mysql php接收到了数据,但无法写入写入过后返回前端无法正常显示 PHP 在对应的pdd函数中设置字符集为utf8mb4 Mysql emoji数…...
AI技术快讯:清华开源ChatGLM2双语对话语言模型
ChatGLM2-6B是一个开源项目,提供了ChatGLM2-6B模型的代码和资源。根据提供的搜索结果,以下是对该项目的介绍: 论文:https://arxiv.org/pdf/2103.10360.pdf ChatGLM2-6B是一个开源的双语对话语言模型,是ChatGLM-6B模…...
网络基础知识
1、什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2、OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表…...
【应用层】HTTPS协议详细介绍
文章目录 前言一、什么是"加密"二、常见的加密方式三、数据摘要(数据指纹)四、证书总结 前言 HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层,由于HTTP协议内容都是按照文本的方式明文传输的ÿ…...
【Tensorboard+Pytorch】使用注意事项
安装 tensorboard/tensorboardx版本需要与tensorflow保持一致(本人使用2.2) 调用 环境变量 在终端或CMD中使用时,常见报错“tensorboard 不是内部或外部命令……”,需要添加环境变量路径path。具体为tensorboard.exe所在目录(A…...
设计模式行为型——命令模式
目录 什么是命令模式 命令模式的实现 命令模式角色 命令模式类图 命令模式举例 命令模式代码实现 命令模式的特点 优点 缺点 使用场景 注意事项 什么是命令模式 命令模式(Command Pattern)是一种数据驱动的设计模式,它属…...
13-2_Qt 5.9 C++开发指南_线程同步_QMutex+QMutexLocker(目前较为常用)
文章目录 1.线程同步的概念2. 基于互斥量的线程同步3.QMutex实现线程同步源代码3.1 qdicethread.h3.2 qdicethread.cpp3.3 dialog.h3.4 dialog.cpp 4.QMutexLocker 实现线程同步源代码4.1 qdicethread.h4.2 qdicethread.cpp4.3 dialog.h4.4 dialog.cpp 1.线程同步的概念 在多线…...
金融行业选择哪种SSL证书才安全可靠
由于金融领域等网站拥有大量客户的敏感信息,且每天都有大量交易需要进行,涉及到大量的资金问题,当这些机构提供的网络和Web应用程序没有足够的安全措施来阻止黑客窃取数据时,就会出现严重的安全问题。而且由于黑客每天都在开发越来…...
面试总结(三)
1.进程和线程的区别 根本区别:进程是操作系统分配资源的最小单位;线程是CPU调度的最小单位所属关系:一个进程包含了多个线程,至少拥有一个主线程;线程所属于进程开销不同:进程的创建,销毁&…...
青大数据结构【2016】
一、单选 二、简答 3.简述遍历二叉树的含义及常见的方法。 4.简要说明图的邻接表的构成。 按顺序将图G中的顶点数据存储在一维数组中, 每一个顶点vi分别建立一个单链表,单链表关联依附顶点vi的边(有向图为以vi为尾的弧)。 邻接…...
聊聊拉长LLaMA的一些经验
Sequence Length是指LLM能够处理的文本的最大长度,越长,自然越有优势: 更强的记忆性。更多轮的历史对话被拼接到对话中,减少出现遗忘现象 长文本场景下体验更佳。比如文档问答、小说续写等 当今开源LLM中的当红炸子鸡——LLaMA…...
线程池的使用详解
一 使用线程池的好处 池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 线程池提供了一种限制和管理资源(包括执行一个任…...
刷题笔记 day4
力扣 611 有效三角形的个数 首先需要知道如何判断 三个数是否能构成三角形。 假如 存在三个数 a < b < c,如果要构成三角形,需要满足: ab > c ; a c > b ; b c > a ; 任意两个数大于第三个数就可构成三角形。 其实不难…...
Python 2.x 中如何使用flask模块进行Web开发
Python 2.x 中如何使用 Flask 模块进行 Web 开发 引言: 随着互联网的快速发展,Web开发成为了互联网行业中一项非常重要的技术。而在 Python 的Web开发中,Flask框架是一种非常流行的选择。它简单轻巧,灵活易用,适合中小型项目的快…...
spring websocket 调用受权限保护的方法失败
版本 spring-security 5.6.10 spring-websocket 5.3.27 现象 通过AbstractWebSocketHandler实现websocket端点处理器 调用使用PreAuthorize注解的方法报错,无法在SecurityContext中找到认证信息 org.springframework.security.authentication.AuthenticationCred…...
手把手教你用Wireshark抓包分析:一个Easymesh设备到底是怎么‘发现’并‘加入’你家网络的?
用Wireshark解密Easymesh组网:从设备发现到网络接入的全流程解析 当你在客厅新添置了一台支持Easymesh的路由器,通电后它就像有自主意识般自动加入了现有的家庭网络——这种看似"魔法"般的体验背后,其实是一系列精密的协议交互在发…...
技术解密:Godot RE Tools - 游戏逆向工程的智能解决方案
技术解密:Godot RE Tools - 游戏逆向工程的智能解决方案 【免费下载链接】gdsdecomp Godot reverse engineering tools 项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp Godot RE Tools 是一款专业的Godot游戏逆向工程工具,能够从AP…...
ATK-UART2ETH模块实战:5分钟搞定串口设备联网,告别老旧PLC的通讯烦恼
ATK-UART2ETH模块实战:5分钟搞定串口设备联网,告别老旧PLC的通讯烦恼 在工业自动化领域,老旧设备改造一直是个令人头疼的问题。想象一下这样的场景:车间里那台服役十年的西门子S7-200 PLC还在兢兢业业地工作,但它唯一…...
eLabFTW电子实验室笔记本架构设计与Docker容器化部署指南
eLabFTW电子实验室笔记本架构设计与Docker容器化部署指南 【免费下载链接】elabftw :notebook: eLabFTW is the most popular open source electronic lab notebook for research labs. 项目地址: https://gitcode.com/gh_mirrors/el/elabftw eLabFTW作为开源电子实验室…...
微软下周更新 Office 应用:允许禁用 Copilot 浮动按钮,回应用户控制需求
Office 更新:禁用 Copilot 浮动按钮微软将于下周推出 Office 应用更新,此次更新允许用户禁用浮动的 Copilot 按钮。近几周,该按钮已出现在 Word、Excel 和 PowerPoint 中,悬浮在电子表格或文档的右下角,给用户带来了诸…...
如何高效实现Android Studio中文界面革命性升级
如何高效实现Android Studio中文界面革命性升级 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 你是否曾经因为Android Studio的英…...
如何高效使用开源视频下载插件:专业用户的终极指南
如何高效使用开源视频下载插件:专业用户的终极指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper VideoDownloadHelper是一款专为…...
别再找组策略了!Windows 11家庭版/专业版通用,一条命令搞定密码永不过期
Windows 11密码永不过期终极指南:告别繁琐设置,一条命令解决所有版本难题 每次开机都被"密码即将过期"的提示烦扰?作为Windows 11用户,你可能已经尝试过各种图形界面设置却无功而返。特别是家庭版用户,面对缺…...
工业物联网实战:Wind River Helix与边缘网关的云边协同部署指南
1. 项目概述:当工业软件平台遇上边缘网关最近在做一个工业物联网项目,客户现场有几十台不同年代、不同协议的设备需要接入云端,同时边缘侧还要跑一些实时性要求很高的控制逻辑。这让我想起了几年前折腾过的Wind River Helix平台和它的App Clo…...
昇腾CANN opbase与算子生态协作:从单一算子到完整计算图
前言 单个算子的性能再高,如果无法和其他算子高效协作,最终端到端的模型推理或训练性能也不会好。一个典型的深度学习模型包含几十到几百个算子,它们之间的数据流、内存分配、执行顺序都需要精心编排。opbase作为所有算子仓库的公共基础&…...
