From 839e4f35f562395a3ce59bee6be16f526bb62079 Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: Tue, 16 Dec 2025 11:42:07 +0800
Subject: [PATCH] 菜单导航设置支持纯顶部
---
ruoyi-ui/src/components/Breadcrumb/index.vue | 48 ++++++++++++++++++++++++++++++++++++++----------
1 files changed, 38 insertions(+), 10 deletions(-)
diff --git a/ruoyi-ui/src/components/Breadcrumb/index.vue b/ruoyi-ui/src/components/Breadcrumb/index.vue
index dfeca60..6b56f51 100644
--- a/ruoyi-ui/src/components/Breadcrumb/index.vue
+++ b/ruoyi-ui/src/components/Breadcrumb/index.vue
@@ -1,8 +1,8 @@
<template>
<el-breadcrumb class="app-breadcrumb" separator="/">
<transition-group name="breadcrumb">
- <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
- <span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
+ <el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
+ <span v-if="item.redirect === 'noRedirect' || index == levelList.length - 1" class="no-redirect">{{ item.meta.title }}</span>
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
</el-breadcrumb-item>
</transition-group>
@@ -31,14 +31,44 @@
methods: {
getBreadcrumb() {
// only show routes with meta.title
- let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
- const first = matched[0]
-
- if (!this.isDashboard(first)) {
- matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched)
+ let matched = []
+ const router = this.$route
+ const pathNum = this.findPathNum(router.path)
+ // multi-level menu
+ if (pathNum > 2) {
+ const reg = /\/\w+/gi
+ const pathList = router.path.match(reg).map((item, index) => {
+ if (index !== 0) item = item.slice(1)
+ return item
+ })
+ this.getMatched(pathList, this.$store.getters.defaultRoutes, matched)
+ } else {
+ matched = router.matched.filter(item => item.meta && item.meta.title)
}
-
+ // 判断是否为首页
+ if (!this.isDashboard(matched[0])) {
+ matched = [{ path: "/index", meta: { title: "首页" } }].concat(matched)
+ }
this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
+ },
+ findPathNum(str, char = "/") {
+ let index = str.indexOf(char)
+ let num = 0
+ while (index !== -1) {
+ num++
+ index = str.indexOf(char, index + 1)
+ }
+ return num
+ },
+ getMatched(pathList, routeList, matched) {
+ let data = routeList.find(item => item.path == pathList[0] || (item.name += '').toLowerCase() == pathList[0])
+ if (data) {
+ matched.push(data)
+ if (data.children && pathList.length) {
+ pathList.shift()
+ this.getMatched(pathList, data.children, matched)
+ }
+ }
},
isDashboard(route) {
const name = route && route.name
@@ -64,8 +94,6 @@
display: inline-block;
font-size: 14px;
line-height: 50px;
- margin-left: 8px;
-
.no-redirect {
color: #97a8be;
cursor: text;
--
Gitblit v1.9.3