fix: 我的页去重复充值入口+未登录引导卡;充值页去Pro会员残留+未登录弹窗引导登录

This commit is contained in:
2026-09-14 11:25:57 +08:00
parent d44893d78d
commit 97f75bee35
2 changed files with 32 additions and 33 deletions
+13 -29
View File
@@ -55,8 +55,16 @@
</view> </view>
</view> </view>
<!-- 星尘余额 + 今日免费(简化模型:每天5次免费,用完充值星尘) --> <!-- 星尘余额 + 今日免费(已登录) -->
<view class="balance-card"> <view class="balance-card" v-if="userStore.isLoggedIn">
<!-- 未登录:引导登录(简洁明确) -->
<view class="balance-card login-guide" v-if="!userStore.isLoggedIn" @click="goLogin">
<view class="balance-left">
<text class="login-guide-title">登录后开始探索</text>
<text class="login-guide-sub">每天 5 次免费 AI 问答 · 点亮知识星球</text>
</view>
<view class="recharge-go"><text>去登录</text></view>
</view>
<view class="balance-left"> <view class="balance-left">
<view class="coin-row"> <view class="coin-row">
<text class="coin-icon">✨</text> <text class="coin-icon">✨</text>
@@ -69,16 +77,6 @@
<text>充值</text> <text>充值</text>
</view> </view>
</view> </view>
<!-- 星尘充值入口 -->
<view class="vpay-entry" @click="goRecharge">
<view class="ve-icon">✨</view>
<view class="ve-info">
<text class="ve-title">充值星尘</text>
<text class="ve-desc">AI问答 · 会员订阅</text>
</view>
<text class="ve-arrow">→</text>
</view>
<!-- 菜单列表 --> <!-- 菜单列表 -->
<view class="menu-section"> <view class="menu-section">
<view class="menu-item" @click="goFavorites"> <view class="menu-item" @click="goFavorites">
@@ -113,19 +111,7 @@
<AppIcon name="arrow-gray" :size="12" /> <AppIcon name="arrow-gray" :size="12" />
</view> </view>
</view> </view>
<view v-if="userStore.isLoggedIn" class="action-btn logout" @click="handleLogout">
<!-- 登录入口:统一走上方订阅卡(登录后升级);H5 保留登录/注册快捷按钮 -->
<view class="action-row" v-if="!userStore.isLoggedIn">
<!-- #ifdef H5 -->
<view class="action-btn primary" @click="goLogin">
<text>登录 / 注册</text>
</view>
<!-- #endif -->
<view class="action-btn ghost" @click="goLogin">
<text>去登录,同步点亮进度</text>
</view>
</view>
<view class="action-btn logout" v-else @click="handleLogout">
<text>退出登录</text> <text>退出登录</text>
</view> </view>
@@ -144,7 +130,7 @@ import { APP_VERSION } from '@/utils/version'
const SUB_GUEST = '游客 · 点亮进度保存在本机,登录后同步' const SUB_GUEST = '游客 · 点亮进度保存在本机,登录后同步'
const SUB_USER = '已点亮 {n} 颗星球 · 连续 {d} 天' const SUB_USER = '已点亮 {n} 颗星球 · 连续 {d} 天'
const PLAN_FREE = '✦ 免费版'
const PLAN_DESC_FREE = '每日 5 次 AI 问答 · 答对检测题点亮星球' const PLAN_DESC_FREE = '每日 5 次 AI 问答 · 答对检测题点亮星球'
const userStore = useUserStore() const userStore = useUserStore()
@@ -165,9 +151,7 @@ const profileSubText = computed(() => {
return `已点亮 ${stats.value.totalLit} 颗星球 · 连续 ${stats.value.streak} 天` return `已点亮 ${stats.value.totalLit} 颗星球 · 连续 ${stats.value.streak} 天`
}) })
const planTitle = computed(() =>
userStore.isSubscribed ? `✦ ${userStore.subscriptionLevel?.toUpperCase() || 'PRO'} 会员` : PLAN_FREE
)
const planDesc = computed(() => const planDesc = computed(() =>
userStore.isSubscribed ? '全量知识解锁 · AI 问答无限次' : PLAN_DESC_FREE userStore.isSubscribed ? '全量知识解锁 · AI 问答无限次' : PLAN_DESC_FREE
) )
+19 -4
View File
@@ -28,7 +28,7 @@
<view class="use-cases"> <view class="use-cases">
<text class="uc-title">{{ info.coinName || '星尘' }}用途</text> <text class="uc-title">{{ info.coinName || '星尘' }}用途</text>
<view class="uc-item"><text class="uc-tag">问答</text><text>AI 问答一次 10 {{ info.coinName || '星尘' }}</text></view> <view class="uc-item"><text class="uc-tag">问答</text><text>AI 问答一次 10 {{ info.coinName || '星尘' }}</text></view>
<view class="uc-item"><text class="uc-tag">会员</text><text>Pro 月卡 3000 {{ info.coinName || '星尘' }}</text></view> <view class="uc-item"><text class="uc-tag">连续</text><text>更多星尘用途陆续开放</text></view>
</view> </view>
<view class="pay-agreement-row"> <view class="pay-agreement-row">
@@ -60,15 +60,30 @@ function openAgreement() {
onMounted(async () => { onMounted(async () => {
if (!userStore.isLoggedIn) { if (!userStore.isLoggedIn) {
uni.showToast({ title: '请先登录', icon: 'none' }) uni.showModal({
setTimeout(() => uni.navigateBack(), 1500) title: '请先登录',
content: '登录后即可充值星尘,每天还有 5 次免费问答',
confirmText: '去登录',
showCancel: false,
success: () => uni.redirectTo({ url: '/pages/login/login' }),
})
return return
} }
try { try {
info.value = await request('GET', '/api/vpay/info', null, userStore.token) info.value = await request('GET', '/api/vpay/info', null, userStore.token)
if ((info.value.packages || []).length) picked.value = info.value.packages[0].id if ((info.value.packages || []).length) picked.value = info.value.packages[0].id
} catch (e) { } catch (e) {
uni.showToast({ title: e.message || '获取充值信息失败', icon: 'none' }) if (String(e.message || '').includes('登录')) {
uni.showModal({
title: '登录已过期',
content: '请重新登录后再充值',
confirmText: '去登录',
showCancel: false,
success: () => uni.redirectTo({ url: '/pages/login/login' }),
})
} else {
uni.showToast({ title: e.message || '获取充值信息失败', icon: 'none' })
}
} }
}) })