import { create } from 'zustand'; import { devtools, persist } from 'zustand/middleware'; import { immer } from 'zustand/middleware/immer'; import type { UserUpdateParams } from '@/types/user'; import type { UserType } from '@fastgpt/global/support/user/type.d'; import { getTokenLogin, putUserInfo } from '@/web/support/user/api'; import { FeTeamPlanStatusType } from '@fastgpt/global/support/wallet/sub/type'; import { getTeamPlanStatus } from './team/api'; type State = { systemMsgReadId: string; setSysMsgReadId: (id: string) => void; userInfo: UserType | null; initUserInfo: () => Promise; setUserInfo: (user: UserType | null) => void; updateUserInfo: (user: UserUpdateParams) => Promise; teamPlanStatus: FeTeamPlanStatusType | null; initTeamPlanStatus: () => Promise; }; export const useUserStore = create()( devtools( persist( immer((set, get) => ({ systemMsgReadId: '', setSysMsgReadId(id: string) { set((state) => { state.systemMsgReadId = id; }); }, userInfo: null, async initUserInfo() { get().initTeamPlanStatus(); const res = await getTokenLogin(); get().setUserInfo(res); //设置html的fontsize const html = document?.querySelector('html'); if (html) { // html.style.fontSize = '16px'; } return res; }, setUserInfo(user: UserType | null) { set((state) => { state.userInfo = user ? user : null; }); }, async updateUserInfo(user: UserUpdateParams) { const oldInfo = (get().userInfo ? { ...get().userInfo } : null) as UserType | null; set((state) => { if (!state.userInfo) return; state.userInfo = { ...state.userInfo, ...user }; }); try { await putUserInfo(user); } catch (error) { set((state) => { state.userInfo = oldInfo; }); return Promise.reject(error); } }, // team teamPlanStatus: null, initTeamPlanStatus() { return getTeamPlanStatus().then((res) => { set((state) => { state.teamPlanStatus = res; }); return res; }); } })), { name: 'userStore', partialize: (state) => ({ systemMsgReadId: state.systemMsgReadId }) } ) ) );