diff --git a/src/views/homePage.vue b/src/views/homePage.vue index e1b03a9..3d3459a 100644 --- a/src/views/homePage.vue +++ b/src/views/homePage.vue @@ -168,29 +168,45 @@ const clearPopupReminder = async () => { ElMessage.error(error.message || '网络异常') } } -//判断是否需要显示Token清除提示 +// 判断是否需要显示Token清除提示 const checkTokenClearTip = () => { - // 1. 先判断是否已经提示过(本地缓存标记) - const hasShowClearTip = localStorage.getItem('hasShowTokenClearTip') - if (hasShowClearTip === '1') return + console.log('进入了') - // 格式化时间显示 - const formatDate = (dateStr) => { - const date = new Date(dateStr) - return `${date.getFullYear()} 年 ${String(date.getMonth() + 1).padStart(2, '0')} 月 ${String(date.getDate()).padStart(2, '0')} 日` - } + // 拿到当前登录用户的 token + const token = localStorage.getItem('localToken') + if (!token) return + + // 用 token 做唯一标记 key + const key = `token_clear_tip_shown_${token}` + const hasShown = localStorage.getItem(key) + + // 只要曾经弹过,就不再弹 + if (hasShown === '1') return - const startTime = formatDate(tokenClearTimeRange.value.startTime) - const endTime = formatDate(tokenClearTimeRange.value.endTime) + const formatDate = (dateStr) => { + const date = new Date(dateStr) + return `${date.getFullYear()} 年 ${String(date.getMonth() + 1).padStart(2, '0')} 月 ${String( + date.getDate() + ).padStart(2, '0')} 日` + } - currentClearText.value = `【通知】${startTime} - ${endTime} 期间获得的免费 Token 已统一清除,过期未使用额度不予保留、不累计、不顺延。` - showTokenClearDialog.value = true + const startTime = formatDate(tokenClearTimeRange.value.startTime) + const endTime = formatDate(tokenClearTimeRange.value.endTime) + + currentClearText.value = `【通知】${startTime} - ${endTime} 期间获得的AI情绪大模型和夺宝奇兵大模型免费 Token 已统一清除,过期未使用额度不予保留、不累计、不顺延。` + showTokenClearDialog.value = true } -// 关闭Token清除弹窗,并标记已提示 +// 关闭弹窗,并标记:这个token永远不再弹 const closeTokenClearDialog = () => { - showTokenClearDialog.value = false - localStorage.setItem('hasShowTokenClearTip', '1') + showTokenClearDialog.value = false + + const token = localStorage.getItem('localToken') + if (!token) return + + // 标记:此用户已看过弹窗 + const key = `token_clear_tip_shown_${token}` + localStorage.setItem(key, '1') } // 根据当前页面类型获取对应的音频store const getCurrentAudioStore = () => { @@ -1338,6 +1354,8 @@ const dialogVisible = ref(false); const rechargeDialogVisible = ref(false); const confirmDialogVisible = ref(false); const changeSuccessDialogVisible = ref(false); +//兑换锁定状态 +const isExchanging = ref(false); // 图片加载错误处理 const handleImageError = (event) => { @@ -1392,6 +1410,9 @@ const chooseLevel = (item) => { }; const changeToken = () => { + if (isExchanging.value) { + return; + } if (gold.value < activeLevel.value.position) { rechargeDialogVisible.value = true; return; @@ -1441,7 +1462,12 @@ const goRecharge = () => { }; const goChange = async () => { + if (isExchanging.value) { + return; + } try { + //锁定兑换状态 + isExchanging.value = true; await exchangeAPI({ token: String(localStorage.getItem("localToken")), num: activeLevel.value.position, @@ -1458,6 +1484,9 @@ const goChange = async () => { await chatStore.getUserCount(); } catch (e) { console.error("兑换失败", e); + }finally{ + //解锁兑换状态 + isExchanging.value = false; } }; // 8.18金币兑换Token end @@ -3039,7 +3068,7 @@ body { .token-row { display: flex; - justify-content: space-between; + justify-content: space-around; font-size: 16px; }