import { saveRisSingle } from '@/API/patient/risActions'; import { Modal } from 'antd'; import store from '@/states/store'; import { setPage, setPageSize } from '@/states/patient/worklist/slices/searchSlice'; import { fetchWorkThunk } from '@/states/patient/worklist/slices/workSlice'; import { WorkFilter } from '@/states/patient/worklist/types/workfilter'; import mapToTask from './mapToTask'; import { Task } from '../work'; /** * RIS数据保存成功弹框 */ const showSaveSuccessModal = (count: number, onSuccess?: () => void) => { Modal.success({ title: '🎉 保存成功', content: `成功保存 ${count} 条RIS数据到本地\n\n系统将自动刷新列表显示最新数据`, okText: '确定', centered: true, afterClose: () => { // 弹框自动消失后执行列表刷新 triggerSearch(); // 执行成功回调(如果提供) if (onSuccess) { onSuccess(); } } }); }; /** * 触发搜索刷新列表(复用SearchPanel的逻辑) */ const triggerSearch = () => { const dispatch = store.dispatch; const searchState = store.getState().search; // 重置分页 dispatch(setPage(1)); dispatch(setPageSize(10)); // 构建过滤条件 const filters: WorkFilter = { patient_id: searchState.id, patient_name: searchState.name, access_number: searchState.acc_no, start_time: searchState.start_time, end_time: searchState.end_time, status: 'Arrived,InProgress', }; // 调用搜索 dispatch(fetchWorkThunk({ page: 1, pageSize: 10, filters })); }; /** * 保存单个RIS数据到本地 * @param entryId RIS条目ID * @param onSuccess 可选的成功回调函数,接收保存的task信息 */ export const saveRisData = async (entryId: string, onSuccess?: (task: Task) => void) => { try { console.log('RIS双击保存本地参数:', entryId); // 调用RIS单个保存API(传递entryId和空views数组) const response = await saveRisSingle({ entry_id: entryId, views: [] // 保存时不指定体位,后面可以追加 }); console.log('RIS双击保存本地成功,Study ID:', response.data.study_id); // 显示成功弹框(暂逝后自动刷新) showSaveSuccessModal(1, () => { // 执行成功回调,传递task信息 if (onSuccess) { onSuccess(mapToTask(response.data)); } }); } catch (error) { console.error('RIS双击保存本地失败:', error); const errorMessage = error instanceof Error ? error.message : '保存过程中发生未知错误'; Modal.error({ title: '❌ 保存失败', content: `${errorMessage}\n\n请检查网络连接或联系技术支持`, okText: '确定', centered: true }); } };