feat: get user detail info
This commit is contained in:
@@ -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
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user