当前位置: 首页 > news >正文

el-menu + el-badge 菜单加红点标识el-badge

el-menu + el-badge 菜单加红点标识el-badge

  • 一、el-menu组件
    • menu/index.vue
    • menu/submenu.vue
  • 二、获取/更新菜单红点标识


main.js引入全局组件/mixins全局混入
el-menu封装

一、el-menu组件

menu/index.vue

重点:定义 ref="menu",切换路由时调用 refreshs() 更新组件

<template><el-menu :unique-opened="true" :default-active="this.$store.state.menuData.menuActive" class="el-menu-vertical-demo" :background-color="backgroundColor" :text-color="textColor" :active-text-color="activeTextColor"><subMenu ref="menu" :menuList="sideNavMenu" :key="Math.random()"></subMenu></el-menu>
</template><script>
export default {name: "index",data() {return {backgroundColor: "#EAEEF6",textColor: "#3F434E",activeTextColor: "#2A60CC",// 菜单列表sideNavMenu: []}},mounted() { },methods: {async refreshs() {await this.getMenuBadge()this.$refs.menu.refreshs();}},watch: {$route(to, from) {this.refreshs()},},created() { },
}
</script>

menu/submenu.vue

重点:定义ref="subMenu",调用 refreshs() 更新组件,el-badge 展示标识未处理数据数量
<el-badge v-if="!!list.badgeNum" :value="list.badgeNum" :max="99"> </el-badge>

<template><div><div v-for="(list,index) in this.menuList" :key="index"><el-submenu v-if="!!list.children" :key="list.id" :index="String(list.id)"><template slot="title"><i class="menu_icon" :class="list.icon"></i><span slot="title">{{ list.name}}</span><el-badge v-if="!!list.badgeNum" :value="list.badgeNum" :max="99"> </el-badge><!-- <el-badge v-if="list.showBadge" value="new"> </el-badge> --></template><subMenu ref="subMenu" :menuList="list.children"></subMenu></el-submenu><el-menu-item v-else :index="list.path"><router-link :target="targeLink(list.path)?'_blank':''" :to="list.path"><i class="menu_icon" :class="list.icon"></i><span>{{list.name}}</span><el-badge v-if="!!list.badgeNum" :value="list.badgeNum" :max="99"> </el-badge></router-link></el-menu-item></div></div>
</template><script>
export default {name: "submenu",data() {return {}},props: {menuList: Array},mounted() { },methods: {targeLink(path) {if (path === '/aboutUs') {return true} else {return false}},refreshs() {this.$forceUpdate()if (this.$refs.subMenu) {this.$refs.subMenu.forEach(item => {item.refreshs()})}},},watch: {},created() { },
}
</script>

二、获取/更新菜单红点标识

调用 getMenuBadge() 获取/更新待办数据(红点显示数据)
api.js

import { getOneOrAllData } from '@/common/js/http'
// 菜单接口
export const getMenuListApi = p => getOneOrAllData('/getMenuListApi', p)
// 菜单角标数据接口
export const getMenuBadgeApi = {getMenuHomeBadgeApi: p => getOneOrAllData('/getMenuHomeBadgeApi ', p),//首页待办数量getMenuAboutBadgeApi: p => getOneOrAllData('/globalApi/home/examineConsumptionCount', p),//关于页核待办数量
};

mixins引入全局 public.js 文件

data() {return {// 登录人筛选后的菜单红点标识hasBadgeMenu: null,// 菜单红点标识定义badgeItem: {// 第一个参数是 hasBadgeMenu 下 obj 下标(pObjOrder)// 第二个参数是 obj 中 child 中的 obj 下标(cObjOrder)// 第三个参数是调用的接口'/basicDataReview': [0, 0, 'getMenuHomeBadgeApi'], // 首页待办数量'/publicDataReview': [0, 1, 'getMenuAboutBadgeApi'], // 关于页核待办数量},}
},
// 有权限的菜单
getMenuList() {// 调接口getMenuListApi().then(async res => {// 保存菜单数据到vuexthis.$store.commit("menuData/change_sideNavMenu", res.data);// 菜单红点标识await this.getMenuBadge()// 跳转路由this.jumpRouter(this.$store.state.menuData.sideNavMenu)})
},// 更新菜单红点标识
async getMenuBadge() {// 获取vuex中的菜单let sideMenu = this.$store.state.menuData.sideNavMenu// hasBadgeMenu 数据格式// hasBadgeMenu = [//   {//     item:{ },//     child:[//       { item: {}, api: 'getMenuHomeBadgeApi' },//       { item: {}, api: 'getMenuAboutBadgeApi' },//     ]//   }// ]// 过滤登录人所需菜单红点标识if (!this.hasBadgeMenu) {this.hasBadgeMenu = []sideMenu.forEach(item => {if (!!item.children) {item.children.forEach(cItem => {for (var key of Object.keys(this.badgeItem)) {if (cItem.path === key) {let pObjOrder = this.badgeItem[key][0]if (!this.hasBadgeMenu[pObjOrder]) {this.hasBadgeMenu[pObjOrder] = {}}if (!this.hasBadgeMenu[pObjOrder].child) {this.hasBadgeMenu[pObjOrder].child = []}let cObjOrder = this.badgeItem[key][1]if (!this.hasBadgeMenu[pObjOrder].child[cObjOrder]) {this.hasBadgeMenu[pObjOrder].child[cObjOrder] = {}}this.hasBadgeMenu[pObjOrder].child[cObjOrder].item = cItemthis.hasBadgeMenu[pObjOrder].child[cObjOrder].api = this.badgeItem[key][2]this.hasBadgeMenu[pObjOrder].item = item}}})}else { }})}// 调用红点信息接口for (let i in this.hasBadgeMenu) {if (this.hasBadgeMenu[i]) {for (let j in this.hasBadgeMenu[i].child)if (this.hasBadgeMenu[i].child[j]) {if (getMenuBadgeApi[this.hasBadgeMenu[i].child[j].api]) {await getMenuBadgeApi[this.hasBadgeMenu[i].child[j].api]().then(res => {this.hasBadgeMenu[i].child[j].item.badgeNum = res.data})} else {console.error('接口未定义');}}}}// 判断父级标识for (let j in this.hasBadgeMenu) {// this.hasBadgeMenu[j].item.showBadge = false;this.hasBadgeMenu[j].item.badgeNum = 0;for (let i in this.hasBadgeMenu[j].child) {if (!!this.hasBadgeMenu[j].child[i].item.badgeNum) {// this.hasBadgeMenu[j].item.showBadge = true;this.hasBadgeMenu[j].item.badgeNum += this.hasBadgeMenu[j].child[i].item.badgeNumbreak}}}this.$store.commit("menuData/change_sideNavMenu", sideMenu);
},
// 跳转路由
jumpRouter(menuList) {// 默认登录home页for (let i in menuList) {if (menuList[i].path === '/home') {this.$router.push({ path: menuList[i].path })break} else {this.$router.push({ path: menuList[0].path })}}
},

相关文章:

el-menu + el-badge 菜单加红点标识el-badge

el-menu el-badge 菜单加红点标识el-badge 一、el-menu组件menu/index.vuemenu/submenu.vue 二、获取/更新菜单红点标识 main.js引入全局组件/mixins全局混入 el-menu封装 一、el-menu组件 menu/index.vue 重点&#xff1a;定义 ref"menu"&#xff0c;切换路由时…...

python: inspect模块各函数的用法

python: inspect模块各函数的用法 inspect模块也被称为 检查现场对象。这里的重点在于“现场”二字&#xff0c;也就是当前运行的状态。 inspect模块提供了一些函数来了解现场对象&#xff0c;包括 模块、类、实例、函数和方法。 inspect函数主要用于以下四个方面 对是否是模…...

优化代码性能:C#中轻松测量执行时间

概述&#xff1a;本文介绍了在C#程序开发中如何利用自定义扩展方法测量代码执行时间。通过使用简单的Action委托&#xff0c;开发者可以轻松获取代码块的执行时间&#xff0c;帮助优化性能、验证算法效率以及监控系统性能。这种通用方法提供了一种便捷而有效的方式&#xff0c;…...

I2C学习总结

i2c概述 I2C&#xff08;Inter-Intergreted Circuit&#xff09; 是一种串行通信协议&#xff0c;用于集成电路之间完成数据传输&#xff0c;i2c用广泛用以各种领域&#xff0c;包括电子设备、嵌入式系统、工业自动化等&#xff1b; i2c仅仅只是一个数据传输的协议&#xff0c…...

libcudart.so libcuda.so之间的关系

libcudart.so 和 libcuda.so 都是 NVIDIA CUDA 库的一部分&#xff0c;它们在 CUDA 平台上扮演不同的角色&#xff0c;但它们之间也存在一些关联。 libcudart.so: libcudart.so 是 CUDA Runtime 库的一部分&#xff0c;它包含了一系列的运行时函数和工具&#xff0c;用于管理和…...

STM32基本定时功能

1、定时器就是计数器。 2、怎么计数&#xff1f; 3、我们需要有一恒定频率的方波信号&#xff0c;再加上一个寄存器。 4、比如每来一个上升沿信号&#xff0c;寄存器值加1&#xff0c;就可以完成计数。 5、假设方波频率是100Hz&#xff0c;也就是1秒100个脉冲。…...

Linux学习:权限

目录 1. shell命令的工作原理与存在意义1.1 shell命令解释器存在的意义1.2 shell解释器的工作原理 2. Linux操作系统&#xff1a;用户2.1 什么是用户2.2 用户的切换操作2.3 用户权限划分的意义 3. Linux中权限的种类和意义3.1 什么是权限3.2 sudo指令与短暂提权 4. 文件类型与文…...

汉诺塔问题代码写法的详细解析

汉诺塔游戏规则&#xff1a; 规则&#xff1a; 汉诺塔问题是一个经典的问题。汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着…...

Python爬虫入门

什么是爬虫 爬虫就是程序&#xff0c;一个能获取互联网上的资源(文字、图片、音视频)数据的程序。 不用爬⾍&#xff0c; 打开浏览器&#xff0c; 输⼊百度的⽹址&#xff0c;就能在浏览器上看到百度的内容了。那换成爬⾍呢&#xff1f; 道理是⼀样的。只不过&#xff0c;是⽤…...

【数据结构学习笔记】选择排序

【数据结构学习笔记】选择排序 参考电子书&#xff1a;排序算法精讲 算法原理 首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;大&#xff09;元…...

小资金适合做伦敦金的投资吗?

在回答这个问题之前&#xff0c;我们首先需要了解伦敦金是什么。伦敦金&#xff0c;也称为伦敦金市场交易的黄金&#xff0c;是一种国际性的金融交易产品&#xff0c;其价格受全球政治、经济、货币政策、供求关系等多种因素影响&#xff0c;波动性较大。因此&#xff0c;投资伦…...

自动化运维工具 ---------------Ansible

一、Ansible 发展史及功能 作者&#xff1a;Michael DeHaan&#xff08; Cobbler pxe kikstar 与 Func 作者&#xff09;ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具&#xff0c;使用它可以在相距数光年的距离&#xff0c;远程实时控制前线的舰队战斗2…...

富格林:有效做单安全盈利方法

富格林悉知&#xff0c;在伦敦金的投资中&#xff0c;是否安全盈利很大一部分因素取决于是否有效做单&#xff0c;投资者在进入市场之后&#xff0c;需要学习了解伦敦金相关规则&#xff0c;学习一定的做单的技巧&#xff0c;这样有利于我们后续做单顺畅盈利。以下总结几点安全…...

二分查找的理解及应用场景。

一、是什么 在计算机科学中&#xff0c;二分查找算法&#xff0c;也称折半搜索算法&#xff0c;是一种在有序数组中查找某一特定元素的搜索算法 想要应用二分查找法&#xff0c;则这一堆数应有如下特性&#xff1a; 存储在数组中有序排序 搜索过程从数组的中间元素开始&…...

共创时代,品牌如何做好UGC营销?

在当下的互联网时代&#xff0c;众多品牌已经逐渐意识到“产品为重”的影响方式已经很难提升转化率&#xff0c;内容才是吸引用户的必胜法宝&#xff0c;然而当代人被海量信息裹挟&#xff0c;人们的注意力成为稀缺资源&#xff0c;在这个环境下&#xff0c;UGC成为品牌的营销方…...

华为三层交换机:ACL的基本实验

实验要求&#xff1a; PC1不允许访问PC3&#xff0c;PC3可以访问PC1 分析问题&#xff1a; PC1不允许访问PC3&#xff0c;问题中含有“目标地址”则我们需要设置目标地址&#xff0c;这样基本ACL是不行的&#xff0c;必须使用高级ACL [sw1]acl ? INTEGER<2000-2999>…...

基于springboot+vue的旅游管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…...

4. git 添加版本标签

要给某一分支的某一提交版本添加标签&#xff08;tag&#xff09;&#xff0c;你首先需要确定该提交版本在分支上的具体哈希值&#xff08;commit hash&#xff09;。 一旦你有了这个哈希值&#xff0c;你就可以像之前描述的那样使用 git tag 命令来创建标签。 以下是如何操作的…...

2024 PhpStorm激活,分享几个PhpStorm激活的方案

文章目录 PhpStorm 公司简介我这边使用PhpStorm的理由PhpStorm 2023.3 最新变化AI Assistant 预览阶段结束 正式版基于 LLM 的代码补全测试代码生成编辑器内代码生成控制台中基于 AI 的错误解释 Pest 更新PHP 8.3 支持#[\Override] 特性新的 json_validate() 函数类型化类常量弃…...

2419. prufer序列(prufer编码,模板题)

活动 - AcWing 本题需要你实现prufer序列与无根树之间的相互转化。 假设本题涉及的无根树共有 n 个节点&#xff0c;编号 1∼n。 为了更加简单明了的描述无根树的结构&#xff0c;我们不妨在输入和输出时将该无根树描述为一个以 n 号节点为根的有根树。 这样就可以设这棵无…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...