|
@@ -9,17 +9,10 @@ export type LayoutMapKey = 'LAYOUT';
|
|
|
|
|
|
const LayoutMap = new Map<LayoutMapKey, () => Promise<typeof import('*.vue')>>();
|
|
|
|
|
|
+const dynamicViewsModules = import.meta.glob('../../views/**/*.{vue,tsx}');
|
|
|
+
|
|
|
// 动态引入
|
|
|
function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
|
|
|
- // TODO Because xlsx does not support vite2.0 temporarily. So filter the excel example first
|
|
|
- // regexp: /^(?!.*\/demo\/excel).*\.(tsx?|vue)$/,
|
|
|
- const dynamicViewsModules = importContext({
|
|
|
- dir: '/@/views',
|
|
|
- deep: true,
|
|
|
- regexp: /\.(tsx?|vue)$/,
|
|
|
- dynamicImport: true,
|
|
|
- dynamicEnabled: 'autoImportRoute',
|
|
|
- });
|
|
|
if (!routes) return;
|
|
|
routes.forEach((item) => {
|
|
|
const { component, name } = item;
|
|
@@ -33,15 +26,23 @@ function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-function dynamicImport(dynamicViewsModules: DynamicImportContextResult, component: string) {
|
|
|
- const keys = dynamicViewsModules.keys();
|
|
|
+function dynamicImport(
|
|
|
+ dynamicViewsModules: Record<
|
|
|
+ string,
|
|
|
+ () => Promise<{
|
|
|
+ [key: string]: any;
|
|
|
+ }>
|
|
|
+ >,
|
|
|
+ component: string
|
|
|
+) {
|
|
|
+ const keys = Object.keys(dynamicViewsModules);
|
|
|
const matchKeys = keys.filter((key) => {
|
|
|
- const k = key.substr(1);
|
|
|
- return k.startsWith(component) || k.startsWith(`/${component}`);
|
|
|
+ const k = key.replace('../../views', '');
|
|
|
+ return k.startsWith(`${component}`) || k.startsWith(`/${component}`);
|
|
|
});
|
|
|
if (matchKeys?.length === 1) {
|
|
|
const matchKey = matchKeys[0];
|
|
|
- return dynamicViewsModules(matchKey);
|
|
|
+ return dynamicViewsModules[matchKey];
|
|
|
}
|
|
|
if (matchKeys?.length > 1) {
|
|
|
warn(
|