import { getToken } from '../utils/tools' // 基础路由配置(不包含具体组件,需要在使用时注入) export const createBaseRoutes = (LoginPage, Page401, Page404, Page500) => { return [ { path: '/login', name: 'login', component: LoginPage }, { path: '/401', name: 'error_401', component: Page401 }, { path: '/404', name: 'error_404', component: Page404 }, { path: '/500', name: 'error_500', component: Page500 }, { path: '*', name: 'error_404_wildcard', component: Page404 } ] } // 路由守卫配置 export const setupRouterGuards = (router, ViewUI, homeName = 'home') => { router.beforeEach((to, from, next) => { const token = getToken() ViewUI.LoadingBar.start() if (to.name === 'view_log') { next() return } if (!token && to.name !== 'login') { // 未登录且访问非登录页 → 跳转到登录页 next({ name: 'login' }) } else if (!token && to.name === 'login') { // 未登录且访问登录页 → 允许访问 next() } else if (token && to.name === 'login') { // 已登录且访问登录页 → 重定向到首页 // 避免重复导航警告 if (from.name === homeName) { next(false) } else { next({ name: homeName }) } } else { // 已登录,检查路由是否存在 if (token && to.matched.length === 0 && to.path !== '/') { // 路由不存在,可能是动态路由还未加载完成 console.warn('路由未找到:', to.name || to.path, ',尝试等待动态路由加载') // 等待一小段时间后重试 setTimeout(() => { // 检查路由是否已经存在 const route = router.resolve(to.path) if (route && route.matched.length > 0) { next({ path: to.path, replace: true }) } else { console.error('路由仍然不存在:', to.name || to.path, ',跳转到首页') next({ name: homeName, replace: true }) } }, 150) return } // 其他情况 → 允许访问 next() } }) router.afterEach(to => { ViewUI.LoadingBar.finish() window.scrollTo(0, 0) }) return router } // 获取动态路由的方法 export function getRoutes(components = {}, uiTool) { const { Main, ParentView, Page404, HomePage } = components if (!Main || !ParentView || !Page404) { console.error('Missing required layout components') return null } return uiTool.getRoutes(Main, ParentView, Page404, HomePage) } // 创建路由实例的方法 export function createRouter(Router, components = {}, customRoutes = [], ViewUI) { const { LoginPage, Page401, Page404, Page500 } = components if (!LoginPage || !Page401 || !Page404 || !Page500) { console.error('Missing required page components') return null } const baseRoutes = createBaseRoutes(LoginPage, Page401, Page404, Page500) const router = new Router({ routes: [...baseRoutes, ...customRoutes], mode: 'hash' }) if (ViewUI) { setupRouterGuards(router, ViewUI, 'home') } return router } export default { createBaseRoutes, setupRouterGuards, createRouter, getRoutes }