Files
CA/frontend/src/stores/diseaseStore.ts

39 lines
1.1 KiB
TypeScript
Raw Normal View History

import { create } from 'zustand';
import { caseApi } from '@/services/api';
interface DiseaseState {
availableDiagnoses: string[];
selectedDiagnoses: string[];
isLoading: boolean;
error: string | null;
fetchDiagnoses: () => Promise<void>;
setSelectedDiagnoses: (diagnoses: string[]) => void;
clearDiagnoses: () => void;
clearError: () => void;
}
export const useDiseaseStore = create<DiseaseState>((set, get) => ({
availableDiagnoses: [],
selectedDiagnoses: [],
isLoading: false,
error: null,
clearError: () => set({ error: null }),
fetchDiagnoses: async () => {
const { availableDiagnoses } = get();
if (availableDiagnoses.length > 0) return; // already loaded
set({ isLoading: true, error: null });
try {
const data = await caseApi.getDiagnoses();
set({ availableDiagnoses: data.diagnoses || [], isLoading: false });
} catch (e) {
set({ error: (e as Error).message || '加载诊断列表失败', isLoading: false });
}
},
setSelectedDiagnoses: (diagnoses) => set({ selectedDiagnoses: diagnoses }),
clearDiagnoses: () => set({ selectedDiagnoses: [] }),
}));