47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import { create } from 'zustand'
|
|
import { fetchUserProfile, updateUserProfile, UserInfoType } from '@/services/loginService'
|
|
|
|
export interface UserState {
|
|
user: UserInfoType
|
|
fetchUserInfo: () => Promise<void>
|
|
updateUserInfo: (userInfo: Partial<UserInfoType>) => void
|
|
}
|
|
|
|
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"
|
|
},
|
|
fetchUserInfo: async () => {
|
|
const res = await fetchUserProfile()
|
|
console.log(res)
|
|
set({ user: res.data })
|
|
},
|
|
updateUserInfo: async(userInfo: Partial<UserInfoType>) => {
|
|
const res = await updateUserProfile(userInfo)
|
|
set({ user: res.data })
|
|
}
|
|
}))
|
|
|
|
export const useUserInfo = () => useUser((state) => state.user)
|
|
|
|
export const useUserActions = () => useUser((state) => ({
|
|
fetchUserInfo: state.fetchUserInfo,
|
|
updateUserInfo: state.updateUserInfo
|
|
}))
|