import { createRouter, createWebHistory } from 'vue-router' import { useUserStore } from '@/stores' import { getToken, setToken } from '@/utils/auth' const routes = [ { path: '/', redirect: '/home' }, { path: '/login', name: 'Login', component: () => import('@/views/login/index.vue') }, { path: '/home', name: 'home', component: () => import('@/views/home/index.vue') }, { path: '/generate', name: 'generate', component: () => import('@/views/home/index.vue') } ] const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes }) router.beforeEach(async (to, from) => { if (to.query.token) { setToken(to.query.token) } else { // 检查是否有 token const token = getToken() if (!token) { // 没有 token,重定向到登录页 return '/login' } } // 白名单路径(不需要验证 token 的路径) const whiteList = ['/login'] // 获取用户 store 实例 const userStore = useUserStore() // 如果访问的是白名单路径,直接放行 if (whiteList.includes(to.path)) { return true } // 检查 token 是否有效 try { const isTokenValid = await userStore.checkTokenValid() console.log(isTokenValid) if (isTokenValid) { // token 有效,允许访问 if (!userStore.userInfo.id) { // 如果用户信息不存在,则从服务器获取 await userStore.getInfo() } return true } else { // token 无效,重定向到登录页 return '/login' } } catch (error) { // 验证过程中出错,重定向到登录页 console.error('验证 token 时出错:', error) return '/login' } }) export default router