risSaveLogic.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { saveRisSingle } from '@/API/patient/risActions';
  2. import { Modal } from 'antd';
  3. import store from '@/states/store';
  4. import { setPage, setPageSize } from '@/states/patient/worklist/slices/searchSlice';
  5. import { fetchWorkThunk } from '@/states/patient/worklist/slices/workSlice';
  6. import { WorkFilter } from '@/states/patient/worklist/types/workfilter';
  7. import mapToTask from './mapToTask';
  8. import { Task } from '../work';
  9. /**
  10. * RIS数据保存成功弹框
  11. */
  12. const showSaveSuccessModal = (count: number, onSuccess?: () => void) => {
  13. Modal.success({
  14. title: '🎉 保存成功',
  15. content: `成功保存 ${count} 条RIS数据到本地\n\n系统将自动刷新列表显示最新数据`,
  16. okText: '确定',
  17. centered: true,
  18. afterClose: () => {
  19. // 弹框自动消失后执行列表刷新
  20. triggerSearch();
  21. // 执行成功回调(如果提供)
  22. if (onSuccess) {
  23. onSuccess();
  24. }
  25. }
  26. });
  27. };
  28. /**
  29. * 触发搜索刷新列表(复用SearchPanel的逻辑)
  30. */
  31. const triggerSearch = () => {
  32. const dispatch = store.dispatch;
  33. const searchState = store.getState().search;
  34. // 重置分页
  35. dispatch(setPage(1));
  36. dispatch(setPageSize(10));
  37. // 构建过滤条件
  38. const filters: WorkFilter = {
  39. patient_id: searchState.id,
  40. patient_name: searchState.name,
  41. access_number: searchState.acc_no,
  42. start_time: searchState.start_time,
  43. end_time: searchState.end_time,
  44. status: 'Arrived,InProgress',
  45. };
  46. // 调用搜索
  47. dispatch(fetchWorkThunk({ page: 1, pageSize: 10, filters }));
  48. };
  49. /**
  50. * 保存单个RIS数据到本地
  51. * @param entryId RIS条目ID
  52. * @param onSuccess 可选的成功回调函数,接收保存的task信息
  53. */
  54. export const saveRisData = async (entryId: string, onSuccess?: (task: Task) => void) => {
  55. try {
  56. console.log('RIS双击保存本地参数:', entryId);
  57. // 调用RIS单个保存API(传递entryId和空views数组)
  58. const response = await saveRisSingle({
  59. entry_id: entryId,
  60. views: [] // 保存时不指定体位,后面可以追加
  61. });
  62. console.log('RIS双击保存本地成功,Study ID:', response.data.study_id);
  63. // 显示成功弹框(暂逝后自动刷新)
  64. showSaveSuccessModal(1, () => {
  65. // 执行成功回调,传递task信息
  66. if (onSuccess) {
  67. onSuccess(mapToTask(response.data));
  68. }
  69. });
  70. } catch (error) {
  71. console.error('RIS双击保存本地失败:', error);
  72. const errorMessage = error instanceof Error ? error.message : '保存过程中发生未知错误';
  73. Modal.error({
  74. title: '❌ 保存失败',
  75. content: `${errorMessage}\n\n请检查网络连接或联系技术支持`,
  76. okText: '确定',
  77. centered: true
  78. });
  79. }
  80. };