| | |
| | | import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router' |
| | | import { isLoggedIn } from '@/utils/auth' |
| | | import { isLoggedIn, getToken, isTokenExpired } from '@/utils/auth' |
| | | |
| | | const routes: RouteRecordRaw[] = [ |
| | | { |
| | |
| | | meta: { title: '评分详情', icon: 'Edit' } |
| | | }, |
| | | { |
| | | path: '/news', |
| | | name: 'News', |
| | | component: () => import('@/views/news-list.vue'), |
| | | meta: { title: '新闻管理', icon: 'Document' } |
| | | }, |
| | | { |
| | | path: '/news/new', |
| | | name: 'NewsCreate', |
| | | component: () => import('@/views/NewsForm.vue'), |
| | | meta: { title: '新增新闻', hidden: true } |
| | | }, |
| | | { |
| | | path: '/news/edit/:id', |
| | | name: 'NewsEdit', |
| | | component: () => import('@/views/NewsForm.vue'), |
| | | meta: { title: '编辑新闻', hidden: true } |
| | | }, |
| | | { |
| | | path: '/news/list', |
| | | name: 'NewsListPage', |
| | | component: () => import('@/views/NewsListPage.vue'), |
| | | meta: { title: '新闻列表', hidden: true } |
| | | }, |
| | | { |
| | | path: '/news/detail/:id', |
| | | name: 'NewsDetail', |
| | | component: () => import('@/views/NewsDetail.vue'), |
| | | meta: { title: '新闻详情', hidden: true } |
| | | }, |
| | | { |
| | | path: '/carousel', |
| | | name: 'Carousel', |
| | | component: () => import('@/views/carousel/index.vue'), |
| | |
| | | router.beforeEach((to, from, next) => { |
| | | // 如果是登录页面,直接放行 |
| | | if (to.path === '/login') { |
| | | // 如果已经登录,重定向到首页 |
| | | if (isLoggedIn()) { |
| | | // 仅在“有token且未过期且本地已记录登录信息”时才从登录页跳转到首页 |
| | | const t = getToken() |
| | | if (t && !isTokenExpired(t) && isLoggedIn()) { |
| | | next('/') |
| | | } else { |
| | | next() |
| | |
| | | return |
| | | } |
| | | |
| | | // 检查是否已登录 |
| | | if (!isLoggedIn()) { |
| | | // 未登录,重定向到登录页 |
| | | // 检查是否已登录且token未过期 |
| | | const token = getToken() |
| | | if (!token || isTokenExpired(token) || !isLoggedIn()) { |
| | | next('/login') |
| | | return |
| | | } |