import {create} from "zustand"; import Storage from "../service/storage.ts"; import {getInfo, login} from './../service/user.ts' import {APP_CONFIG} from "../config.ts"; 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: () => Promise; }>((set, _, _state) => { return { userinfo: { id: 0 }, loginModalVisible: false, init: () => { const state = _state.getState() if (state.token) { return Promise.resolve() } const token = Storage.get(LOGIN_TOKEN_KEY); 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) }) } } })