diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index ba0b323..4d19cea 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -15,17 +15,17 @@ const routes = [ { path: '', name: 'Home', component: () => import('../views/user/Home.vue') }, { path: 'products', name: 'Products', component: () => import('../views/user/Products.vue') }, { path: 'products/:id', name: 'ProductDetail', component: () => import('../views/user/ProductDetail.vue') }, - { path: 'cart', name: 'Cart', component: () => import('../views/user/Cart.vue') }, - { path: 'orders', name: 'Orders', component: () => import('../views/user/Orders.vue') }, - { path: 'orders/:id', name: 'OrderDetail', component: () => import('../views/user/OrderDetail.vue') }, - { path: 'checkout/:id', name: 'Checkout', component: () => import('../views/user/Checkout.vue') }, - { path: 'profile', name: 'Profile', component: () => import('../views/user/Profile.vue') }, - { path: 'addresses', name: 'Addresses', component: () => import('../views/user/Addresses.vue') }, - { path: 'lotteries', name: 'Lotteries', component: () => import('../views/user/Lotteries.vue') }, - { path: 'lotteries/:id', name: 'LotteryDetail', component: () => import('../views/user/LotteryDetail.vue') }, - { path: 'tickets', name: 'Tickets', component: () => import('../views/user/Tickets.vue') }, - { path: 'tickets/create', name: 'CreateTicket', component: () => import('../views/user/CreateTicket.vue') }, - { path: 'tickets/:id', name: 'TicketDetail', component: () => import('../views/user/TicketDetail.vue') }, + { path: 'cart', name: 'Cart', component: () => import('../views/user/Cart.vue'), meta: { requiresAuth: true } }, + { path: 'orders', name: 'Orders', component: () => import('../views/user/Orders.vue'), meta: { requiresAuth: true } }, + { path: 'orders/:id', name: 'OrderDetail', component: () => import('../views/user/OrderDetail.vue'), meta: { requiresAuth: true } }, + { path: 'checkout/:id', name: 'Checkout', component: () => import('../views/user/Checkout.vue'), meta: { requiresAuth: true } }, + { path: 'profile', name: 'Profile', component: () => import('../views/user/Profile.vue'), meta: { requiresAuth: true } }, + { path: 'addresses', name: 'Addresses', component: () => import('../views/user/Addresses.vue'), meta: { requiresAuth: true } }, + { path: 'lotteries', name: 'Lotteries', component: () => import('../views/user/Lotteries.vue'), meta: { requiresAuth: true } }, + { path: 'lotteries/:id', name: 'LotteryDetail', component: () => import('../views/user/LotteryDetail.vue'), meta: { requiresAuth: true } }, + { path: 'tickets', name: 'Tickets', component: () => import('../views/user/Tickets.vue'), meta: { requiresAuth: true } }, + { path: 'tickets/create', name: 'CreateTicket', component: () => import('../views/user/CreateTicket.vue'), meta: { requiresAuth: true } }, + { path: 'tickets/:id', name: 'TicketDetail', component: () => import('../views/user/TicketDetail.vue'), meta: { requiresAuth: true } }, { path: 'articles', name: 'Articles', component: () => import('../views/user/Articles.vue') }, { path: 'articles/:id', name: 'ArticleDetail', component: () => import('../views/user/ArticleDetail.vue') }, { path: 'login', name: 'Login', component: () => import('../views/auth/Login.vue'), meta: { guest: true, hideSidebar: true } }, diff --git a/frontend/src/utils/request.ts b/frontend/src/utils/request.ts index 3476953..693bc61 100644 --- a/frontend/src/utils/request.ts +++ b/frontend/src/utils/request.ts @@ -27,18 +27,18 @@ api.interceptors.response.use( const message = error.response?.data?.error || error.message || 'Request failed' if (error.response?.status === 401) { const isLoginRequest = error.config?.url?.includes('/auth/login') - if (isLoginRequest) { + const isRegisterRequest = error.config?.url?.includes('/auth/register') + const isPublicRequest = error.config?.url?.includes('/settings/public') || error.config?.url?.includes('/installed') + + if (isLoginRequest || isRegisterRequest) { ElMessage.error(message) - } else { - const hadToken = !!localStorage.getItem('token') + } else if (!isPublicRequest) { localStorage.removeItem('token') localStorage.removeItem('user') - if (hadToken) { - ElMessage.error('登录已过期,请重新登录') - router.push('/login') - } else { - ElMessage.error(message) - } + ElMessage.error('请先登录') + router.push('/login') + } else { + ElMessage.error(message) } } else { ElMessage.error(message)