提交 c6b766d8 编写于 作者: 无木

fix(route): dynamically introduce components error

修复后台权限模式下,加载IFrame类型的路由时会丢失component的问题
上级 a222ec85
...@@ -168,6 +168,34 @@ const sysRoute = { ...@@ -168,6 +168,34 @@ const sysRoute = {
], ],
}; };
const linkRoute = {
path: '/link',
name: 'Link',
component: 'LAYOUT',
meta: {
icon: 'ion:tv-outline',
title: 'routes.demo.iframe.frame',
},
children: [
{
path: 'doc',
name: 'Doc',
meta: {
title: 'routes.demo.iframe.doc',
frameSrc: 'https://vvbin.cn/doc-next/',
},
},
{
path: 'https://vvbin.cn/doc-next/',
name: 'DocExternal',
component: 'LAYOUT',
meta: {
title: 'routes.demo.iframe.docExternal',
},
},
],
};
export default [ export default [
{ {
url: '/basic-api/getMenuList', url: '/basic-api/getMenuList',
...@@ -184,10 +212,10 @@ export default [ ...@@ -184,10 +212,10 @@ export default [
} }
const id = checkUser.userId; const id = checkUser.userId;
if (!id || id === '1') { if (!id || id === '1') {
return resultSuccess([dashboardRoute, authRoute, levelRoute, sysRoute]); return resultSuccess([dashboardRoute, authRoute, levelRoute, sysRoute, linkRoute]);
} }
if (id === '2') { if (id === '2') {
return resultSuccess([dashboardRoute, authRoute, levelRoute]); return resultSuccess([dashboardRoute, authRoute, levelRoute, linkRoute]);
} }
}, },
}, },
......
...@@ -7,8 +7,12 @@ import { warn } from '/@/utils/log'; ...@@ -7,8 +7,12 @@ import { warn } from '/@/utils/log';
import { createRouter, createWebHashHistory } from 'vue-router'; import { createRouter, createWebHashHistory } from 'vue-router';
export type LayoutMapKey = 'LAYOUT'; export type LayoutMapKey = 'LAYOUT';
const IFRAME = () => import('/@/views/sys/iframe/FrameBlank.vue');
const LayoutMap = new Map<LayoutMapKey, () => Promise<typeof import('*.vue')>>(); const LayoutMap = new Map<String, () => Promise<typeof import('*.vue')>>();
LayoutMap.set('LAYOUT', LAYOUT);
LayoutMap.set('IFRAME', IFRAME);
let dynamicViewsModules: Record<string, () => Promise<Recordable>>; let dynamicViewsModules: Record<string, () => Promise<Recordable>>;
...@@ -17,10 +21,18 @@ function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) { ...@@ -17,10 +21,18 @@ function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
dynamicViewsModules = dynamicViewsModules || import.meta.glob('../../views/**/*.{vue,tsx}'); dynamicViewsModules = dynamicViewsModules || import.meta.glob('../../views/**/*.{vue,tsx}');
if (!routes) return; if (!routes) return;
routes.forEach((item) => { routes.forEach((item) => {
if (!item.component && item.meta?.frameSrc) {
item.component = 'IFRAME';
}
const { component, name } = item; const { component, name } = item;
const { children } = item; const { children } = item;
if (component) { if (component) {
item.component = dynamicImport(dynamicViewsModules, component as string); const layoutFound = LayoutMap.get(component);
if (layoutFound) {
item.component = layoutFound;
} else {
item.component = dynamicImport(dynamicViewsModules, component as string);
}
} else if (name) { } else if (name) {
item.component = getParentLayout(); item.component = getParentLayout();
} }
...@@ -53,8 +65,6 @@ function dynamicImport( ...@@ -53,8 +65,6 @@ function dynamicImport(
// Turn background objects into routing objects // Turn background objects into routing objects
export function transformObjToRoute<T = AppRouteModule>(routeList: AppRouteModule[]): T[] { export function transformObjToRoute<T = AppRouteModule>(routeList: AppRouteModule[]): T[] {
LayoutMap.set('LAYOUT', LAYOUT);
routeList.forEach((route) => { routeList.forEach((route) => {
if (route.component) { if (route.component) {
if ((route.component as string).toUpperCase() === 'LAYOUT') { if ((route.component as string).toUpperCase() === 'LAYOUT') {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册