Files
hhrs/pages/mine/mine.vue
T
jacobxu666 a53b228f0b fix: 退出登录与云闪付入口统一清理账号缓存,避免串号与脏数据
1. 新增 common/account.js,集中维护账号级本地缓存 key(token/phone/isAuth/hasWin/cardNumber/expiresTime/rightsCount/totalValueFen/authFlowStarted/authName/authIdNo),定位 lng/lat 属设备信息不清

2. 我的页退出登录原来只清 token/phone,权益缓存残留会被下一个账号当成自己的数据展示(权益页首屏读这些 key 兜底,且无手机号时 refreshStatus 不会刷新)

3. 首页云闪付入口是免密换人,进入前先清上一个账号的会话与权益缓存,否则请求仍带旧 accessToken,后端会话优先会把上一个账号的数据返回给新用户
2026-09-15 10:17:27 +08:00

198 lines
4.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="page">
<!-- 未登录 -->
<view class="user-section" v-if="!isLogin" @click="goLogin">
<view class="user-info">
<image class="user-avatar" src="https://aliyunoss.hn12301.net/hhrs/hhrs_wd_tx.png" mode="aspectFill" />
<text class="login-hint">点击登录</text>
</view>
</view>
<!-- 已登录 -->
<view class="user-section" v-else>
<view class="user-info">
<image class="user-avatar" src="https://aliyunoss.hn12301.net/hhrs/hhrs_wd_tx.png" mode="aspectFill" />
<view class="user-detail">
<text class="user-phone">{{ maskPhone }}</text>
</view>
</view>
<view class="logout-btn" @click="onLogout">退出登录</view>
</view>
<!-- 菜单列表 -->
<view class="menu-list">
<view class="menu-item" @click="goWinners">
<image class="menu-icon" src="https://aliyunoss.hn12301.net/hhrs/hhrs_wd_zjcx.png" mode="aspectFit" />
<text class="menu-label">用户中奖查询</text>
<u-icon name="arrow-right" color="#cccccc" size="28"></u-icon>
</view>
<view class="menu-item" @click="goGuide">
<image class="menu-icon" src="https://aliyunoss.hn12301.net/hhrs/hhrs_wd_syzn.png" mode="aspectFit" />
<text class="menu-label">使用指南</text>
<u-icon name="arrow-right" color="#cccccc" size="28"></u-icon>
</view>
<view class="menu-item" @click="goService">
<image class="menu-icon" src="https://aliyunoss.hn12301.net/hhrs/hhrs_wd_lxkf.png" mode="aspectFit" />
<text class="menu-label">联系客服</text>
<u-icon name="arrow-right" color="#cccccc" size="28"></u-icon>
</view>
</view>
</view>
</template>
<script>
import config from '@/common/config.js'
import account from '@/common/account.js'
export default {
data() {
return {
isLogin: false,
phone: ''
}
},
computed: {
maskPhone() {
if (!this.phone || this.phone.length < 7) return this.phone
return this.phone.substring(0, 3) + '****' + this.phone.substring(7)
}
},
onShow() {
this.phone = uni.getStorageSync('phone') || ''
this.isLogin = !!this.phone
},
methods: {
goLogin() {
uni.navigateTo({ url: '/pages/index/login' })
},
onLogout() {
uni.showModal({
title: '提示',
content: '确定要退出登录吗?',
success: (res) => {
if (res.confirm) {
// xuchao: 原来只清 token/phone,权益缓存(isAuth/hasWin/cardNumber/expiresTime/
// rightsCount 等)残留会被下一个账号当成自己的数据展示
account.clearAccountCache()
this.isLogin = false
this.phone = ''
uni.showToast({ title: '已退出登录', icon: 'success' })
}
}
})
},
goWinners() {
uni.navigateTo({ url: '/pages/winners/winners' })
},
goGuide() {
uni.navigateTo({ url: '/pages/guide/use' })
},
goService() {
// xuchao: 唤起拨号,号码与协议页公示的统一客服电话同源(common/config.js)
uni.makePhoneCall({
phoneNumber: config.servicePhone,
fail: () => {
uni.showToast({ title: '拨号失败,客服电话 ' + config.servicePhone, icon: 'none' })
}
})
}
}
}
</script>
<style>
page {
background-color: #f2f2f7;
}
</style>
<style>
/* 用户信息 */
.user-section {
display: flex;
align-items: center;
justify-content: space-between;
background: linear-gradient(to bottom, #0066cc, #f2f2f7);
padding: 40px 16px 130px;
}
.login-hint {
font-size: 16px;
color: #ffffff;
font-weight: 500;
margin-left: 12px;
}
.user-info {
display: flex;
align-items: center;
gap: 12px;
}
.user-avatar {
width: 48px;
height: 48px;
border-radius: 50%;
background-color: #ffffff;
}
.user-detail {
display: flex;
flex-direction: column;
gap: 4px;
}
.user-name {
font-size: 16px;
font-weight: 500;
color: #ffffff;
}
.user-phone {
font-size: 14px;
color: rgba(255, 255, 255, 0.8);
}
.logout-btn {
background-color: rgba(255, 255, 255, 0.2);
color: #ffffff;
font-size: 13px;
padding: 6px 16px;
border-radius: 4px;
}
/* 菜单列表 */
.menu-list {
margin: -88px 12px 0;
background-color: #ffffff;
border-radius: 8px;
}
.menu-item {
display: flex;
align-items: center;
height: 64px;
padding: 0 16px;
border-bottom: 1px solid #f5f5f5;
}
.menu-item:last-child {
border-bottom: none;
}
.menu-icon {
width: 36rpx;
height: 36rpx;
}
.menu-label {
flex: 1;
font-size: 15px;
color: #333333;
margin-left: 12px;
}
</style>