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