适用于react、vue菜单格式化工具函数

news/2024/11/15 20:11:52/文章来源:https://www.cnblogs.com/yz-blog/p/18298572

场景

在一个动态菜单场景中,你向接口获取树形菜单,但最后拿到的树未能达到你的预期,这个时候就需要手写递归重新处理这颗树

适用于react、vue菜单格式化工具函数

包含功能

1. 当前路由是否存在返回按钮

判断逻辑:只要存在左侧可点击的菜单都不具备返回按钮,其他则具有返回按钮

2. 错误路由过滤提醒

假设有这么一个菜单

const router = [{path: '/test',children: [{path: '/test/page2',},{path: '/otest/page2',},],},
];

可以看到`/otest/page2`属于无效路由,在react中,这可是致命错误,将破环整个项的运行

这个工具则可以过滤出这种错误路由,并且给出对应提示

3. 递归获取当前菜单下的可用路由

 

解释一下这种布局,顶部一级菜单,左侧二级菜单

当用户点击顶部菜单时,展示左侧菜单并选中第一个二级可用菜单,正常情况下其实用户点击了顶部菜单是无法知道二级菜单哪个菜单是可用的

因为二级里面还包含二级,正常应该获取二级菜单里面存在组件的菜单

 

上工具代码

/*** @desc 获取动态菜单中第一项可用菜单* 正常情况第一项可用菜单就是路由第一个路由中的二层嵌套的第一项菜单* */export const firstAvailableRouter = (routes) => {const [router] = routes;if (!router?.component && router?.children?.length && !router.redirect) {return firstAvailableRouter(router.children);} else {return router;}
};/***  格式化菜单树* @param tree {Array} 树形菜单* @param parent {Array} 递归时做为临时存储用* */
export const formatTreeMenu = ({tree = [],parent = []
}: {tree: Record<string, any>[];parent?: Record<string, any>;
}) => {if (!tree || !Array.isArray(tree)) {return [];}/** 先检查所有子集是否都满足要求 */const filteredTree = tree.filter((item) => item.path).filter((item) => {const parentPath = parent.path || '/';const hasErrorRouter = parentPath && !item.path.startsWith(parentPath);if (hasErrorRouter) {console.warn(`路由:'${item.path}'配置错误,已被过滤`);}return !hasErrorRouter;});return filteredTree.map((node) => {const {title,layout = undefined,routes,hideInMenu = false,path,icon,component,id} = node;const hasBack = parent.path === path ? parent.hideInMenu : hideInMenu;const firstUsefulRoute =firstAvailableRouter({ routes, childrenKye: 'routes' }) || {};const formattedNode: Record<string, any> = {path,name: title,layoutWrap: layout,hideInMenu,roles: ['admin'],hasBack,component,id,firstUsefulRoute //第一个有用路由};if (icon) {formattedNode.icon = icon;}if (Array.isArray(routes) && routes.length > 0) {formattedNode.children = formatTreeMenu({tree: routes,parent: node});}return formattedNode;});
};

 

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

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

相关文章

Microsoft SQL Server 2019 RTM GDR (CU27+GDR) 发布,修复高危安全漏洞

Microsoft SQL Server 2019 RTM GDR (CU27+GDR) 发布,修复高危安全漏洞Microsoft SQL Server 2019 RTM GDR (CU27+GDR) 发布,修复高危安全漏洞 SQL Server Native Client OLE DB 提供程序远程代码执行漏洞 CVE-2024-35272 修复 请访问原文链接:https://sysin.org/blog/sql-s…

数据说话,免费可视化工具让店铺销售业绩一目了然

信息爆炸的时代,对于零售店铺而言,精准把握销售动态、及时调整经营策略,是提升业绩、保持竞争力的关键。然而,面对海量数据,如何高效、直观地呈现其背后的故事,让每一位团队成员都能迅速捕捉关键信息,成为了许多店铺管理者面临的难题。大家可以想象一下,清晨的例会上,…

[TCP/IP]可靠性

重传机制 TCP 实现可靠传输的方式之一,是通过序列号与确认应答。在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。但在错综复杂的网络,并不一定能如上图那么顺利能正常的数据传输,万一数据在传输过程中丢失了呢? 所以 TCP 针…

零代码教你安装部署Stable Diffusion 3,一键生成高质量图像

Stable Diffusion 3的强大性能其实并不仅限于Diffusion Transformer在架构上所带来的增益,其在提示词、图像质量、文字拼写方面的能力都得到了极大的提升。本文分享自华为云社区《重磅!【支持中文】stable-diffusion-3安装部署教程-SD3 来了》,作者:码上开花_Lancer。 正如…

腾讯云服务器Centos7数据盘挂载

背景:新购进一台服务器,初始化磁盘50G,还剩余一个200G的数据盘未使用,现想将其挂在使用一、前置条件 1.已购买腾讯云服务器,并登录到服务器。 2.已创建一块数据盘。 3.已将数据盘格式化为文件系统并进行分区。 二、数据盘挂载流程 1.登录腾讯云官网,进入控制台,找到“云…

Microsoft SQL Server 2016 with SP3 GDR 发布,修复高危安全漏洞

Microsoft SQL Server 2016 with SP3 GDR 发布,修复高危安全漏洞Microsoft SQL Server 2016 with SP3 GDR 发布,修复高危安全漏洞 SQL Server Native Client OLE DB 提供程序远程代码执行漏洞 CVE-2024-35272 修复 请访问原文链接:https://sysin.org/blog/sql-server-2016/,…

hackmyvm--Decode

环境 靶机:ip未知 攻击机kali:192.168.233.128 192.168.56.101 主机探测 锁定靶机ip为108端口扫描 nmap -p- -T4 -A 192.168.56.108常规套路80和22 web打点 dirsearch -u http://192.168.56.108/访问robots,txt文件访问/decode发现其自动添加了/,怀疑是本地文件包含漏洞,即可…

面试前:各方面都匹配 面试后:恐怕是凉了

在求职过程中,面试是一个至关重要的环节。许多求职者在简历筛选阶段表现出色,但在面试中却屡屡受挫。为了帮助大家更好地准备面试,本文分享了一位粉丝的QQ面试经验,涵盖了从自我介绍到技术问题的各个方面。很多人在浏览简历信息时觉得自己的条件很符合某家公司的要求,但一…

微信小程序车牌键盘输入组件(支持单个删除更改,支持赋值,支持新能源)

网上一搜一大堆类似但大多都相对简单,适用的场景并不多。多数也不支持赋值 不支持单个删除更改 我就借鉴了以下文章的思路,为了达到自己想要的效果做了相对应的更改。 借鉴文章链接:> https://blog.csdn.net/qq706352062/article/details/105554453?ops_request_misc=%…

ARC算法实现

1. 概述 Adaptive Replacement Cache(ARC)是一种缓存替换算法,用于提高缓存的命中率。ARC 动态调整缓存策略,以适应实际的访问模式,从而在不确定的工作负载下表现良好。它通过同时维护两个缓存列表来追踪最近使用和频繁使用的数据块,并根据访问模式在这两个列表之间动态分…

西瓜种类与挑选方法

感觉十分有用,留存一下 转载自微信公众号:科技da表哥 西瓜种类如何挑选西瓜

阿里云oss配置:

一,创建bucket bucket是,存储空间是OSS的全局命名空间,相当于数据的容器,可以存储若干文件。点 完成创建 按钮 二,创建账号供访问oss资源创建用户成功后,把accesskey id和accesskey secret复制保存下来三,创建对bucket的访问策略最后点击 确定 按钮创建