|
@@ -1,83 +1,97 @@
|
|
|
+import { message } from 'antd';
|
|
|
+import dayjs from 'dayjs';
|
|
|
+import utc from 'dayjs/plugin/utc';
|
|
|
import {
|
|
|
+ RegisterInfo,
|
|
|
registerWork,
|
|
|
+ RegisterWorkResponse,
|
|
|
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 { omitAnimalSchemaMap } from '@/domain/animalSpecificInfo';
|
|
|
+import { omitHumanSchemaMap } from '@/domain/humanSpecificInfo';
|
|
|
+import { RootState } from '@/states/store';
|
|
|
import { View } from '@/API/patient/viewActions';
|
|
|
-import store from '@/states/store';
|
|
|
+
|
|
|
dayjs.extend(utc);
|
|
|
|
|
|
-const useRegisterLogic = () => {
|
|
|
- const rootState=store.getState();
|
|
|
- const formData = rootState.form.formData;
|
|
|
- const selectedViews = rootState.viewSelection.selectedViews;
|
|
|
- const currentPatientType = rootState.patientType.current;
|
|
|
+export interface RegisterLogicResult {
|
|
|
+ success: boolean;
|
|
|
+ data?: RegisterWorkResponseData;
|
|
|
+ views?: View[];
|
|
|
+ errorMessage?: string;
|
|
|
+}
|
|
|
|
|
|
- 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 };
|
|
|
+export async function executeRegisterLogic(store: {
|
|
|
+ getState: () => RootState;
|
|
|
+}): Promise<RegisterLogicResult> {
|
|
|
+ try {
|
|
|
+ const state = store.getState() as RootState;
|
|
|
|
|
|
- const validateResult = registerformSchema.safeParse(values);
|
|
|
- if (!validateResult.success) {
|
|
|
- message.error(`必填项未填写或者不合规则`);
|
|
|
- return { success: false, views: [] };
|
|
|
- }
|
|
|
+ // 从Redux获取数据
|
|
|
+ let values = state.form.formData;
|
|
|
+ const selectedViews = state.viewSelection.selectedViews;
|
|
|
+ const currentPatientType = state.viewSelection.currentPatientType;
|
|
|
+ const productName = state.product.productName;
|
|
|
+
|
|
|
+ console.log(`从Redux获取的表单数据:${JSON.stringify(values, null, 2)}`);
|
|
|
+ console.log(`选中的视图:${JSON.stringify(selectedViews, null, 2)}`);
|
|
|
+
|
|
|
+ // 转换年龄和日期格式 - 与原代码相同的逻辑
|
|
|
+ const formatDob = values.patient_dob
|
|
|
+ ? dayjs.utc(values.patient_dob).format('YYYY-MM-DDTHH:mm:ss.SSS[Z]')
|
|
|
+ : '';
|
|
|
+ console.log(`转换后的日期:${formatDob}`);
|
|
|
+
|
|
|
+ values = { ...values, patient_dob: formatDob };
|
|
|
+
|
|
|
+ // 验证数据 - 与原代码相同的逻辑
|
|
|
+ let validateResult;
|
|
|
+ if (productName === 'VETDROS') {
|
|
|
+ const animalSchema = registerformSchema.omit(omitHumanSchemaMap);
|
|
|
+ validateResult = animalSchema.safeParse(values);
|
|
|
+ } else {
|
|
|
+ const humanSchema = registerformSchema.omit(omitAnimalSchemaMap);
|
|
|
+ validateResult = humanSchema.safeParse(values);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!validateResult.success) {
|
|
|
+ message.error('必填项未填写或者不合规则');
|
|
|
+ console.log(JSON.stringify(validateResult.error, null, 2));
|
|
|
+ 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 registerInfo: RegisterInfo = {
|
|
|
+ ...values,
|
|
|
+ patient_type: currentPatientType?.patient_type_id ?? '',
|
|
|
+ modality: 'DX',
|
|
|
+ study_type: 'Normal' as const,
|
|
|
+ patient_age: `${values.patient_age.number.toString().padStart(3, '0')}${values.patient_age.unit}`,
|
|
|
+ views: selectedViews.map((view) => ({
|
|
|
+ view_id: view.view_id,
|
|
|
+ procedure_id: view.procedure_id ?? '',
|
|
|
+ })),
|
|
|
+ } as RegisterInfo;
|
|
|
|
|
|
- const response = await registerWork(registerInfo);
|
|
|
- if (response.code !== '0x000000') {
|
|
|
- message.error(`注册失败: ${response.description}`);
|
|
|
- return { success: false, views: [] };
|
|
|
- }
|
|
|
+ console.log(`注册信息:${JSON.stringify(registerInfo, null, 2)}`);
|
|
|
|
|
|
- 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.'
|
|
|
- );
|
|
|
+ // 调用注册API
|
|
|
+ const response: RegisterWorkResponse = await registerWork(registerInfo);
|
|
|
+ if (response.code !== '0x000000') {
|
|
|
+ message.error(`注册失败: ${response.description}`);
|
|
|
return { success: false, views: [] };
|
|
|
}
|
|
|
- };
|
|
|
|
|
|
- return { handleRegister };
|
|
|
-};
|
|
|
+ console.log('Work registered successfully:', response);
|
|
|
+ message.info('Work registered successfully');
|
|
|
|
|
|
-export default useRegisterLogic;
|
|
|
+ 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: [] };
|
|
|
+ }
|
|
|
+}
|