import { LoginFormData } from '@/schemas/login'; import { getUserInfoApi, loginApi } from '@/services/apis'; import { Auth } from '@/utils/auth'; import Taro from '@tarojs/taro'; import { create } from 'zustand'; // 用户信息 export interface UserState { enterpriseId: string; accountId: string; userId: string; userName: string; avatar: string; mobile: string; /** 是否正在加载用户信息 */ loading: boolean; getUserInfo: () => Promise; setUserInfo: (userInfo: Partial) => void; logout: () => void; login: (data: LoginFormData) => Promise; } // 创建用户状态管理store export const useUserStore = create((set, get) => ({ enterpriseId: '', accountId: '', userId: '', userName: '', avatar: '', mobile: '', loading: false, getUserInfo: async () => { const { mobile } = get(); set({ loading: true }); try { const info = await getUserInfoApi(mobile); set({ enterpriseId: (info as any).enterpriseId || '', accountId: (info as any).accountId || (info as any).enterpriseId || '', userId: (info as any).userId || '', userName: (info as any).userName || '', avatar: (info as any).avatar || '', loading: false, }); saveUserToStorage({ enterpriseId: (info as any).enterpriseId, accountId: (info as any).accountId || (info as any).enterpriseId, userId: (info as any).userId, userName: (info as any).userName, avatar: (info as any).avatar, }); } catch (error) { set({ loading: false }); console.error('获取用户信息失败:', error); throw error; } }, setUserInfo: (userInfo) => set((state) => ({ ...state, ...userInfo, })), logout: () => { set({ enterpriseId: '', accountId: '', userId: '', userName: '', avatar: '', mobile: '', loading: false, }); Auth.clearToken(); Auth.requireAuth(); }, login: async (data) => { const response = await loginApi(data); Auth.setToken(response); // 登录成功后获取用户信息(含 enterpriseId、accountId) const info = await getUserInfoApi(data.mobile); console.log('员工信息接口返回:', JSON.stringify(info)); set({ enterpriseId: (info as any).enterpriseId || '', accountId: (info as any).accountId || (info as any).enterpriseId || '', userId: (info as any).userId || '', userName: (info as any).userName || '', avatar: (info as any).avatar || '', mobile: data.mobile, }); saveUserToStorage({ enterpriseId: (info as any).enterpriseId, accountId: (info as any).accountId || (info as any).enterpriseId, userId: (info as any).userId, userName: (info as any).userName, avatar: (info as any).avatar, mobile: data.mobile, }); }, })); const USER_INFO_KEY = 'userInfo'; // 从本地存储加载用户信息 export const loadUserFromStorage = () => { try { const userInfo = Taro.getStorageSync(USER_INFO_KEY); if (userInfo) { const parsedUserInfo = JSON.parse(userInfo); useUserStore.getState().setUserInfo(parsedUserInfo); } } catch (error) { console.error('加载用户信息失败:', error); } }; // 保存用户信息到本地存储 export const saveUserToStorage = (userInfo: Partial) => { try { const currentUserInfo = useUserStore.getState(); const updatedUserInfo = { ...currentUserInfo, ...userInfo }; Taro.setStorageSync(USER_INFO_KEY, JSON.stringify(updatedUserInfo)); } catch (error) { console.error('保存用户信息失败:', error); } };