feat: 功能
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { ref, computed, watch } from 'vue'
|
||||
import { defineStore } from 'pinia'
|
||||
import { getJSON, setJSON, remove } from '@/utils/storage'
|
||||
import { clearAllTokens } from '@gold/utils/token-manager'
|
||||
|
||||
// 本地持久化的 key
|
||||
const STORAGE_KEY = 'user_store_v1'
|
||||
@@ -105,7 +106,48 @@ export const useUserStore = defineStore('user', () => {
|
||||
await persist()
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息(从后端)
|
||||
* 登录成功后调用,更新用户信息
|
||||
* 使用公共 hook @gold/hooks/web/useUserInfo
|
||||
*/
|
||||
async function fetchUserInfo() {
|
||||
try {
|
||||
// 使用公共 hook 获取用户信息
|
||||
const { getUserInfo } = await import('@gold/hooks/web/useUserInfo')
|
||||
const { getToken } = await import('@gold/utils/token-manager')
|
||||
|
||||
const userInfo = await getUserInfo({
|
||||
getToken,
|
||||
})
|
||||
|
||||
if (userInfo) {
|
||||
// 更新用户信息
|
||||
userId.value = String(userInfo.id || userInfo.userId || userId.value)
|
||||
nickname.value = userInfo.nickname || nickname.value
|
||||
avatar.value = userInfo.avatar || avatar.value
|
||||
// 如果有其他字段,也可以更新
|
||||
if (userInfo.point !== undefined) credits.value = Number(userInfo.point || 0)
|
||||
if (userInfo.experience !== undefined) {
|
||||
// experience 可以映射到其他字段,根据实际需求
|
||||
}
|
||||
await persist()
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取用户信息失败:', error)
|
||||
// 不抛出错误,避免影响登录流程
|
||||
}
|
||||
}
|
||||
|
||||
async function logout() {
|
||||
// 1. 清空所有 token
|
||||
try {
|
||||
clearAllTokens()
|
||||
} catch (e) {
|
||||
console.error('清空 token 失败:', e)
|
||||
}
|
||||
|
||||
// 2. 清空用户信息
|
||||
isLoggedIn.value = false
|
||||
userId.value = ''
|
||||
nickname.value = ''
|
||||
@@ -117,13 +159,22 @@ export const useUserStore = defineStore('user', () => {
|
||||
balance.value = 0
|
||||
vipLevel.value = 0
|
||||
credits.value = 0
|
||||
|
||||
// 3. 删除本地存储的用户数据
|
||||
await remove(STORAGE_KEY)
|
||||
}
|
||||
|
||||
// 初始化标志
|
||||
const isHydrated = ref(false)
|
||||
|
||||
// 初始化从本地恢复
|
||||
hydrateFromStorage()
|
||||
hydrateFromStorage().then(() => {
|
||||
isHydrated.value = true
|
||||
})
|
||||
|
||||
return {
|
||||
// 状态
|
||||
isHydrated,
|
||||
// state
|
||||
isLoggedIn,
|
||||
userId,
|
||||
@@ -143,6 +194,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
loginWithPhone,
|
||||
loginWithWeChat,
|
||||
updateBalance,
|
||||
fetchUserInfo,
|
||||
logout,
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user