generated from template/vite-react-template
51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
import { message } from '../../app';
|
|
import { query } from '../../app';
|
|
import { createStore } from 'zustand/vanilla';
|
|
type User = {
|
|
id: string;
|
|
username?: string;
|
|
nickname?: string;
|
|
avatar: string;
|
|
};
|
|
|
|
interface UserWallStore {
|
|
user?: User;
|
|
setUser: (user: User) => void;
|
|
/**
|
|
* 查询用户信息,用户没有登陆,则打开登陆页面
|
|
* @param openOnNoLogin
|
|
* @returns
|
|
*/
|
|
queryMe: (openOnNoLogin?: boolean) => Promise<void>;
|
|
logout: () => void;
|
|
isLogin: () => boolean;
|
|
}
|
|
|
|
export const useUserWallStore = createStore<UserWallStore>((set, get) => ({
|
|
user: undefined,
|
|
setUser: (user: User) => set({ user }),
|
|
queryMe: async (openOnNoLogin = true) => {
|
|
const res = await query.post(
|
|
{
|
|
path: 'user',
|
|
key: 'me',
|
|
},
|
|
{
|
|
afterResponse: !openOnNoLogin ? async (res) => res : undefined,
|
|
},
|
|
);
|
|
console.log('queryMe', res);
|
|
if (res.code === 200) {
|
|
set({ user: res.data });
|
|
}
|
|
},
|
|
|
|
logout: () => {
|
|
set({ user: undefined });
|
|
localStorage.removeItem('token');
|
|
},
|
|
isLogin: () => {
|
|
return !!get().user;
|
|
},
|
|
}));
|