import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
|
import * as insuranceClaimServices from '@/services/api/InsuranceClaim';
|
import { useQuery, useQueryClient } from '@tanstack/vue-query';
|
import { InsuranceClaimAttachmentBusinessTypeEnum, InsuranceClaimResultEnum } from '@/constants';
|
import { convertAttAchmentsToForm } from '../utils';
|
import { UploadUserFile } from '@bole-core/components';
|
import dayjs from 'dayjs';
|
|
type UseInsuranceClaimDetailOptions = {
|
insuranceOrderId?: MaybeRef<string>;
|
fromRoute?: MaybeRef<string>;
|
};
|
|
export function useInsuranceClaimDetail({
|
insuranceOrderId,
|
fromRoute,
|
}: UseInsuranceClaimDetailOptions) {
|
const DefaultAccidentProcess = `事故经过:
|
治疗医院:二级及以上公立医院
|
诊断结果(与诊断证明一致)
|
预估费用:`;
|
|
const DefaultForm = {
|
name: '',
|
idNumber: '',
|
workType: '',
|
orderNo: '',
|
laborContractEnterprise: '',
|
workEnterprise: '',
|
enterpriseName: '',
|
insuranceBeginTime: '',
|
insuranceEndTime: '',
|
insuranceOrg: '',
|
insuranceScheme: '',
|
contactNumber: '',
|
bakContactNumber: '',
|
accidentType: '',
|
disabilityRatio: 0,
|
accidentAddress: '',
|
accidentProcess: DefaultAccidentProcess,
|
attachmentFrontIdCards: [] as UploadUserFile[],
|
attachmentBackIdCards: [] as UploadUserFile[],
|
attachmentSites: [] as UploadUserFile[],
|
attachmentHandheldIdCards: [] as UploadUserFile[],
|
attachmentAreas: [] as UploadUserFile[],
|
attachmentCases: [] as UploadUserFile[],
|
|
channel: '',
|
onJobFlag: '',
|
gender: '',
|
age: 0,
|
premiumAmount: 0,
|
incDecAmount: 0,
|
|
claimResult: '' as any as InsuranceClaimResultEnum,
|
claimResultTime: '',
|
downPaymentAmount: 0,
|
};
|
|
const form = reactive({
|
insuranceOrderId: unref(insuranceOrderId),
|
fromRoute: unref(fromRoute),
|
reportedTime: '',
|
accidentTime: '',
|
...DefaultForm,
|
});
|
|
function resetForm() {
|
Object.assign(form, { ...DefaultForm });
|
}
|
|
const queryClient = useQueryClient();
|
|
const _insuranceOrderId = computed(() => form.insuranceOrderId);
|
|
const { isLoading: isClaimLoading, data: claimDetail } = useQuery({
|
queryKey: ['insuranceClaimServices/getInsuranceClaimDetailByOrderId', _insuranceOrderId],
|
queryFn: async () => {
|
return await insuranceClaimServices.getInsuranceClaimDetailByOrderId(
|
{
|
orderId: form.insuranceOrderId,
|
},
|
{
|
showLoading: false,
|
}
|
);
|
},
|
// placeholderData: () => null as API.InsuranceClaimDetailOutput,
|
onSuccess(data) {
|
// if (data) {
|
// form.name = data.name;
|
// form.idNumber = data.idNumber;
|
// form.insuredInstitution = data.insuredInstitution;
|
// form.insuranceScheme = data.insuranceScheme;
|
// form.reportedTime = dayjs(data.reportedTime).format('YYYY-MM-DD HH:mm:ss');
|
// form.contactNumber = data.contactNumber;
|
// form.bakContactNumber = data.bakContactNumber;
|
// form.accidentType = data.accidentType;
|
// form.accidentTime = data.accidentTime;
|
// form.disabilityRatio = data.disabilityRatio ?? 0;
|
// form.accidentAddress = data.accidentAddress;
|
// form.accidentProcess = data.accidentProcess ?? DefaultAccidentProcess;
|
// form.insuranceBeginTime = data.insuranceBeginTime;
|
// form.insuranceEndTime = data.insuranceEndTime;
|
// form.laborContractEnterprise = data.laborContractEnterprise;
|
// form.workEnterprise = data.workEnterprise;
|
// form.workType = data.workType;
|
// form.channel = data.channel;
|
// form.onJobFlag = data.onJobFlag;
|
// form.gender = data.gender;
|
// form.age = data.age;
|
// form.premiumAmount = data.premiumAmount;
|
// form.incDecAmount = data.incDecAmount;
|
// form.claimResult = data.claimResult ?? ('' as any as InsuranceClaimResultEnum);
|
// form.claimResultTime = data.claimResultTime ?? '';
|
// form.downPaymentAmount = data.downPaymentAmount ?? 0;
|
// const attachmentIdCard = convertAttAchmentsToForm(
|
// data.attachments,
|
// InsuranceClaimAttachmentBusinessTypeEnum.InjuredIdCardImg
|
// );
|
// form.attachmentFrontIdCards = attachmentIdCard[0] ? [attachmentIdCard[0]] : [];
|
// form.attachmentBackIdCards = attachmentIdCard[1] ? [attachmentIdCard[1]] : [];
|
// form.attachmentSites = convertAttAchmentsToForm(
|
// data.attachments,
|
// InsuranceClaimAttachmentBusinessTypeEnum.InjurySiteImg
|
// );
|
// form.attachmentHandheldIdCards = convertAttAchmentsToForm(
|
// data.attachments,
|
// InsuranceClaimAttachmentBusinessTypeEnum.InjuredHandheldIdCardImg
|
// );
|
// form.attachmentAreas = convertAttAchmentsToForm(
|
// data.attachments,
|
// InsuranceClaimAttachmentBusinessTypeEnum.InjuredAreaImg
|
// );
|
// form.attachmentCases = convertAttAchmentsToForm(
|
// data.attachments,
|
// InsuranceClaimAttachmentBusinessTypeEnum.CasesImg
|
// );
|
// }
|
},
|
enabled: computed(() => !!form.insuranceOrderId),
|
});
|
|
const isClaimDetailEdit = computed(() => !!claimDetail.value);
|
|
function queryClaimDetailByOrderId() {
|
return queryClient.fetchQuery({
|
queryKey: ['insuranceClaimServices/getInsuranceClaimDetailByOrderId', _insuranceOrderId],
|
queryFn: async () => {
|
return await insuranceClaimServices.getInsuranceClaimDetailByOrderId(
|
{
|
orderId: form.insuranceOrderId,
|
},
|
{
|
showLoading: false,
|
}
|
);
|
},
|
});
|
}
|
|
const { isLoading: isClaimDetailLoading } = useQuery({
|
queryKey: ['insuranceClaimServices/getInsuranceClaimDetail', _insuranceOrderId],
|
queryFn: async () => {
|
return await insuranceClaimServices.getInsuranceClaimDetail(
|
{ id: form.insuranceOrderId },
|
{
|
showLoading: false,
|
}
|
);
|
},
|
placeholderData: () => ({} as API.InsuranceClaimDetailOutput),
|
onSuccess(data) {
|
if (data) {
|
form.name = data.name;
|
form.idNumber = data.idNumber;
|
// form.insuredInstitution = data.insuredInstitution;
|
form.insuranceScheme = data.insuranceScheme;
|
form.reportedTime = data.reportedTime;
|
form.contactNumber = data.contactNumber;
|
form.bakContactNumber = data.bakContactNumber;
|
form.accidentType = data.accidentType;
|
form.accidentTime = data.accidentTime;
|
form.disabilityRatio = data.disabilityRatio ?? 0;
|
form.accidentAddress = data.accidentAddress;
|
form.accidentProcess = data.accidentProcess ?? DefaultAccidentProcess;
|
|
form.insuranceBeginTime = data.insuranceBeginTime;
|
form.insuranceEndTime = data.insuranceEndTime;
|
form.laborContractEnterprise = data.laborContractEnterprise;
|
form.workEnterprise = data.workEnterprise;
|
form.workType = data.workType;
|
|
form.channel = data.channel;
|
form.onJobFlag = data.onJobFlag;
|
form.gender = data.gender;
|
form.age = data.age;
|
form.premiumAmount = data.premiumAmount;
|
form.incDecAmount = data.incDecAmount;
|
|
form.claimResult = data.claimResult ?? ('' as any as InsuranceClaimResultEnum);
|
form.claimResultTime = data.claimResultTime ?? '';
|
form.downPaymentAmount = data.downPaymentAmount ?? 0;
|
|
const attachmentIdCard = convertAttAchmentsToForm(
|
data.attachments,
|
InsuranceClaimAttachmentBusinessTypeEnum.InjuredIdCardImg
|
);
|
form.attachmentFrontIdCards = attachmentIdCard[0] ? [attachmentIdCard[0]] : [];
|
form.attachmentBackIdCards = attachmentIdCard[1] ? [attachmentIdCard[1]] : [];
|
form.attachmentSites = convertAttAchmentsToForm(
|
data.attachments,
|
InsuranceClaimAttachmentBusinessTypeEnum.InjurySiteImg
|
);
|
form.attachmentHandheldIdCards = convertAttAchmentsToForm(
|
data.attachments,
|
InsuranceClaimAttachmentBusinessTypeEnum.InjuredHandheldIdCardImg
|
);
|
form.attachmentAreas = convertAttAchmentsToForm(
|
data.attachments,
|
InsuranceClaimAttachmentBusinessTypeEnum.InjuredAreaImg
|
);
|
form.attachmentCases = convertAttAchmentsToForm(
|
data.attachments,
|
InsuranceClaimAttachmentBusinessTypeEnum.CasesImg
|
);
|
}
|
},
|
enabled: computed(() => !!form.insuranceOrderId && form.fromRoute === 'InsuranceOrderDetail'),
|
});
|
|
const { isLoading } = useQuery({
|
queryKey: ['insuranceOrderServices/getInsuranceOrderDetail', _insuranceOrderId],
|
queryFn: async () => {
|
return await insuranceOrderServices.getInsuranceOrderDetail(
|
{ id: form.insuranceOrderId },
|
{
|
showLoading: false,
|
}
|
);
|
},
|
placeholderData: () => ({} as API.InsuranceOrderListOutput),
|
onSuccess(data) {
|
importInsuranceOrderData(data);
|
},
|
enabled: computed(() => !!form.insuranceOrderId && form.fromRoute !== 'InsuranceOrderDetail'),
|
});
|
|
function importInsuranceOrderData(data: API.InsuranceOrderListOutput) {
|
form.name = data.name;
|
form.idNumber = data.idNumber;
|
form.insuranceBeginTime = data.insuranceBeginTime;
|
form.insuranceEndTime = data.insuranceEndTime;
|
form.insuranceOrg = data.insuranceOrg;
|
form.insuranceScheme = data.insuranceScheme;
|
form.laborContractEnterprise = data.laborContractEnterprise;
|
form.enterpriseName = data.enterpriseName;
|
form.workEnterprise = data.workEnterprise;
|
form.workType = data.workType;
|
form.channel = data.channel;
|
form.onJobFlag = data.onJobFlag;
|
form.gender = data.gender;
|
form.age = data.age;
|
form.orderNo = data.orderNo;
|
form.premiumAmount = data.premiumAmount;
|
form.incDecAmount = data.incDecAmount;
|
}
|
|
function disabledReportedDate(time: Date) {
|
return !dayjs(time).isBefore(dayjs());
|
}
|
|
function disabledReportedDate2(time: Date) {
|
if (!form.insuranceBeginTime || !form.insuranceEndTime) {
|
return !dayjs(time).isBefore(dayjs());
|
}
|
return (
|
dayjs(time).isBefore(dayjs(form.insuranceBeginTime)) ||
|
dayjs(time).isAfter(dayjs(form.insuranceEndTime))
|
);
|
}
|
|
return {
|
form,
|
isClaimLoading,
|
claimDetail,
|
isLoading,
|
isClaimDetailEdit,
|
importInsuranceOrderData,
|
disabledReportedDate,
|
queryClaimDetailByOrderId,
|
resetForm,
|
};
|
}
|
|
type UseInsuranceOrderListByOrderRelevanceOptions = {
|
params: MaybeRef<API.QueryInsuranceOrderListByOrderRelevanceInput>;
|
onSuccess?: (data: API.InsuranceOrderListOutput[]) => void;
|
};
|
|
export function useInsuranceOrderListByOrderRelevance({
|
params,
|
onSuccess,
|
}: UseInsuranceOrderListByOrderRelevanceOptions) {
|
const { data: existedInsuranceOrderList } = useQuery({
|
queryKey: ['insuranceOrderServices/getInsuranceOrderListByOrderRelevance', params],
|
queryFn: async () => {
|
return await insuranceOrderServices.getInsuranceOrderListByOrderRelevance(unref(params), {
|
showLoading: false,
|
});
|
},
|
placeholderData: () => [] as API.InsuranceOrderListOutput[],
|
enabled: computed(() => {
|
const _params = unref(params);
|
return !!_params.idIdNumber && !!_params.reportedTime;
|
}),
|
onSuccess(data) {
|
onSuccess?.(data);
|
},
|
});
|
|
return { existedInsuranceOrderList };
|
}
|