mirror of
https://github.com/m-xlsea/ruoyi-plus-soybean.git
synced 2025-09-24 07:49:47 +08:00
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import type { RouteComponent } from 'vue-router';
|
|
import { BasicLayout, BlankLayout } from '@/layouts';
|
|
import { views } from '@/views';
|
|
import { isFunction } from '../common';
|
|
|
|
type Lazy<T> = () => Promise<T>;
|
|
|
|
interface ModuleComponent {
|
|
default: RouteComponent;
|
|
}
|
|
|
|
type LayoutComponent = Record<UnionKey.LayoutComponentName, Lazy<ModuleComponent>>;
|
|
|
|
/**
|
|
* 获取布局的vue文件(懒加载的方式)
|
|
* @param layoutType - 布局类型
|
|
*/
|
|
export function getLayoutComponent(layoutType: UnionKey.LayoutComponentName) {
|
|
const layoutComponent: LayoutComponent = {
|
|
basic: BasicLayout,
|
|
blank: BlankLayout
|
|
};
|
|
return layoutComponent[layoutType];
|
|
}
|
|
|
|
/**
|
|
* 获取页面导入的vue文件
|
|
* @param routeKey - 路由key
|
|
*/
|
|
export function getViewComponent(routeKey: AuthRoute.LastDegreeRouteKey) {
|
|
if (!views[routeKey]) {
|
|
throw new Error(`路由“${routeKey}”没有对应的组件文件!`);
|
|
}
|
|
return setViewComponentName(views[routeKey], routeKey);
|
|
}
|
|
|
|
/** 给页面组件设置名称 */
|
|
function setViewComponentName(component: RouteComponent | Lazy<ModuleComponent>, name: string) {
|
|
if (isAsyncComponent(component)) {
|
|
return async () => {
|
|
const result = await component();
|
|
Object.assign(result.default, { name });
|
|
return result;
|
|
};
|
|
}
|
|
|
|
Object.assign(component, { name });
|
|
|
|
return component;
|
|
}
|
|
|
|
function isAsyncComponent(component: RouteComponent | Lazy<ModuleComponent>): component is Lazy<ModuleComponent> {
|
|
return isFunction(component);
|
|
}
|