登录页延后重型依赖与角色动画,i18n 拆登录轻量包;进系统只等待动态路由与完整语言包,EP/VXE 后台预热。兼容登录响应带回 userInfo。 Co-authored-by: Cursor <cursoragent@cursor.com>
49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
import { initDynamicRouter } from './dynamicRouter';
|
|
import {
|
|
isDynamicRouterInitialized,
|
|
markDynamicRouterInitialized,
|
|
getDynamicRouterBootstrapPromise,
|
|
setDynamicRouterBootstrapPromise,
|
|
setInitializingDynamicRouter,
|
|
} from './dynamic-router-state';
|
|
|
|
export type EnsureDynamicRouterOptions = {
|
|
/** 默认:登录已带 menus 时不强制清空重建 */
|
|
forceRefresh?: boolean;
|
|
};
|
|
|
|
/**
|
|
* 保证动态路由已 addRoute。多处调用共享同一 Promise。
|
|
*/
|
|
export function ensureDynamicRouterReady(
|
|
options: EnsureDynamicRouterOptions = {},
|
|
): Promise<void> {
|
|
if (isDynamicRouterInitialized()) {
|
|
return Promise.resolve();
|
|
}
|
|
|
|
const existing = getDynamicRouterBootstrapPromise();
|
|
if (existing) {
|
|
return existing;
|
|
}
|
|
|
|
setInitializingDynamicRouter(true);
|
|
const promise = initDynamicRouter({
|
|
forceRefresh: options.forceRefresh ?? false,
|
|
})
|
|
.then(() => {
|
|
markDynamicRouterInitialized(true);
|
|
})
|
|
.catch((err) => {
|
|
setDynamicRouterBootstrapPromise(null);
|
|
markDynamicRouterInitialized(false);
|
|
throw err;
|
|
})
|
|
.finally(() => {
|
|
setInitializingDynamicRouter(false);
|
|
});
|
|
|
|
setDynamicRouterBootstrapPromise(promise);
|
|
return promise;
|
|
}
|