fix: 修复兑换中心偶尔无法打开问题
This commit is contained in:
@@ -398,19 +398,25 @@ function goToActivation() {
|
|||||||
<!-- 激活码引导页 -->
|
<!-- 激活码引导页 -->
|
||||||
<div v-if="activeTab === 'activation'" class="activation-guide-container">
|
<div v-if="activeTab === 'activation'" class="activation-guide-container">
|
||||||
<div class="activation-content">
|
<div class="activation-content">
|
||||||
<div class="guide-icon">🎁</div>
|
<div class="guide-icon">
|
||||||
<h3 class="guide-title">激活码兑换</h3>
|
🎁
|
||||||
<p class="guide-desc">如果您持有意心AI的会员激活码或Token兑换码,<br>请点击下方按钮前往控制台进行兑换。</p>
|
</div>
|
||||||
<el-button
|
<h3 class="guide-title">
|
||||||
type="primary"
|
激活码兑换
|
||||||
size="large"
|
</h3>
|
||||||
class="redeem-jump-btn"
|
<p class="guide-desc">
|
||||||
round
|
如果您持有意心AI的会员激活码或Token兑换码,<br>请点击下方按钮前往控制台进行兑换。
|
||||||
|
</p>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="large"
|
||||||
|
class="redeem-jump-btn"
|
||||||
|
round
|
||||||
@click="goToActivation"
|
@click="goToActivation"
|
||||||
>
|
>
|
||||||
前往兑换中心
|
前往兑换中心
|
||||||
</el-button>
|
</el-button>
|
||||||
|
|
||||||
<div class="guide-tips">
|
<div class="guide-tips">
|
||||||
<p>💡 兑换成功后权益将立即生效</p>
|
<p>💡 兑换成功后权益将立即生效</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -864,31 +870,31 @@ function goToActivation() {
|
|||||||
min-height: 400px;
|
min-height: 400px;
|
||||||
background: linear-gradient(to bottom, #fff, #fdfdfd);
|
background: linear-gradient(to bottom, #fff, #fdfdfd);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
|
|
||||||
.activation-content {
|
.activation-content {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
max-width: 400px;
|
max-width: 400px;
|
||||||
|
|
||||||
.guide-icon {
|
.guide-icon {
|
||||||
font-size: 64px;
|
font-size: 64px;
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
animation: float-icon 3s ease-in-out infinite;
|
animation: float-icon 3s ease-in-out infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
.guide-title {
|
.guide-title {
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
color: #2c3e50;
|
color: #2c3e50;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.guide-desc {
|
.guide-desc {
|
||||||
color: #606266;
|
color: #606266;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
margin-bottom: 32px;
|
margin-bottom: 32px;
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.redeem-jump-btn {
|
.redeem-jump-btn {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
@@ -899,13 +905,13 @@ function goToActivation() {
|
|||||||
border: none;
|
border: none;
|
||||||
box-shadow: 0 4px 12px rgba(255, 117, 140, 0.3);
|
box-shadow: 0 4px 12px rgba(255, 117, 140, 0.3);
|
||||||
transition: all 0.3s;
|
transition: all 0.3s;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
transform: translateY(-2px);
|
transform: translateY(-2px);
|
||||||
box-shadow: 0 6px 16px rgba(255, 117, 140, 0.4);
|
box-shadow: 0 6px 16px rgba(255, 117, 140, 0.4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.guide-tips {
|
.guide-tips {
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
|||||||
@@ -86,7 +86,6 @@ const navItems = [
|
|||||||
// { name: 'userInfo', label: '用户信息', icon: 'User' },
|
// { name: 'userInfo', label: '用户信息', icon: 'User' },
|
||||||
{ name: 'apiKey', label: 'API密钥', icon: 'Key' },
|
{ name: 'apiKey', label: 'API密钥', icon: 'Key' },
|
||||||
|
|
||||||
|
|
||||||
{ name: 'rechargeLog', label: '充值记录', icon: 'Document' },
|
{ name: 'rechargeLog', label: '充值记录', icon: 'Document' },
|
||||||
{ name: 'usageStatistics', label: '用量统计', icon: 'Histogram' },
|
{ name: 'usageStatistics', label: '用量统计', icon: 'Histogram' },
|
||||||
{ name: 'premiumService', label: '尊享服务', icon: 'ColdDrink' },
|
{ name: 'premiumService', label: '尊享服务', icon: 'ColdDrink' },
|
||||||
@@ -105,6 +104,10 @@ function handleConfirm(activeNav: string) {
|
|||||||
// 导航切换
|
// 导航切换
|
||||||
function handleNavChange(nav: string) {
|
function handleNavChange(nav: string) {
|
||||||
activeNav.value = nav;
|
activeNav.value = nav;
|
||||||
|
// 同步更新 store 中的 tab 状态,防止下次通过 store 打开同一 tab 时因值未变而不触发 watch
|
||||||
|
if (userStore.userCenterActiveTab !== nav) {
|
||||||
|
userStore.userCenterActiveTab = nav;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 联系售后
|
// 联系售后
|
||||||
@@ -307,6 +310,9 @@ watch(() => guideTourStore.shouldStartUserCenterTour, (shouldStart) => {
|
|||||||
// ============ 监听 Store 状态,控制用户中心弹窗 (新增) ============
|
// ============ 监听 Store 状态,控制用户中心弹窗 (新增) ============
|
||||||
watch(() => userStore.isUserCenterVisible, (val) => {
|
watch(() => userStore.isUserCenterVisible, (val) => {
|
||||||
dialogVisible.value = val;
|
dialogVisible.value = val;
|
||||||
|
if (val && userStore.userCenterActiveTab) {
|
||||||
|
activeNav.value = userStore.userCenterActiveTab;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(() => userStore.userCenterActiveTab, (val) => {
|
watch(() => userStore.userCenterActiveTab, (val) => {
|
||||||
|
|||||||
@@ -52,8 +52,8 @@ export const useUserStore = defineStore(
|
|||||||
|
|
||||||
// 新增:打开用户中心方法
|
// 新增:打开用户中心方法
|
||||||
const openUserCenter = (tab: string = 'user') => {
|
const openUserCenter = (tab: string = 'user') => {
|
||||||
userCenterActiveTab.value = tab;
|
|
||||||
isUserCenterVisible.value = true;
|
isUserCenterVisible.value = true;
|
||||||
|
userCenterActiveTab.value = tab;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 新增:关闭用户中心方法
|
// 新增:关闭用户中心方法
|
||||||
|
|||||||
Reference in New Issue
Block a user