From b697737f281023871227b26b6c9d6c309cd3e899 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期一, 31 三月 2025 14:23:19 +0800 Subject: [PATCH] feat: 接口对接 --- src/views/Home/InsuranceOrderDetail.vue | 2 src/services/api/InsuranceClaim.ts | 26 ++++++ src/services/api/typings.d.ts | 12 +++ src/views/Home/components/InsureOrderInfoView.vue | 72 +++++++++++------ src/views/InsuranceClaim/hooks/index.ts | 79 +++++++++++++++++++ src/views/InsuranceClaim/components/InsuranceClaimView.vue | 5 + src/views/Home/components/InsureClaimDetailDialog.vue | 40 +++++++--- 7 files changed, 195 insertions(+), 41 deletions(-) diff --git a/src/services/api/InsuranceClaim.ts b/src/services/api/InsuranceClaim.ts index 889fe08..4e87b3b 100644 --- a/src/services/api/InsuranceClaim.ts +++ b/src/services/api/InsuranceClaim.ts @@ -55,6 +55,14 @@ }); } +/** 鑾峰彇鐢ㄦ埛鍏徃鍚嶇О鍒楄〃 GET /api/InsuranceClaim/GetInsuranceClaimCompanyList */ +export async function getInsuranceClaimCompanyList(options?: API.RequestConfig) { + return request<string[]>('/api/InsuranceClaim/GetInsuranceClaimCompanyList', { + method: 'GET', + ...(options || {}), + }); +} + /** 鑾峰彇淇濋櫓鐞嗚禂缁熻鏁伴噺 POST /api/InsuranceClaim/GetInsuranceClaimCount */ export async function getInsuranceClaimCount( body: API.QueryInsuranceClaimCountInput, @@ -103,6 +111,24 @@ ); } +/** 鑾峰彇浜哄憳鐞嗚禂鍒楄〃 GET /api/InsuranceClaim/GetInsuranceClaimDetailList */ +export async function getInsuranceClaimDetailList( + // 鍙犲姞鐢熸垚鐨凱aram绫诲瀷 (闈瀊ody鍙傛暟swagger榛樿娌℃湁鐢熸垚瀵硅薄) + params: API.APIgetInsuranceClaimDetailListParams, + options?: API.RequestConfig +) { + return request<API.InsuranceClaimDetailOutput[]>( + '/api/InsuranceClaim/GetInsuranceClaimDetailList', + { + method: 'GET', + params: { + ...params, + }, + ...(options || {}), + } + ); +} + /** 鑾峰彇淇濋櫓鐞嗚禂鍒嗛〉鍒楄〃 POST /api/InsuranceClaim/GetInsuranceClaimPage */ export async function getInsuranceClaimPage( body: API.QueryInsuranceClaimPageInput, diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts index 8166216..16cfb6c 100644 --- a/src/services/api/typings.d.ts +++ b/src/services/api/typings.d.ts @@ -240,6 +240,10 @@ orderId?: string; } + interface APIgetInsuranceClaimDetailListParams { + id?: string; + } + interface APIgetInsuranceClaimDetailParams { id?: string; } @@ -832,6 +836,7 @@ age?: number; birthDay?: string; phone?: string; + claimCount?: number; creationTime?: string; } @@ -1178,6 +1183,8 @@ disabilityRatio?: number; /** 鐞嗚禂娓犻亾 */ claimChannel?: string; + /** 鐞嗚禂娓犻亾 */ + companyName?: string; claimResult?: InsuranceClaimResultEnum; claimResultStr?: string; /** 涓嬫閲戦 */ @@ -1615,18 +1622,23 @@ month?: number; /** 鐞嗚禂娓犻亾 */ claimChannel?: string; + companyName?: string; } interface QueryInsuranceClaimPageInput { pageModel?: Pagination; /** 鐞嗚禂娓犻亾 */ claimChannel?: string; + /** 鍏徃鍚嶇О */ + companyName?: string; /** 鍔冲姩鍚堝悓鍗曚綅 */ laborContractEnterprise?: string; /** 瀹為檯宸ヤ綔鍗曚綅 */ workEnterprise?: string; /** 韬唤璇佸彿 */ idNumber?: string; + /** 鎶曚繚浜�/琚繚浜� */ + insurerName?: string; claimResult?: InsuranceClaimResultEnum; } diff --git a/src/views/Home/InsuranceOrderDetail.vue b/src/views/Home/InsuranceOrderDetail.vue index b8e2b1a..e737942 100644 --- a/src/views/Home/InsuranceOrderDetail.vue +++ b/src/views/Home/InsuranceOrderDetail.vue @@ -6,7 +6,7 @@ <InsureOrderInfoView /> </ProTabPane> <ProTabPane - v-if="detail.status !== InsurancePolicyStatusEnum.WaitEffect" + v-if="detail?.status !== InsurancePolicyStatusEnum.WaitEffect" lazy label="鎵规敼璁板綍" :name="InsureOrderTabType.BatchOrder" diff --git a/src/views/Home/components/InsureClaimDetailDialog.vue b/src/views/Home/components/InsureClaimDetailDialog.vue index efa7ceb..ba227dd 100644 --- a/src/views/Home/components/InsureClaimDetailDialog.vue +++ b/src/views/Home/components/InsureClaimDetailDialog.vue @@ -6,9 +6,20 @@ :columns="column" :operation-btns="operationBtns" > - <template #changeType="{ row }"> {{ BatchChangeTypeEnumText[row.changeType] }}</template> + <template #claimResult="{ row }"> + {{ InsuranceClaimResultEnumText[row.claimResult] }} + </template> + <template #reportedTime="{ row }"> + {{ dayjs(row.reportedTime).format('YYYY-MM-DD') }} + </template> </ProTableV2> </ProDialogTableWrapper> + <template #footer> + <span class="dialog-footer"> + <el-button @click="emit('onCancel')">鍙� 娑�</el-button> + <el-button type="primary" @click="emit('onCancel')">纭� 瀹�</el-button> + </span> + </template> </ProDialog> </template> @@ -20,9 +31,9 @@ useTable, defineOperationBtns, } from '@bole-core/components'; -import { OrderInputType } from '@bole-core/core'; import { paginateList } from '@/utils'; -import { BatchChangeTypeEnumText } from '@/constants'; +import { InsuranceClaimResultEnumText } from '@/constants'; +import dayjs from 'dayjs'; defineOptions({ name: 'InsureClaimDetailDialog', @@ -32,7 +43,8 @@ modelValue: boolean; form?: { id: string; - staffList: API.InsureBatchBillDetailDto[]; + routeId: string; + staffList: API.InsuranceClaimDetailOutput[]; }; }; @@ -58,22 +70,22 @@ }, { id: '3', - enCode: 'idNumber', + enCode: 'reportedTime', name: '鎶ユ鏃堕棿', }, { id: '4', - enCode: 'idNumber', + enCode: 'contactNumber', name: '鑱旂郴鐢佃瘽', }, { id: '5', - enCode: 'idNumber', + enCode: 'accidentType', name: '浜嬫晠绫诲瀷', }, { id: '6', - enCode: 'idNumber', + enCode: 'claimResult', name: '鐞嗚禂缁撴灉', }, ]; @@ -120,7 +132,7 @@ extraParamState, reset, } = useTable( - async ({ pageIndex, pageSize }, extraParamState) => { + async ({ pageIndex, pageSize }) => { try { return Promise.resolve({ pageModel: { @@ -133,9 +145,11 @@ } catch (error) {} }, { - defaultExtraParams: { - keyWord: '', - orderInput: [{ property: 'id', order: OrderInputType.Asc }], + columnsRenderProps: { + reportedTime: { + type: 'date', + format: 'YYYY-MM-DD', + }, }, } ); @@ -148,6 +162,8 @@ }, query: { fromRoute: 'InsuranceOrderDetail', + insuranceClaimId: row.id, + routeId: props.form.routeId, }, }); } diff --git a/src/views/Home/components/InsureOrderInfoView.vue b/src/views/Home/components/InsureOrderInfoView.vue index 3ce3581..6e8a5db 100644 --- a/src/views/Home/components/InsureOrderInfoView.vue +++ b/src/views/Home/components/InsureOrderInfoView.vue @@ -144,6 +144,7 @@ useFormDialog, BlFileUpload, UploadUserFile, + XLSXUtils, } from '@bole-core/components'; import { InsuranceOrderTempPath, @@ -154,6 +155,7 @@ import ChangePersonInfoDialog from './ChangePersonInfoDialog.vue'; import InsureClaimDetailDialog from './InsureClaimDetailDialog.vue'; import * as insuranceOrderServices from '@/services/api/InsuranceOrder'; +import * as insuranceClaimServices from '@/services/api/InsuranceClaim'; import { useQuery, useQueryClient } from '@tanstack/vue-query'; import { downloadFile, downloadFileByUrl, Message, OrderInputType } from '@bole-core/core'; import { setOSSLink } from '@/utils'; @@ -221,7 +223,7 @@ }, { id: '11', - enCode: 'serialNumber', + enCode: 'claimCount', name: '鐞嗚禂', width: 100, }, @@ -251,7 +253,7 @@ }, extraProps: { hide: (row: API.GetInsuranceStaffPageTemplate) => - !(row.serialNumber && detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect), + !(row.claimCount && detail.value?.status !== InsurancePolicyStatusEnum.WaitEffect), }, }, ]); @@ -327,6 +329,10 @@ } async function handleClear() { try { + if (paginationState.total === 0) { + Message.warnMessage('娌℃湁闇�瑕佹竻绌虹殑鏁版嵁~'); + return; + } await Message.tipMessage('鏄惁娓呯┖浜哄憳淇℃伅'); let res = await insuranceOrderServices.clearInsuranceStaffData({ id: id, @@ -339,25 +345,31 @@ } async function handleUploadSuccess(response: UploadUserFile) { try { - let res = await insuranceOrderServices.importInsDetailStaffToList( - { - id: id, - url: response.url, - }, - { - getResponse: true, - responseType: 'blob', - } - ); - console.log('res: ', res); - // if (res?.data?.size) { - // await Message.tipMessage('瀛樺湪閿欒鏁版嵁锛屾槸鍚﹀鍑猴紵'); - // downloadFile(res.data, `閿欒浜哄憳鍚嶅崟`, 'xlsx'); - // } - // queryClient.invalidateQueries({ - // queryKey: ['insuranceOrderServices/getInsuranceStaffList'], - // }); - // getInsuranceStaffList(); + let res = await insuranceOrderServices.importInsDetailStaffToList({ + id: id, + url: response.url, + }); + if (res?.length > 0) { + await Message.tipMessage('瀛樺湪閿欒鏁版嵁锛屾槸鍚﹀鍑猴紵'); + XLSXUtils.exportToXLSX({ + workbookDataList: res, + fileName: '閿欒浜哄憳鍚嶅崟', + workbookHeaderMap: { + name: '闆囧憳濮撳悕', + sex: '鎬у埆', + certType: '璇佷欢绫诲瀷', + certNo: '璇佷欢鍙风爜', + jobName: '闆囧憳宸ョ', + useEmploer: '鐢ㄥ伐鍗曚綅', + address: '鐢ㄥ伐鍦扮偣', + note: '澶囨敞', + }, + }); + } + queryClient.invalidateQueries({ + queryKey: ['insuranceOrderServices/getInsuranceStaffList'], + }); + getInsuranceStaffList(); } catch (error) {} } @@ -437,16 +449,24 @@ const { dialogProps: dialogInsureClaimProps, handleEdit: handleInsureClaimEdit } = useFormDialog({ defaultFormParams: { id: '', - staffList: [] as API.InsureBatchBillDetailDto[], + routeId: '', + staffList: [] as API.InsuranceClaimDetailOutput[], }, }); -async function handleDetail(row: API.InsureBatchBillDto) { +async function getInsuranceClaimDetailList(id: string) { try { - // const res = await getInsureBatchDetail(row.insureBatchBillId); + return await insuranceClaimServices.getInsuranceClaimDetailList({ id: id }); + } catch (error) {} +} + +async function handleDetail(row: API.GetInsuranceStaffPageTemplate) { + try { + const res = await getInsuranceClaimDetailList(row.id); handleInsureClaimEdit({ - id: row.insureBatchBillId, - staffList: [], + id: row.id, + staffList: res, + routeId: id, }); } catch (error) {} } diff --git a/src/views/InsuranceClaim/components/InsuranceClaimView.vue b/src/views/InsuranceClaim/components/InsuranceClaimView.vue index 6d84651..9d55273 100644 --- a/src/views/InsuranceClaim/components/InsuranceClaimView.vue +++ b/src/views/InsuranceClaim/components/InsuranceClaimView.vue @@ -400,6 +400,7 @@ const route = useRoute(); const insuranceOrderId = (route.params.id as string) ?? ''; +const routeId = (route.query.routeId as string) ?? ''; const fromRoute = route.query.fromRoute as string; const { closeViewPush } = useRouteView(); @@ -408,6 +409,7 @@ const { form, isLoading, claimDetail, disabledReportedDate, queryClaimDetailByOrderId, resetForm } = useInsuranceClaimDetail({ insuranceOrderId, + fromRoute, }); // const { existedInsuranceOrderList } = useInsuranceOrderListByOrderRelevance({ @@ -588,6 +590,9 @@ function handleBack() { closeViewPush(route, { name: fromRoute ?? 'Home', + params: { + id: routeId, + }, }); } </script> diff --git a/src/views/InsuranceClaim/hooks/index.ts b/src/views/InsuranceClaim/hooks/index.ts index 2bd62b9..3da1f4b 100644 --- a/src/views/InsuranceClaim/hooks/index.ts +++ b/src/views/InsuranceClaim/hooks/index.ts @@ -8,9 +8,13 @@ type UseInsuranceClaimDetailOptions = { insuranceOrderId?: MaybeRef<string>; + fromRoute?: MaybeRef<string>; }; -export function useInsuranceClaimDetail({ insuranceOrderId }: UseInsuranceClaimDetailOptions) { +export function useInsuranceClaimDetail({ + insuranceOrderId, + fromRoute, +}: UseInsuranceClaimDetailOptions) { const DefaultAccidentProcess = `浜嬫晠缁忚繃: 娌荤枟鍖婚櫌:浜岀骇鍙婁互涓婂叕绔嬪尰闄� 璇婃柇缁撴灉(涓庤瘖鏂瘉鏄庝竴鑷�) @@ -55,6 +59,7 @@ const form = reactive({ insuranceOrderId: unref(insuranceOrderId), + fromRoute: unref(fromRoute), reportedTime: '', accidentTime: '', ...DefaultForm, @@ -154,6 +159,76 @@ }); } + 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 () => { @@ -168,7 +243,7 @@ onSuccess(data) { importInsuranceOrderData(data); }, - enabled: computed(() => !!form.insuranceOrderId), + enabled: computed(() => !!form.insuranceOrderId && form.fromRoute !== 'InsuranceOrderDetail'), }); function importInsuranceOrderData(data: API.InsuranceOrderListOutput) { -- Gitblit v1.9.1