39 lines
925 B
TypeScript
39 lines
925 B
TypeScript
import type {
|
|
RouteLocationNormalized,
|
|
RouteRecordNormalized,
|
|
} from 'vue-router';
|
|
|
|
import { defineAsyncComponent } from 'vue';
|
|
|
|
const modules = import.meta.glob('../views/**/*.{vue,tsx}');
|
|
|
|
/**
|
|
* 注册一个异步组件
|
|
* @param componentPath 例:/bpm/oa/leave/detail
|
|
*/
|
|
export function registerComponent(componentPath: string) {
|
|
for (const item in modules) {
|
|
if (item.includes(componentPath)) {
|
|
// 使用异步组件的方式来动态加载组件
|
|
return defineAsyncComponent(modules[item] as any);
|
|
}
|
|
}
|
|
}
|
|
|
|
export const getRawRoute = (
|
|
route: RouteLocationNormalized,
|
|
): RouteLocationNormalized => {
|
|
if (!route) return route;
|
|
const { matched, ...opt } = route;
|
|
return {
|
|
...opt,
|
|
matched: (matched
|
|
? matched.map((item) => ({
|
|
meta: item.meta,
|
|
name: item.name,
|
|
path: item.path,
|
|
}))
|
|
: undefined) as RouteRecordNormalized[],
|
|
};
|
|
};
|