fix: 修改退出登录时,没有完全清除存储的数据
This commit is contained in:
parent
f426b84c0a
commit
d7634a558f
@ -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'
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user