fix: 修改退出登录时,没有完全清除存储的数据

This commit is contained in:
zerosaturation 2026-04-21 16:39:16 +08:00
parent f426b84c0a
commit d7634a558f
4 changed files with 95 additions and 22 deletions

View File

@ -109,6 +109,7 @@ import { ref } from 'vue';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
import { validatePhone, validatePassword } from '@/utils/validator'; import { validatePhone, validatePassword } from '@/utils/validator';
import { AGREEMENT_CONTENT } from '@/utils/agreement'; import { AGREEMENT_CONTENT } from '@/utils/agreement';
import { resetAllGuides } from '@/utils/guideConfig';
const store = useStore(); const store = useStore();
@ -137,9 +138,9 @@ const togglePassword = () => {
// //
const goToRegister = () => { const goToRegister = () => {
// //
resetAllGuides();
uni.removeStorageSync('is_new_user'); uni.removeStorageSync('is_new_user');
uni.removeStorageSync('has_seen_welcome'); uni.removeStorageSync('has_seen_welcome');
uni.removeStorageSync('guide_shown_square_home');
uni.navigateTo({ uni.navigateTo({
url: '/pages/register/register' url: '/pages/register/register'

View File

@ -119,7 +119,18 @@ const backButtonTop = computed(() => {
}) })
const handleBack = () => { const handleBack = () => {
uni.navigateBack() //
const pages = getCurrentPages();
if (pages.length > 1) {
//
uni.navigateBack();
} else {
uni.removeStorageSync('is_new_user')
// square
uni.reLaunch({
url: '/pages/square/square'
});
}
} }
const loading = ref(true) const loading = ref(true)

View File

@ -1,5 +1,6 @@
import { loginApi, registerApi, getOssPresignedUrlApi } from '@/utils/api' import { loginApi, registerApi, getOssPresignedUrlApi } from '@/utils/api'
import { downloadAndCacheAvatar } from '@/utils/avatarCache' import { downloadAndCacheAvatar } from '@/utils/avatarCache'
import { resetAllGuides } from '@/utils/guideConfig'
const state = { const state = {
token: uni.getStorageSync('access_token') || '', token: uni.getStorageSync('access_token') || '',
@ -56,12 +57,29 @@ const mutations = {
state.token = '' state.token = ''
state.userInfo = null state.userInfo = null
state.starId = null state.starId = null
// 获取当前 userId 用于清除引导数据(需要在清除 user 数据之前获取)
const userStr = uni.getStorageSync('user')
let userId = null
if (userStr) {
try {
const user = JSON.parse(userStr)
userId = user?.uid || null
} catch (e) {}
}
// 清除所有引导相关存储(传入 userId 确保正确清除)
resetAllGuides(userId)
// 清除 storage // 清除 storage
uni.removeStorageSync('access_token') uni.removeStorageSync('access_token')
uni.removeStorageSync('user') uni.removeStorageSync('user')
uni.removeStorageSync('star_id') uni.removeStorageSync('star_id')
// 清除登录手机号 // 清除登录手机号
uni.removeStorageSync('login_mobile') uni.removeStorageSync('login_mobile')
// 清除 gallery_owner_id
uni.removeStorageSync('gallery_owner_id')
// 清除每日登录打卡记录
const today = new Date().toISOString().split('T')[0]
uni.removeStorageSync(`daily_login_completed_${today}`)
} }
} }

View File

@ -307,6 +307,38 @@ export function getAllGuideKeys() {
return Object.keys(guideConfig) return Object.keys(guideConfig)
} }
/**
* 获取当前 userId localStorage 读取
* @returns {number|null}
*/
function getCurrentUserId() {
const userStr = uni.getStorageSync('user')
if (userStr) {
try {
const user = JSON.parse(userStr)
return user?.uid || null
} catch (e) {
return null
}
}
return null
}
/**
* 生成带 userId 的存储 key
* @param {string} prefix 前缀
* @param {string} key 引导key
* @returns {string}
*/
function makeUserIdKey(prefix, key) {
const userId = getCurrentUserId()
if (userId) {
return `${prefix}_${userId}_${key}`
}
// 如果没有 userId使用默认值确保不会跨账号混淆
return `${prefix}_default_${key}`
}
/** /**
* 检查是否需要显示某个引导 * 检查是否需要显示某个引导
* @param {string} key 引导key * @param {string} key 引导key
@ -370,22 +402,33 @@ export function markGuideAsShown(key) {
* @param {string} key 引导key * @param {string} key 引导key
*/ */
export function resetGuide(key) { export function resetGuide(key) {
const storageKey = `guide_shown_${key}` uni.removeStorageSync(`guide_shown_${key}`)
uni.removeStorageSync(storageKey) uni.removeStorageSync(makeUserIdKey('guide_done', key))
uni.removeStorageSync(makeUserIdKey('guide_step', key))
uni.removeStorageSync(makeUserIdKey('guide_rewards_claimed', key))
} }
/** /**
* 重置所有引导用于调试 * 重置所有引导
* @param {number|string|null} userId 用户ID如果不传则从 storage 读取
*/ */
export function resetAllGuides() { export function resetAllGuides(userId = null) {
const keys = getAllGuideKeys() const keys = getAllGuideKeys()
// 如果没有传入 userId从 storage 读取
if (userId === null) {
userId = getCurrentUserId()
}
keys.forEach(key => { keys.forEach(key => {
const storageKey = `guide_shown_${key}` uni.removeStorageSync(`guide_shown_${key}`)
uni.removeStorageSync(storageKey) if (userId) {
uni.removeStorageSync(`guide_done_${key}`) uni.removeStorageSync(`guide_done_${userId}_${key}`)
uni.removeStorageSync(`guide_step_${key}`) uni.removeStorageSync(`guide_step_${userId}_${key}`)
uni.removeStorageSync(`guide_completed_steps_${userId}_${key}`)
}
}) })
uni.removeStorageSync('guide_rewards_claimed') if (userId) {
uni.removeStorageSync(`guide_rewards_claimed_${userId}`)
}
} }
// ==================== 新增:状态管理函数 ==================== // ==================== 新增:状态管理函数 ====================
@ -396,7 +439,7 @@ export function resetAllGuides() {
* @returns {boolean} * @returns {boolean}
*/ */
export function isGuideDone(key) { export function isGuideDone(key) {
return uni.getStorageSync(`guide_done_${key}`) === true return uni.getStorageSync(makeUserIdKey('guide_done', key)) === true
} }
/** /**
@ -405,7 +448,7 @@ export function isGuideDone(key) {
* @returns {boolean} * @returns {boolean}
*/ */
export function isGuideRewardClaimed(key) { export function isGuideRewardClaimed(key) {
const claimed = uni.getStorageSync('guide_rewards_claimed') || [] const claimed = uni.getStorageSync(makeUserIdKey('guide_rewards_claimed', '')) || []
return claimed.includes(key) return claimed.includes(key)
} }
@ -450,7 +493,7 @@ export function getClaimableRewardCount() {
* @param {string} key 引导key * @param {string} key 引导key
*/ */
export function markGuideDone(key) { export function markGuideDone(key) {
uni.setStorageSync(`guide_done_${key}`, true) uni.setStorageSync(makeUserIdKey('guide_done', key), true)
} }
/** /**
@ -475,9 +518,9 @@ export function claimGuideReward(key) {
} }
// 标记已领取 // 标记已领取
const claimed = uni.getStorageSync('guide_rewards_claimed') || [] const claimed = uni.getStorageSync(makeUserIdKey('guide_rewards_claimed', '')) || []
claimed.push(key) claimed.push(key)
uni.setStorageSync('guide_rewards_claimed', claimed) uni.setStorageSync(makeUserIdKey('guide_rewards_claimed', ''), claimed)
// 发放奖励(需要调用后端接口,这里先本地记录) // 发放奖励(需要调用后端接口,这里先本地记录)
console.log(`[Guide] 领取奖励: ${key}`, config.reward) console.log(`[Guide] 领取奖励: ${key}`, config.reward)
@ -568,7 +611,7 @@ export function getGuideStatusList() {
* @returns {number} 当前步骤索引默认0 * @returns {number} 当前步骤索引默认0
*/ */
export function getGuideCurrentStep(key) { export function getGuideCurrentStep(key) {
return uni.getStorageSync(`guide_step_${key}`) || 0 return uni.getStorageSync(makeUserIdKey('guide_step', key)) || 0
} }
/** /**
@ -577,7 +620,7 @@ export function getGuideCurrentStep(key) {
* @param {number} step 步骤索引 * @param {number} step 步骤索引
*/ */
export function setGuideCurrentStep(key, step) { export function setGuideCurrentStep(key, step) {
uni.setStorageSync(`guide_step_${key}`, step) uni.setStorageSync(makeUserIdKey('guide_step', key), step)
} }
/** /**
@ -597,11 +640,11 @@ export function getNextUndoneGuideKey() {
* @param {number} stepIndex 步骤索引 * @param {number} stepIndex 步骤索引
*/ */
export function completeSubStep(key, stepIndex) { export function completeSubStep(key, stepIndex) {
const completed = uni.getStorageSync(`guide_completed_steps_${key}`) || [] const completed = uni.getStorageSync(makeUserIdKey('guide_completed_steps', key)) || []
if (!completed.includes(stepIndex)) { if (!completed.includes(stepIndex)) {
completed.push(stepIndex) completed.push(stepIndex)
completed.sort((a, b) => a - b) completed.sort((a, b) => a - b)
uni.setStorageSync(`guide_completed_steps_${key}`, completed) uni.setStorageSync(makeUserIdKey('guide_completed_steps', key), completed)
} }
} }
@ -611,7 +654,7 @@ export function completeSubStep(key, stepIndex) {
* @returns {number[]} * @returns {number[]}
*/ */
export function getCompletedSteps(key) { export function getCompletedSteps(key) {
return uni.getStorageSync(`guide_completed_steps_${key}`) || [] return uni.getStorageSync(makeUserIdKey('guide_completed_steps', key)) || []
} }
/** /**
@ -672,7 +715,7 @@ export function hasGuideProgress(key) {
* @param {string} key 引导key * @param {string} key 引导key
*/ */
export function clearSubStepProgress(key) { export function clearSubStepProgress(key) {
uni.removeStorageSync(`guide_completed_steps_${key}`) uni.removeStorageSync(makeUserIdKey('guide_completed_steps', key))
} }
/** /**