/** * 租户状态管理 * 使用 Zustand + AsyncStorage 持久化 */ import { create } from 'zustand'; // import { useShallow } from 'zustand/react/shallow'; import storageManager, { STORAGE_KEYS } from '@/utils/storageManager'; import { tenantService } from '@/services'; /** * 租户信息接口 */ export interface Tenant { tid: number; proxy: number; create_time: string; domain_addr: string } // 状态 interface State { tenantInfo: Tenant | null; } // 操作 interface Actions { setTenantInfo: (data: Record) => void; } /** * 租户状态 Store */ const useTenantStore = create()((set, get) => ({ // 初始状态 tenantInfo: null, // 设置租户信息(通用方法,包含持久化逻辑) setTenantInfo: (data: any) => { set({ tenantInfo: data }); // 手动持久化 storageManager.session.setItem(STORAGE_KEYS.TENANT_STORE, get()); storageManager.session.setItem(STORAGE_KEYS.TENANT_TID, data?.tid ?? ''); if (__DEV__) { console.log('💾 Tenant info saved:', data); } }, })); // 从 AsyncStorage 恢复状态的函数 export const restoreTenantState = async () => { try { const stored = storageManager.session.getItem(STORAGE_KEYS.TENANT_STORE); if (stored) { const state = JSON.parse(stored); useTenantStore.setState(state); if (__DEV__) { console.log('✅ Tenant state restored from storage'); } } } catch (error) { console.error('Failed to restore tenant state:', error); } }; /** * 选择器 Hooks(优化性能,避免不必要的重渲染) */ // 获取用户信息 export const useTenantInfo = () => useTenantStore((state) => state.tenantInfo); // 租户数据是否加载完成 export const useTenantLoad = () => useTenantStore((state) => !!state.tenantInfo?.tid || !!state.tenantInfo?.create_time); // 获取租户信息 export const requestTenantInfo = async (): Promise => { try { // 使用 getState() 而不是 hook const { setTenantInfo } = useTenantStore.getState(); const params = { domain_addr: 'https://51zhh5.notbug.org', }; const { data } = await tenantService.getPlatformData(params); setTenantInfo(data); if (__DEV__) { console.log('✅ Tenant info loaded:', data); } return Promise.resolve(data); } catch (error) { console.error('Failed to request tenant info:', error); return Promise.reject(error); } }; export default useTenantStore;