39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
|
|
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: [] }),
|
||
|
|
}));
|