feat: get user detail info

This commit is contained in:
2025-09-04 20:17:02 +08:00
parent bc26732558
commit a81088615f
4 changed files with 137 additions and 89 deletions

View File

@@ -1,58 +1,47 @@
import { create } from 'zustand'
import { fetchUserProfile, updateUserProfile, UserInfoType } from '@/services/loginService'
// 用户统计信息
export interface UserStats {
requestCount: number
matchesCreated: number
matchesJoined: number
lastActiveTime: string
export interface UserState {
user: UserInfoType
fetchUserInfo: () => Promise<void>
updateUserInfo: (userInfo: Partial<UserInfoType>) => void
}
// Store 状态接口
interface UserState {
userStats: UserStats
incrementRequestCount: () => void
resetUserStats: () => void
}
// 创建适配 Zustand 4.x 的 store
export const useUserStore = create<UserState>()((set) => ({
// 初始状态
userStats: {
requestCount: 0,
matchesCreated: 0,
matchesJoined: 0,
lastActiveTime: new Date().toISOString()
export const useUser = create<UserState>()((set) => ({
user: {
id: 0,
"openid": "",
"unionid": "",
"session_key": "",
"nickname": "张三",
"avatar_url": "https://example.com/avatar.jpg",
"gender": "",
"country": "",
"province": "",
"city": "",
"language": "",
"phone": "13800138000",
"is_subscribed": "0",
"latitude": 0,
"longitude": 0,
"subscribe_time": "2024-06-15 14:00:00",
"last_login_time": "2024-06-15 14:00:00"
},
// Actions
incrementRequestCount: () => {
console.log('store: incrementRequestCount 被调用')
set((state) => ({
userStats: {
...state.userStats,
requestCount: state.userStats.requestCount + 1,
lastActiveTime: new Date().toISOString()
}
}))
fetchUserInfo: async () => {
const res = await fetchUserProfile()
console.log(res)
set({ user: res.data })
},
resetUserStats: () => {
console.log('store: resetUserStats 被调用')
set({
userStats: {
requestCount: 0,
matchesCreated: 0,
matchesJoined: 0,
lastActiveTime: new Date().toISOString()
}
})
updateUserInfo: async(userInfo: Partial<UserInfoType>) => {
const res = await updateUserProfile(userInfo)
console.log(res)
set({ user: res.data })
}
}))
// 简单的 hooks
export const useUserStats = () => useUserStore((state) => state.userStats)
export const useUserActions = () => useUserStore((state) => ({
incrementRequestCount: state.incrementRequestCount,
resetUserStats: state.resetUserStats
}))
export const useUserInfo = () => useUser((state) => state.user)
export const useUserActions = () => useUser((state) => ({
fetchUserInfo: state.fetchUserInfo,
updateUserInfo: state.updateUserInfo
}))