import { getToken, refreshAccessToken, isNullOrWhitespace } from '@/utils' import { addDynamicRoutes } from '@/router' const WHITE_LIST = ['/login', '/404'] export function createPermissionGuard(router) { router.beforeEach(async (to) => { const token = getToken() /** 没有token的情况 */ if (isNullOrWhitespace(token)) { if (WHITE_LIST.includes(to.path)) return true return { path: 'login', query: { ...to.query, redirect: to.path } } } /** 单点登录的情况 */ if (to.query.tk) return true /** 有token的情况 */ if (to.path === '/login') return { path: '/' } // 确保动态路由已加载 if (token && !router.hasRoute('Dashboard')) { try { await addDynamicRoutes() // 如果当前路径不存在,重定向到工作台 if (to.path !== '/' && !router.hasRoute(to.name)) { return { path: '/workbench' } } } catch (error) { console.error('动态路由加载失败:', error) return { path: '/login' } } } refreshAccessToken() return true }) }