From 625eb76ebc4c70a61e6355f6d6c24e6a1f529e5c Mon Sep 17 00:00:00 2001 From: Admin Date: Mon, 13 Jul 2026 01:41:06 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9C=AA=E7=99=BB=E5=BD=95=E6=97=B6?= =?UTF-8?q?=E9=9D=99=E9=BB=98=E8=B7=B3=E8=BF=87=E9=9C=80=E8=A6=81=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E7=9A=84API=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ProductDetail.vue: fetchUserCredits 添加登录检查 - Cart.vue: fetchUserProfile 添加登录检查 - Lotteries.vue: fetchLotteries 添加登录检查 - LotteryDetail.vue: getById/register 添加登录检查和错误处理 避免未登录用户访问页面时出现401错误 --- frontend/src/views/user/Cart.vue | 8 +++++- frontend/src/views/user/Lotteries.vue | 22 ++++++++++++---- frontend/src/views/user/LotteryDetail.vue | 31 ++++++++++++++++++++--- 3 files changed, 51 insertions(+), 10 deletions(-) diff --git a/frontend/src/views/user/Cart.vue b/frontend/src/views/user/Cart.vue index 657a50c..7c2e9e0 100644 --- a/frontend/src/views/user/Cart.vue +++ b/frontend/src/views/user/Cart.vue @@ -458,10 +458,16 @@ async function fetchSettings() { } async function fetchUserProfile() { + // 未登录时静默跳过 + const token = localStorage.getItem('token') + if (!token) return + try { const res: any = await userApi.getProfile() userCredits.value = res.data?.purchase_credits || 0 - } catch {} + } catch { + // 静默处理错误 + } } async function fetchPaymentChannels() { diff --git a/frontend/src/views/user/Lotteries.vue b/frontend/src/views/user/Lotteries.vue index a41bcae..2d3929a 100644 --- a/frontend/src/views/user/Lotteries.vue +++ b/frontend/src/views/user/Lotteries.vue @@ -36,11 +36,23 @@ function formatDate(date: string) { } async function fetchLotteries() { - loading.value = true - const res: any = await lotteryApi.list() - lotteries.value = res.data || [] - total.value = res.pagination?.total || res.data?.length || 0 - loading.value = false + // 检查是否登录 + const token = localStorage.getItem('token') + if (!token) { + loading.value = false + return + } + + try { + loading.value = true + const res: any = await lotteryApi.list() + lotteries.value = res.data || [] + total.value = res.pagination?.total || res.data?.length || 0 + } catch { + // 静默处理错误 + } finally { + loading.value = false + } } onMounted(fetchLotteries) diff --git a/frontend/src/views/user/LotteryDetail.vue b/frontend/src/views/user/LotteryDetail.vue index 4bd23d4..9ebfd1a 100644 --- a/frontend/src/views/user/LotteryDetail.vue +++ b/frontend/src/views/user/LotteryDetail.vue @@ -46,13 +46,36 @@ function formatDate(date: string) { } onMounted(async () => { - const res: any = await lotteryApi.getById(Number(route.params.id)) - lottery.value = res.data + // 检查是否登录 + const token = localStorage.getItem('token') + if (!token) { + ElMessage.warning('请先登录后再查看抽奖详情') + return + } + + try { + const res: any = await lotteryApi.getById(Number(route.params.id)) + lottery.value = res.data + } catch { + // 静默处理错误 + } }) async function register() { - await lotteryApi.register(Number(route.params.id)) - ElMessage.success('报名成功') + // 检查是否登录 + const token = localStorage.getItem('token') + if (!token) { + ElMessage.warning('请先登录后再报名') + return + } + + try { + await lotteryApi.register(Number(route.params.id)) + ElMessage.success('报名成功') + } catch (err: any) { + const errorMsg = err.response?.data?.error || '报名失败' + ElMessage.error(errorMsg) + } }