front/src/router/ensure-dynamic-router.ts
zzh d3e1c62043 perf: 优化登录进系统链路,减轻首屏与进系统阻塞
登录页延后重型依赖与角色动画,i18n 拆登录轻量包;进系统只等待动态路由与完整语言包,EP/VXE 后台预热。兼容登录响应带回 userInfo。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-18 23:13:23 +08:00

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;
}