import { createRouter, createWebHistory } from 'vue-router' import routes from './routes' import { getToken } from '@/utils/token' import { useUserStore } from '@/stores/user' import { usePermissionStore } from '@/stores/permission' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes, }) // 权限码到路由路径的映射 const permRouteMap: Record = { 'business:member:view': '/member/list', 'business:memberCard:view': '/member/card', 'business:groupCourse:view': '/groupCourse/list', 'business:groupCourseType:view': '/groupCourse/type', 'business:groupCourseRecommend:view': '/groupCourse/recommend', 'business:checkIn:view': '/checkIn', 'business:dataCount:view': '/datacount', 'system:log:view': '/operationLog', 'system:user:view': '/system/account', 'system:role:view': '/system/role', 'system:dict:view': '/system/dict', } let permissionFetched = false router.beforeEach(async (to, _from, next) => { const token = getToken() // 登录页:已登录则跳转仪表盘 if (to.path === '/login') { if (token) { next('/dashboard') return } next() return } // 未登录则跳转登录 if (!token) { next('/login') return } const userStore = useUserStore() const permStore = usePermissionStore() // 首次进入时拉取权限并生成路由 if (!permissionFetched) { try { await userStore.fetchCurrentUser() permissionFetched = true } catch { next('/login') return } } // 仪表盘无需权限检查 if (to.path === '/dashboard') { next() return } // 查找该路径需要的权限 const requiredPerm = Object.entries(permRouteMap).find(([, path]) => path === to.path)?.[0] if (requiredPerm && !userStore.hasPermission(requiredPerm)) { next('/dashboard') return } next() }) export default router