From fc621118e20b7731ac6419d8bd86e9c635dd38da Mon Sep 17 00:00:00 2001 From: ZhuRui Date: Mon, 27 Jul 2026 16:30:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E7=BB=84=E4=BB=B6=E4=B8=8E=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/fallbackRoutes.ts | 12 ++++++++++++ src/router/guard.ts | 7 +++++-- src/stores/menuStore.ts | 1 + src/types/index.ts | 8 ++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/config/fallbackRoutes.ts b/src/config/fallbackRoutes.ts index 9282088..be5d1c2 100644 --- a/src/config/fallbackRoutes.ts +++ b/src/config/fallbackRoutes.ts @@ -54,30 +54,35 @@ export const FALLBACK_MENU_NODES: MenuNode[] = [ name: '赛事列表', path: 'events/list', component: 'events/list', + componentName: 'EventList', }, { id: 'events_orders', name: '订单管理', path: 'events/orders', component: 'events/orders', + componentName: 'EventOrders', }, { id: 'events_users', name: '用户列表', path: 'events/users', component: 'events/users', + componentName: 'EventUsers', }, { id: 'events_banner', name: 'Banner配置', path: 'events/banner', component: 'events/banner', + componentName: 'EventBanner', }, { id: 'events_logs', name: '赛事操作日志', path: 'events/logs', component: 'events/logs', + componentName: 'EventLogs', }, ], }, @@ -92,24 +97,28 @@ export const FALLBACK_MENU_NODES: MenuNode[] = [ name: '提现申请', path: 'finance/withdraw', component: 'finance/withdraw', + componentName: 'FinanceWithdraw', }, { id: 'finance_wallet', name: '用户钱包', path: 'finance/wallet', component: 'finance/wallet', + componentName: 'FinanceWallet', }, { id: 'finance_payments', name: '支付流水', path: 'finance/payments', component: 'finance/payments', + componentName: 'FinancePayments', }, { id: 'finance_reports', name: '账务报表', path: 'finance/reports', component: 'finance/reports', + componentName: 'FinanceReports', }, ], }, @@ -124,18 +133,21 @@ export const FALLBACK_MENU_NODES: MenuNode[] = [ name: '用户管理', path: 'system/users', component: 'system/users', + componentName: 'SystemUsers', }, { id: 'system_roles', name: '角色权限', path: 'system/roles', component: 'system/roles', + componentName: 'SystemRoles', }, { id: 'system_logs', name: '操作日志', path: 'system/logs', component: 'system/logs', + componentName: 'SystemLogs', }, ], }, diff --git a/src/router/guard.ts b/src/router/guard.ts index d62648e..b722907 100644 --- a/src/router/guard.ts +++ b/src/router/guard.ts @@ -63,12 +63,15 @@ router.afterEach((to) => { // 隐藏的路由(如详情页、编辑页)不进 tab,避免标签栏被噪声污染 // /login 也不进 tab if (to.meta?.hideInMenu || to.path === '/login') return; - if (typeof to.name !== 'string' || typeof to.meta?.title !== 'string') return; + if (typeof to.meta?.title !== 'string') return; + + const componentName = (to.meta.componentName as string) || (to.name as string); + if (!componentName) return; const { addTab } = useTabsStore(); addTab({ path: to.path, - name: to.name, + name: componentName, title: to.meta.title, }); }); diff --git a/src/stores/menuStore.ts b/src/stores/menuStore.ts index 4d62fa6..3cc7b6a 100644 --- a/src/stores/menuStore.ts +++ b/src/stores/menuStore.ts @@ -152,6 +152,7 @@ function transformMenuToRoutes(nodes: MenuNode[], parentPath = ''): RouteRecordR hideInMenu: node.hideInMenu, activeMenu: node.activeMenu, externalLink: node.externalLink, + componentName: node.componentName, }, } as RouteRecordRaw; diff --git a/src/types/index.ts b/src/types/index.ts index 74b4422..2de77cc 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -57,6 +57,12 @@ export interface MenuNode { activeMenu?: string; /** 是否禁用(禁用后路由不注册、菜单不显示) */ disabled?: boolean; + /** + * 组件 name(PascalCase,用于 KeepAlive 缓存匹配) + * 例如: 'EventList'、'SystemUsers' + * 后端下发此字段后路由守卫会自动写入 cachedViews + */ + componentName?: string; /** 子菜单/子路由 */ children?: MenuNode[]; } @@ -101,5 +107,7 @@ declare module 'vue-router' { affix?: boolean; /** 不参与标签缓存,即使访问过也不进 keep-alive */ noCache?: boolean; + /** 组件 name,用于 KeepAlive 缓存匹配(如 'EventList') */ + componentName?: string; } }