| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- 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<void>;
- setUserInfo: (userInfo: Partial<UserState>) => void;
- logout: () => void;
- login: (data: LoginFormData) => Promise<void>;
- }
- // 创建用户状态管理store
- export const useUserStore = create<UserState>((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<UserState>) => {
- try {
- const currentUserInfo = useUserStore.getState();
- const updatedUserInfo = { ...currentUserInfo, ...userInfo };
- Taro.setStorageSync(USER_INFO_KEY, JSON.stringify(updatedUserInfo));
- } catch (error) {
- console.error('保存用户信息失败:', error);
- }
- };
|