import { create } from 'zustand'; import Taro from '@tarojs/taro'; import * as healthApi from '@/services/health'; interface CachedTrend { data: { date: string; value: number }[]; cachedAt: number; } interface HealthState { todaySummary: healthApi.TodaySummary | null; trendData: Record; loading: boolean; refreshToday: () => Promise; getTrend: (indicator: string, range: string) => Promise<{ date: string; value: number }[]>; clearCache: () => void; } const CACHE_TTL = 5 * 60 * 1000; // 5 分钟 export const useHealthStore = create((set, get) => ({ todaySummary: null, trendData: {}, loading: false, refreshToday: async () => { set({ loading: true }); try { const patientId = Taro.getStorageSync('current_patient_id') || undefined; const data = await healthApi.getTodaySummary(patientId); set({ todaySummary: data, loading: false }); } catch { set({ loading: false }); } }, getTrend: async (indicator: string, range: string) => { const cacheKey = `${indicator}_${range}`; const cached = get().trendData[cacheKey]; if (cached && Date.now() - cached.cachedAt < CACHE_TTL) { return cached.data; } try { const resp = await healthApi.getTrend(indicator, range); const points = resp.data_points || []; set((s) => ({ trendData: { ...s.trendData, [cacheKey]: { data: points, cachedAt: Date.now() } } })); return points; } catch { return []; } }, clearCache: () => set({ trendData: {}, todaySummary: null }), }));