import {create} from "zustand"; import Storage from "../service/storage"; import {getInfo, login} from './../service/user' import {APP_CONFIG} from "../config"; import {UserModel} from "../../model"; type LoginDataType = { account: string; code?: string; password: string } const LOGIN_TOKEN_KEY = APP_CONFIG.LOGIN_TOKEN_KEY, CACHE = { init: false }; export const useUserinfoStore = create<{ /** * 用户信息 */ userinfo: UserModel; /** * 用户登录凭证 */ token?: string; /** * 登录 * @param data * @param type */ login: (data: LoginDataType) => Promise; /** * 注销用户登录信息 */ logout: () => Promise; /** * 初始化用户数据 */ init: () => void; showLogin: () => void; setUid: (id: number) => void; }>((set, _, _state) => { return { showLogin() { // const navigate = useNavigate() // navigate('/') set({ userinfo: { id: -1 }, token: undefined }) Storage.remove(LOGIN_TOKEN_KEY) }, setUid(id) { set({ userinfo: {id} }) }, userinfo: { id: 0 }, loginModalVisible: false, init: () => { const state = _state.getState() if (state.token) { return; } const token = Storage.get(LOGIN_TOKEN_KEY); if (token) { getInfo().then((info) => { set({ userinfo: info, token }) }) } // return new Promise((resolve) => { // if (token) { // getInfo().then((info) => { // set({ // userinfo: info, // token // }) // }) // } // resolve(); // }); }, logout: () => { return new Promise((resolve) => { setTimeout(() => { set({ userinfo: { id: 0 }, token: undefined }) Storage.remove(LOGIN_TOKEN_KEY) resolve(); }, 500); }); }, login: (data) => { return new Promise((resolve, reject) => { login(data.account, data.password).then((ret) => { const token = ret.token; Storage.put(LOGIN_TOKEN_KEY, token) getInfo().then(userinfo => { set({ userinfo, token: userinfo.token }) resolve() }).catch(reject) }).catch(reject) }) } } })