|
@@ -0,0 +1,87 @@
|
|
|
+import { useSelector } from 'react-redux';
|
|
|
+import { RootState } from '@/states/store';
|
|
|
+import {
|
|
|
+ registerWork,
|
|
|
+ RegisterWorkResponseData,
|
|
|
+ RegisterInfo,
|
|
|
+} from '@/API/patient/workActions';
|
|
|
+import { message } from 'antd';
|
|
|
+import registerformSchema from '@/validation/patient/registerSchema';
|
|
|
+import dayjs from 'dayjs';
|
|
|
+import utc from 'dayjs/plugin/utc';
|
|
|
+import { View } from '@/API/patient/viewActions';
|
|
|
+dayjs.extend(utc);
|
|
|
+
|
|
|
+const useRegisterLogic = () => {
|
|
|
+ const formData = useSelector((state: RootState) => state.form.formData);
|
|
|
+ const selectedViews = useSelector(
|
|
|
+ (state: RootState) => state.viewSelection.selectedViews
|
|
|
+ );
|
|
|
+ const currentPatientType = useSelector(
|
|
|
+ (state: RootState) => state.patientType.current
|
|
|
+ );
|
|
|
+
|
|
|
+ const handleRegister = async (): Promise<{
|
|
|
+ success: boolean;
|
|
|
+ data?: RegisterWorkResponseData;
|
|
|
+ views?: View[];
|
|
|
+ }> => {
|
|
|
+ try {
|
|
|
+ let values = formData;
|
|
|
+ const formatDob = values.patient_dob
|
|
|
+ ? dayjs.utc(values.patient_dob).format('YYYY-MM-DDTHH:mm:ss.SSS[Z]')
|
|
|
+ : '';
|
|
|
+ values = { ...values, patient_dob: formatDob };
|
|
|
+
|
|
|
+ const validateResult = registerformSchema.safeParse(values);
|
|
|
+ if (!validateResult.success) {
|
|
|
+ message.error(`必填项未填写或者不合规则`);
|
|
|
+ return { success: false, views: [] };
|
|
|
+ }
|
|
|
+
|
|
|
+ const registerInfo: RegisterInfo = {
|
|
|
+ ...values,
|
|
|
+ patient_type: currentPatientType?.patient_type_id ?? '',
|
|
|
+ modality: 'DX',
|
|
|
+ study_type: 'Normal',
|
|
|
+ patient_age: `${values.patient_age.number}${values.patient_age.unit}`,
|
|
|
+ views: selectedViews.map((view) => ({
|
|
|
+ view_id: view.view_id,
|
|
|
+ procedure_id: view.procedure_id || '',
|
|
|
+ })),
|
|
|
+ accession_number: values.accession_number,
|
|
|
+ patient_id: values.patient_id,
|
|
|
+ patient_name: values.patient_name,
|
|
|
+ patient_size: values.patient_size,
|
|
|
+ patient_dob: values.patient_dob,
|
|
|
+ patient_sex: values.patient_sex,
|
|
|
+ pregnancy_status: values.pregnancy_status,
|
|
|
+ ref_physician: values.ref_physician,
|
|
|
+ operator_id: values.operator_id,
|
|
|
+ weight: values.weight,
|
|
|
+ thickness: values.thickness,
|
|
|
+ length: values.length,
|
|
|
+ comment: values.comment,
|
|
|
+ };
|
|
|
+
|
|
|
+ const response = await registerWork(registerInfo);
|
|
|
+ if (response.code !== '0x000000') {
|
|
|
+ message.error(`注册失败: ${response.description}`);
|
|
|
+ return { success: false, views: [] };
|
|
|
+ }
|
|
|
+
|
|
|
+ message.info('Work registered successfully');
|
|
|
+ return { success: true, data: response.data, views: selectedViews };
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error registering work:', error);
|
|
|
+ message.error(
|
|
|
+ 'Error registering work, please check the console for details.'
|
|
|
+ );
|
|
|
+ return { success: false, views: [] };
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ return { handleRegister };
|
|
|
+};
|
|
|
+
|
|
|
+export default useRegisterLogic;
|