From 4e735beb2f684ec4c3ed3f09bb75a1e791dd4017 Mon Sep 17 00:00:00 2001 From: pixelmaxQM Date: Mon, 7 Apr 2025 12:38:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BB=84=E5=90=88=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E4=B8=8B=20=E8=8E=B7=E5=8F=96=E5=B7=A6=E4=BE=A7=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/pinia/modules/router.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/web/src/pinia/modules/router.js b/web/src/pinia/modules/router.js index 33ebbc9a..db8c5150 100644 --- a/web/src/pinia/modules/router.js +++ b/web/src/pinia/modules/router.js @@ -4,6 +4,7 @@ import { asyncMenu } from '@/api/menu' import { defineStore } from 'pinia' import { ref, watchEffect } from 'vue' import pathInfo from '@/pathInfo.json' +import {useRoute} from "vue-router"; const notLayoutRouterArr = [] const keepAliveRoutersArr = [] @@ -58,6 +59,9 @@ export const useRouterStore = defineStore('router', () => { }) keepAliveRouters.value = Array.from(new Set(keepArrTemp)) } + + const route = useRoute() + emitter.on('setKeepAlive', setKeepAliveRouters) const asyncRouters = ref([]) @@ -80,6 +84,20 @@ export const useRouterStore = defineStore('router', () => { return menuMap[name]?.children } + const findTopActive = (menuMap, routeName) => { + for (let topName in menuMap) { + const topItem = menuMap[topName]; + if (topItem.children?.some(item => item.name === routeName)) { + return topName; + } + const foundName = findTopActive(topItem.children || {}, routeName); + if (foundName) { + return topName; + } + } + return null; + }; + watchEffect(() => { let topActive = sessionStorage.getItem('topActive') asyncRouters.value[0]?.children.forEach((item) => { @@ -88,6 +106,9 @@ export const useRouterStore = defineStore('router', () => { topMenu.value.push({ ...item, children: [] }) }) + if (!topActive || topActive === 'undefined' || topActive === 'null') { + topActive = findTopActive(menuMap, route.name); + } setLeftMenu(topActive) })