import { createRouter, createWebHistory } from 'vue-router' import MainView from '@/views/MainView.vue' import DashboardView from '@/views/DashboardView.vue' import LoginView from '@/views/LoginView.vue' import { useUserStore } from '@/stores/user' import { useTeamStore } from '@/stores/team' const router = createRouter({ history: createWebHistory('/admin/'), routes: [ { path: '/', redirect: '/main/dashboard' }, { path: '/main', component: MainView, meta: { requiresAuth: true }, children: [ { path: '', redirect: '/main/dashboard' }, { path: 'dashboard', name: 'dashboard', component: DashboardView }, { path: 'user', name: 'user', component: () => import('@/views/UserView.vue') }, { path: 'sys-config', name: 'sys-config', component: () => import('@/views/SysConfigView.vue') }, { path: 'income', name: 'income', component: () => import('@/views/IncomeView.vue') }, { path: 'finance', name: 'finance', component: () => import('@/views/FinanceView.vue') }, { path: 'team', name: 'team', redirect: '/main/team/info', children: [ { path: 'info', name: 'team-info', component: () => import('@/views/TeamView.vue') }, { path: 'members', name: 'team-members', component: () => import('@/views/TeamMembersView.vue') } ] }, { path: 'link', name: 'link', component: () => import('@/views/LinkView.vue') }, ] }, { path: '/login', name: 'login', component: LoginView, meta: { guest: true } }, { path: '/:pathMatch(.*)*', redirect: '/main/dashboard' } ] }) router.beforeEach(async (to, from, next) => { const userStore = useUserStore() const teamStore = useTeamStore() if (to.meta.requiresAuth) { if (userStore.token && userStore.userInfo.id && userStore.userInfo.role) { if (userStore.userInfo.role === 'admin') { await teamStore.loadTeams() } next() } else if (userStore.token) { try { await userStore.sync() // 确保用户信息完整后再继续 if (userStore.userInfo.id && userStore.userInfo.role) { if (userStore.userInfo.role === 'admin') { await teamStore.loadTeams() } next() } else { // 用户信息不完整,清除token并重定向到登录页 userStore.logout() next('/login') } } catch (error) { console.error('同步用户信息失败:', error) userStore.logout() next('/login') } } else { next('/login') } } else if (to.path === '/login' && userStore.token) { next('/') } else { next() } }) export default router