peng
2025-11-06 c4938f6f4e839890b032c75c7a57333a6a9157a9
web/src/router/index.ts
@@ -1,5 +1,5 @@
import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
import { isLoggedIn } from '@/utils/auth'
import { isLoggedIn, getToken, isTokenExpired } from '@/utils/auth'
const routes: RouteRecordRaw[] = [
  {
@@ -81,6 +81,36 @@
        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'),
@@ -148,8 +178,9 @@
router.beforeEach((to, from, next) => {
  // 如果是登录页面,直接放行
  if (to.path === '/login') {
    // 如果已经登录,重定向到首页
    if (isLoggedIn()) {
    // 仅在“有token且未过期且本地已记录登录信息”时才从登录页跳转到首页
    const t = getToken()
    if (t && !isTokenExpired(t) && isLoggedIn()) {
      next('/')
    } else {
      next()
@@ -157,9 +188,9 @@
    return
  }
  // 检查是否已登录
  if (!isLoggedIn()) {
    // 未登录,重定向到登录页
  // 检查是否已登录且token未过期
  const token = getToken()
  if (!token || isTokenExpired(token) || !isLoggedIn()) {
    next('/login')
    return
  }