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

后台通用tag面包屑

思路:要实现点击左侧菜单栏,页面跳转且显示面包屑(本文用的是TS+Vue3)
功能点:

  • 最多显示5个标签
  • 超过5个时,自动移除最早的标签
  • 至少保留1个标签
  • 支持标签关闭功能

首先在store.ts 处理路由(点击过的路由,当前的路由信息),只需要用到增加和删除tag逻辑
addVisitedView:去和现在项目配置的路由数组做匹配(path),获取点击过的路由信息,存入tag内,然后判断 如果访问过的路由中已经存在该路由,则更新当前路由,不重复添加标签,return掉,如果没有存在该路由,则添加新路由再更新当前路由,加超过5个时,自动移除最早的标签。
deleteVisitedView:查找要删除的路由在数组中的索引,如果找到了该路由(index > -1)则删除它

import { defineStore } from 'pinia'
// 定义访问过的路由
interface TagView {title: stringpath: string
}
export const useMenuStore = defineStore('menu', {state:()=>({visitedViews: [] as TagView[], // 访问过的路由currentView: null as TagView | null // 当前路由}),actions: {// 添加访问过的路由addVisitedView(route: any) {const menuItem = this.menuList.find(item => item.path === route.path)if (!menuItem) return// 定义访问过的路由const tag: TagView = {title: menuItem.title,path: route.path}// 如果访问过的路由中已经存在该路由,则更新当前视图,不重复添加标签if (this.visitedViews.some(v => v.path === tag.path)) {this.currentView = tagreturn}// 添加到访问过的路由this.visitedViews.push(tag)// 更新当前路由this.currentView = tag// 如果访问过的路由超过5个,则删除第一个if (this.visitedViews.length > 5) {this.visitedViews.shift()}},// 删除访问过的路由deleteVisitedView(path: string) {const index = this.visitedViews.findIndex(v => v.path === path)// 如果访问过的路由中存在该路由,则删除if (index > -1) {this.visitedViews.splice(index, 1)}},}
})

标签组件页面显示:
使用watch去监听路由的改变,来动态添加路由,调用store里面的addVisitedView和deleteVisitedView来进行增加删除,然后这里的业务逻辑只处理页面的路由跳转
关闭标签的逻辑:如果删除的不是当前选中的标签,则直接删除
如果删除的选中的标签

  • 如果是首,则到当前列表的第一个
  • 如果是尾,则到当前列表的最后一个
  • 如果是中间的,则是当前列表的后一个标签
<template><div class="bread-container"><el-tag v-for="tag in visitedViews" :key="tag.path" :closable="visitedViews.length > 1":effect="route.path === tag.path ? 'dark' : 'plain'" @click="handleTagClick(tag)"@close="handleCloseTag(tag)" class="tag-item" size="large">{{ tag.title }}</el-tag></div>
</template>
<script setup lang="ts">
import { watch } from 'vue'
import { storeToRefs } from 'pinia'
import { useMenuStore } from '@/store'
import { useRoute, useRouter } from 'vue-router'
const route = useRoute()
const router = useRouter()
const menuStore = useMenuStore()
const { visitedViews } = storeToRefs(menuStore)
// 定义 TagView 类型
interface TagView {title: stringpath: string
}// 监听路由变化时添加到访问记录
watch(() => route.path,() => { menuStore.addVisitedView(route) },{ immediate: true })// 点击标签
const handleTagClick = (tag: TagView) => {router.push(tag.path)
}
// 关闭标签
const handleCloseTag = (tag: TagView) => {menuStore.deleteVisitedView(tag.path)if (route.path === tag.path) {// 先找到要关闭标签的索引const index = menuStore.visitedViews.findIndex(v => v.path === tag.path)//默认关闭的不是首尾标签let nextTag = menuStore.visitedViews[index + 1]if (index === 0) {// 如果关闭的是第一个标签,跳转到新的第一个标签nextTag = menuStore.visitedViews[1]} else if (index === menuStore.visitedViews.length - 1) {// 如果关闭的是最后一个标签,跳转到前一个标签nextTag = menuStore.visitedViews[menuStore.visitedViews.length - 2]}router.push(nextTag.path) }
}
</script>
<style scoped lang="scss">
.bread-container {margin-top: 20px;.tag-item {margin-left: 12px;font-size: 16px;}
}
</style>

相关文章:

后台通用tag面包屑

思路&#xff1a;要实现点击左侧菜单栏&#xff0c;页面跳转且显示面包屑(本文用的是TSVue3) 功能点&#xff1a; 最多显示5个标签超过5个时&#xff0c;自动移除最早的标签至少保留1个标签支持标签关闭功能 首先在store.ts 处理路由&#xff08;点击过的路由&#xff0c;当前…...

oracle数据恢复—通过拼接数据库碎片的方式恢复Oracle数据的案例

Oracle数据库故障&#xff1a; 存储掉盘超过上限&#xff0c;lun无法识别。管理员重组存储的位图信息并导出lun&#xff0c;发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组…...

node.js fluent-ffmpeg 桌面推流

1&#xff0c;安装fluent-ffmpeg&#xff0c;npm install fluent-ffmpeg 2&#xff0c;推流代码&#xff1a; //stream.js const ffmpeg require(fluent-ffmpeg); const rtmpUrl "rtmp://localhost:1935/live/desktop"; //ffmpeg -f gdigrab -i desktop -vcode…...

AWS的流日志

文章目录 一、aws如何观察vpc的日志&#xff1f;二、aws观测其vpc的入口日志三、 具体配置3.1、配置你的存储神器 S33.2、建立子网的流日志 一、aws如何观察vpc的日志&#xff1f; 排查问题的时候除了去抓包看具体的端口信息的时候&#xff0c;还可以根据其所在的vpc的子网信息…...

大数据新视界 -- 大数据大厂之 Hive 数据导入:多源数据集成的策略与实战(上)(3/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

Qt入门1——认识Qt的几个常用头文件和常用函数

1.头文件 ① #include <QPushButton>——“按钮”头文件&#xff1b; ② #include <QLabel>——“标签”头文件&#xff1b; ③ #include <QFont>——“字体”头文件&#xff1b; ④#include <QDebug>——输出相关信息&#xff1b; 2. 常用函数/类的基…...

ElasticSearch学习篇17_《检索技术核心20讲》最邻近检索-局部敏感哈希、乘积量化PQ思路

目录 场景在搜索引擎和推荐引擎中&#xff0c;对相似文章去重是一个非常重要的环节&#xff0c;另外是拍照识花、摇一摇搜歌等场景都可以使用它快速检索。 基于敏感性哈希的检索更擅长处理字面上的相似而不是语义上的相似。 向量空间模型ANN检索加速思路 局部敏感哈希编码 随…...

在 Sublime Text 中直接预览 Markdown 文件

在 Sublime Text 中直接预览 Markdown 文件需要借助插件实现。以下是详细步骤&#xff1a; 1. 安装 Markdown Preview 插件 按下快捷键 CtrlShiftP (或 macOS 上的 CmdShiftP)&#xff0c;打开命令面板。输入 Install Package 并选择 Package Control: Install Package。等待包…...

分词器的概念(通俗易懂版)

什么是分词器&#xff1f;简单点说就是将字符序列转化为数字序列&#xff0c;对应模型的输入。 通常情况下&#xff0c;Tokenizer有三种粒度&#xff1a;word/char/subword word: 按照词进行分词&#xff0c;如: Today is sunday. 则根据空格或标点进行分割[today, is, sunda…...

速通前端篇 —— CSS

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;速通前端 目录 CSS的介绍 基本语法规范 CSS选择器 标签选择器 class选择器 id选择器 复合选择器 通配符选择器 CSS常见样式 颜…...

数据库表设计范式

华子目录 MYSQL库表设计&#xff1a;范式第一范式&#xff08;1NF&#xff09;第二范式&#xff08;2NF&#xff09;第三范式&#xff08;3NF&#xff09;三范式小结巴斯-科德范式&#xff08;BCNF&#xff09;第四范式&#xff08;4NF&#xff09;第五范式&#xff08;5NF&…...

经济增长初步

1.人均产出 人均产出&#xff0c;通常指的是一个国家、地区或组织在一定时期内&#xff0c;每个劳动人口平均创造的生产总值。它是衡量一个地区或国家经济效率和劳动生产率的重要指标。具体来说&#xff0c;人均产出可以通过以下公式计算&#xff1a; 人均产出总产出/劳动人口…...

【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍

文章目录 前言一、Zachman架构二、ToGAF架构三、FEA架构四、DoDAF 前言 企业架构&#xff08;Enterprise Architecture&#xff0c;EA&#xff09;是指企业在信息技术和业务流程方面的整体设计和规划。 最近接触到“企业架构”这个概念&#xff0c;转念一想必定和我们软件架构…...

时间请求参数、响应

&#xff08;7&#xff09;时间请求参数 1.默认格式转换 控制器 RequestMapping("/commonDate") ResponseBody public String commonDate(Date date){System.out.println("默认格式时间参数 date > "date);return "{module : commonDate}"; }…...

PyTorch图像预处理:计算均值和方差以实现标准化

在深度学习中&#xff0c;图像数据的预处理是一个关键步骤&#xff0c;它直接影响模型的训练效果和收敛速度。PyTorch提供的transforms.Normalize()函数允许我们对图像数据进行标准化处理&#xff0c;即减去均值并除以方差。这一步骤对于提高模型性能至关重要。 为什么需要标准…...

slice介绍slice查看器

Android Jetpack架构组件(十)之Slices - 阅读清单 - 腾讯云开发者社区-腾讯云 slice 查看器apk 用adb intall 安装 Releases android/user-interface-samples GitHubMultiple samples showing the best practices in the user interface on Android. - Releases android/u…...

Android音频采集

在 Android 开发领域&#xff0c;音频采集是一项非常重要且有趣的功能。它为各种应用程序&#xff0c;如语音聊天、音频录制、多媒体内容创作等提供了基础支持。今天我们就来深入探讨一下 Android 音频采集的两大类型&#xff1a;Mic 音频采集和系统音频采集。 1. Mic音频采集…...

通过轻易云平台实现聚水潭数据高效集成到MySQL的技术方案

聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中&#xff0c;我们将详细探讨如何通过轻易云数据集成平台&#xff0c;将聚水潭的数据高效、可靠地集成到MySQL数据库中。具体方案为“聚水谭-店铺查询单-->BI斯莱蒙-店铺表”。这一过程不仅需要处理大量数据的快速写入…...

类和对象( 中 【补充】)

目录 一 . 赋值运算符重载 1.1 运算符重载 1.2 赋值运算符重载 1.3 日期类实现 1.3.1 比较日期的大小 : 1.3.2 日期天数 : 1.3.3 日期 - 天数 : 1.3.4 前置/后置 1.3.5 日期 - 日期 1.3.6 流插入 << 和 流提取 >> 二 . 取地址运算符重载 2.1 const…...

如何使用gpio模拟mdio通信?

一、前言 实际项目开发中&#xff0c;由于设计原因&#xff0c;会将phy的mdio引脚连接到SoC的2个空闲gpio上&#xff0c; 这样就无法通过Gmac自有的架构实现修改phy&#xff0c; 因此只能通过GPIO模拟的方式实现MDIO&#xff0c; 好在Linux支持MDIO via GPIO功能。 该功能…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...