#
zhou zhou
1 天以前 4259deb19122a4807d50c99ed4a95405ebe4a47c
rsf-design/src/router/guards/beforeEach.js
@@ -8,6 +8,7 @@
import { RoutesAlias } from '../routesAlias'
import { staticRoutes } from '../routes/staticRoutes'
import { loadingService } from '@/utils/ui'
import { warmMenuIcons } from '@/utils/ui/iconify-loader'
import { useCommon } from '@/hooks/core/useCommon'
import { useWorktabStore } from '@/store/modules/worktab'
import { fetchGetUserInfo, normalizeUserInfo } from '@/api/auth'
@@ -20,6 +21,8 @@
let routeInitFailed = false
let routeInitInProgress = false
let pendingRouteLocation = null
let pendingWarmupMenuList = null
let homeWarmupTriggered = false
function getPendingLoading() {
  return pendingLoading
}
@@ -33,6 +36,8 @@
  routeInitFailed = false
  routeInitInProgress = false
  pendingRouteLocation = null
  pendingWarmupMenuList = null
  homeWarmupTriggered = false
}
function createRouteLocation(route) {
  return {
@@ -196,10 +201,12 @@
      throw new Error('获取菜单列表失败,请重新登录')
    }
    routeRegistry?.register(menuList)
    routeRegistry?.warm(menuList)
    pendingWarmupMenuList = menuList
    homeWarmupTriggered = false
    const menuStore = useMenuStore()
    menuStore.setMenuList(menuList)
    menuStore.addRemoveRouteFns(routeRegistry?.getRemoveRouteFns() || [])
    warmMenuIcons(menuList)
    IframeRouteManager.getInstance().save()
    useWorktabStore().validateWorktabs(router)
    const initialTargetLocation = createRouteLocation(to)
@@ -295,11 +302,29 @@
function isUnauthorizedError(error) {
  return isHttpError(error) && error.code === ApiStatus.unauthorized
}
function triggerHomeRouteWarmup(currentPath, homePath) {
  if (homeWarmupTriggered || !routeRegistry || !pendingWarmupMenuList?.length) {
    return
  }
  if (!currentPath || !homePath || currentPath !== homePath) {
    return
  }
  homeWarmupTriggered = true
  const schedule = globalThis.requestAnimationFrame
    ? (task) => globalThis.requestAnimationFrame(() => globalThis.requestAnimationFrame(task))
    : (task) => setTimeout(task, 120)
  schedule(() => {
    routeRegistry?.warm(pendingWarmupMenuList, {
      limit: Number.MAX_SAFE_INTEGER
    })
  })
}
export {
  getPendingLoading,
  getRouteInitFailed,
  resetPendingLoading,
  resetRouteInitState,
  resetRouterState,
  setupBeforeEachGuard
  setupBeforeEachGuard,
  triggerHomeRouteWarmup
}