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

View File

@ -119,7 +119,18 @@ const backButtonTop = computed(() => {
})
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)

View File

@ -1,5 +1,6 @@
import { loginApi, registerApi, getOssPresignedUrlApi } from '@/utils/api'
import { downloadAndCacheAvatar } from '@/utils/avatarCache'
import { resetAllGuides } from '@/utils/guideConfig'
const state = {
token: uni.getStorageSync('access_token') || '',
@ -56,12 +57,29 @@ const mutations = {
state.token = ''
state.userInfo = 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
uni.removeStorageSync('access_token')
uni.removeStorageSync('user')
uni.removeStorageSync('star_id')
// 清除登录手机号
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)
}
/**
* 获取当前 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
@ -370,22 +402,33 @@ export function markGuideAsShown(key) {
* @param {string} key 引导key
*/
export function resetGuide(key) {
const storageKey = `guide_shown_${key}`
uni.removeStorageSync(storageKey)
uni.removeStorageSync(`guide_shown_${key}`)
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()
// 如果没有传入 userId从 storage 读取
if (userId === null) {
userId = getCurrentUserId()
}
keys.forEach(key => {
const storageKey = `guide_shown_${key}`
uni.removeStorageSync(storageKey)
uni.removeStorageSync(`guide_done_${key}`)
uni.removeStorageSync(`guide_step_${key}`)
uni.removeStorageSync(`guide_shown_${key}`)
if (userId) {
uni.removeStorageSync(`guide_done_${userId}_${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}
*/
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}
*/
export function isGuideRewardClaimed(key) {
const claimed = uni.getStorageSync('guide_rewards_claimed') || []
const claimed = uni.getStorageSync(makeUserIdKey('guide_rewards_claimed', '')) || []
return claimed.includes(key)
}
@ -450,7 +493,7 @@ export function getClaimableRewardCount() {
* @param {string} key 引导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)
uni.setStorageSync('guide_rewards_claimed', claimed)
uni.setStorageSync(makeUserIdKey('guide_rewards_claimed', ''), claimed)
// 发放奖励(需要调用后端接口,这里先本地记录)
console.log(`[Guide] 领取奖励: ${key}`, config.reward)
@ -568,7 +611,7 @@ export function getGuideStatusList() {
* @returns {number} 当前步骤索引默认0
*/
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 步骤索引
*/
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 步骤索引
*/
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)) {
completed.push(stepIndex)
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[]}
*/
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
*/
export function clearSubStepProgress(key) {
uni.removeStorageSync(`guide_completed_steps_${key}`)
uni.removeStorageSync(makeUserIdKey('guide_completed_steps', key))
}
/**