fix: 修复管理端动态菜单视图路径 (#40)

This commit is contained in:
ila
2026-08-24 10:33:30 +08:00
parent a8f18a4f93
commit 1d7d9fb945
3 changed files with 29 additions and 2 deletions
+4 -2
View File
@@ -1,6 +1,7 @@
import { constantRoutes } from '@/router'
import { getRoutes } from '@/api/admin/sys-role'
import Layout from '@/layout'
import { getViewContextKey, normalizeViewPath } from './route-view'
// import sysuserindex from '@/views/sysuser/index'
/**
@@ -61,7 +62,8 @@ export function generaMenu(routes, data) {
const viewsContext = require.context('@/views', true, /\.vue$/)
export const loadView = (view) => { // 路由懒加载
const key = `.${view}.vue`
const normalizedView = normalizeViewPath(view)
const key = getViewContextKey(normalizedView)
if (viewsContext.keys().includes(key)) {
// require.context 返回的是 { default: Component, __esModule: true },
// Vue Router 4 需要直接拿到组件对象(.default),否则渲染空白
@@ -69,7 +71,7 @@ export const loadView = (view) => { // 路由懒加载
return mod.default || mod
}
// 兜底:动态 import(生产构建不受 dynamic-import-node 影响)
return () => import(`@/views${view}.vue`)
return () => import(`@/views/${normalizedView}.vue`)
}
/**
+7
View File
@@ -0,0 +1,7 @@
export function normalizeViewPath(view) {
return String(view || '').replace(/^\/+/, '')
}
export function getViewContextKey(view) {
return `./${normalizeViewPath(view)}.vue`
}
@@ -0,0 +1,18 @@
import { getViewContextKey, normalizeViewPath } from '@/store/modules/route-view'
describe('dynamic route view paths', () => {
it.each([
['chorus/providers/index', 'chorus/providers/index'],
['/chorus/providers/index', 'chorus/providers/index'],
['///chorus/providers/index', 'chorus/providers/index']
])('normalizes %s', (view, expected) => {
expect(normalizeViewPath(view)).toBe(expected)
})
it.each([
['chorus/providers/index', './chorus/providers/index.vue'],
['/chorus/providers/index', './chorus/providers/index.vue']
])('builds the webpack context key for %s', (view, expected) => {
expect(getViewContextKey(view)).toBe(expected)
})
})