| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- 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
|