fix: 修复管理端动态菜单视图路径 (#40)
This commit is contained in:
@@ -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`)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user