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