From ee36747f2db9ac3a641e1cbaeb01f726ce9faa98 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期一, 24 三月 2025 16:02:28 +0800
Subject: [PATCH] feat: 页面

---
 src/views/Home/BatchChange.vue                             |   29 
 src/views/Home/components/UploadInsurePersonDialog.vue     |    1 
 src/views/InsuranceClaim/InsuranceClaim.vue                |    4 
 src/views/Home/components/InsureOrderInfoView.vue          |   62 +-
 src/views/Home/InsuranceOrderDetail.vue                    |    1 
 src/constants/oss.ts                                       |    2 
 src/constants/temp.ts                                      |   11 
 src/views/Home/constants/index.ts                          |    6 
 src/views/Home/components/UploadStampFileDialog.vue        |    1 
 src/views/Home/components/BatchDownsizingDialog.vue        |    4 
 src/views/InsuranceClaim/InsuranceClaimDetail.vue          |  582 -------------------------
 src/views/Home/Home.vue                                    |   40 -
 src/views/InsuranceClaim/components/InsuranceClaimView.vue |  602 ++++++++++++++++++++++++++
 13 files changed, 678 insertions(+), 667 deletions(-)

diff --git a/src/constants/oss.ts b/src/constants/oss.ts
index 91a3a78..47a1a06 100644
--- a/src/constants/oss.ts
+++ b/src/constants/oss.ts
@@ -4,7 +4,7 @@
 
 export const OSSBaseURL = VITE_OSS_URL;
 
-const _basicPath = '12333/YeXing/';
+const _basicPath = '12333/JiangYouBao/';
 
 export const OssHRSIE = _basicPath + 'HRSIE/';
 
diff --git a/src/constants/temp.ts b/src/constants/temp.ts
index b5aad98..3ceb08a 100644
--- a/src/constants/temp.ts
+++ b/src/constants/temp.ts
@@ -1,6 +1,9 @@
 export const TempFolderPath =
-  'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/YeXing/temp';
+  'https://parkmanagement.oss-cn-hangzhou.aliyuncs.com/12333/JiangYouBao/temp';
 
-export const InsuranceOrderTempPath = `${TempFolderPath}/%E4%B9%9F%E8%A1%8C%E5%95%86%E4%BF%9D%E4%BA%BA%E5%91%98%E6%B8%85%E5%8D%95%E6%A8%A1%E6%9D%BF.xlsx`;
-
-export const JYBInsuranceOrderTempPath = `${TempFolderPath}/%E6%B1%9F%E4%BD%91%E4%BF%9D%E4%BA%BA%E5%91%98%E6%B8%85%E5%8D%95%E6%A8%A1%E6%9D%BF.xlsx`;
+// 瀵煎叆
+export const InsuranceOrderTempPath = `${TempFolderPath}/%E9%9B%87%E4%B8%BB%E4%BA%BA%E5%91%98%E6%B8%85%E5%8D%95.xlsx`;
+// 鍔犲噺浜�
+export const InsuranceAddOrReduceTempPath = `${TempFolderPath}/%E5%8A%A0%E5%87%8F%E4%BA%BA%E6%A8%A1%E6%9D%BF.xls`;
+// 鏇挎崲浜�
+export const InsuranceChangeTempPath = `${TempFolderPath}/%E6%9B%BF%E6%8D%A2%E4%BA%BA%E6%A8%A1%E6%9D%BF.xls`;
diff --git a/src/views/Home/BatchChange.vue b/src/views/Home/BatchChange.vue
index 3bda0ec..b1b8aef 100644
--- a/src/views/Home/BatchChange.vue
+++ b/src/views/Home/BatchChange.vue
@@ -35,7 +35,7 @@
                 >
                   <template #default>
                     <el-button type="primary">鍔犲噺浜�</el-button>
-                    <el-button link type="primary" @click.stop="handleTemplateDownload"
+                    <el-button link type="primary" @click.stop="DownloadAddOrReducePersonTemplate"
                       >涓嬭浇妯℃澘</el-button
                     >
                   </template>
@@ -55,7 +55,7 @@
                 >
                   <template #default>
                     <el-button type="primary">鏇挎崲浜�</el-button>
-                    <el-button link type="primary" @click.stop="handleTemplateDownload"
+                    <el-button link type="primary" @click.stop="downloadReplacePersonTemplate"
                       >涓嬭浇妯℃澘</el-button
                     >
                   </template>
@@ -81,7 +81,7 @@
         >
         </ProTableV2>
         <div class="chuck-add-or-edit-actions">
-          <el-button class="chuck-add-or-edit-actions" type="primary" @click="handleSubmit"
+          <el-button class="chuck-add-or-edit-actions btn" type="primary" @click="handleSubmit"
             >鎻愪氦</el-button
           >
         </div>
@@ -97,25 +97,17 @@
   ProForm,
   ProFormItemV2,
   ChunkCell,
-  ProFormText,
-  ProTableQueryFilterBar,
-  QueryFilterItem,
-  SearchInput,
   ProFormCol,
   ProFormColItem,
   ProFormDatePicker,
-  ProFormInputNumber,
   useTable,
   ProTableV2,
-  ProFormRadio,
-  FieldSelect,
-  defineOperationBtns,
-  useFormDialog,
   ProFormUpload,
   UploadUserFile,
 } from '@bole-core/components';
 import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
-import { OrderInputType } from '@bole-core/core';
+import { downloadFileByUrl, OrderInputType } from '@bole-core/core';
+import { InsuranceAddOrReduceTempPath, InsuranceChangeTempPath } from '@/constants';
 
 defineOptions({
   name: 'BatchChange',
@@ -211,7 +203,12 @@
 
 function handleClear() {}
 function handleSubmit() {}
-function handleTemplateDownload() {}
+function DownloadAddOrReducePersonTemplate() {
+  downloadFileByUrl(InsuranceAddOrReduceTempPath, '鍔犲噺浜烘ā鏉�');
+}
+function downloadReplacePersonTemplate() {
+  downloadFileByUrl(InsuranceChangeTempPath, '鏇挎崲浜烘ā鏉�');
+}
 
 onMounted(async () => {
   await getBatchRefundInfoDetail();
@@ -223,6 +220,8 @@
 @use '@/style/common.scss' as *;
 
 .chuck-add-or-edit-actions {
-  //   margin-bottom: 20px;
+  &.btn {
+    margin-bottom: 20px;
+  }
 }
 </style>
diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue
index f98ab8e..c2442aa 100644
--- a/src/views/Home/Home.vue
+++ b/src/views/Home/Home.vue
@@ -44,25 +44,16 @@
           </QueryFilterItem>
         </template>
         <template #btn>
-          <el-button
-            @click="handleDownload()"
-            icon="Download"
-            type="primary"
-            style="margin-right: 10px"
-            link
+          <el-button @click="handleDownload()" type="primary" style="margin-right: 10px" link
             >妯℃澘涓嬭浇</el-button
           >
 
-          <el-button @click="handleUpload()" icon="Upload" type="primary" style="margin-right: 10px"
+          <el-button @click="handleUpload()" type="primary" style="margin-right: 10px"
             >瀵煎叆</el-button
           >
 
-          <el-button @click="downloadInsureOrder()" type="primary" icon="Download" link
-            >瀵煎嚭淇濆崟鍒楄〃</el-button
-          >
-          <el-button @click="downloadInsurePerson()" icon="Download" type="primary" link
-            >瀵煎嚭鍦ㄤ繚浜哄憳</el-button
-          >
+          <el-button @click="downloadInsureOrder()" type="primary" link>瀵煎嚭淇濆崟鍒楄〃</el-button>
+          <el-button @click="downloadInsurePerson()" type="primary" link>瀵煎嚭鍦ㄤ繚浜哄憳</el-button>
         </template>
       </ProTableQueryFilterBar>
       <ProTableV2
@@ -92,10 +83,8 @@
   useTable,
   useFormDialog,
   FieldDatePicker,
-  BlFileUpload,
   defineOperationBtns,
   UploadUserFile,
-  XLSXUtils,
   SearchInput,
   FieldRadio,
 } from '@bole-core/components';
@@ -104,16 +93,9 @@
 import { columns } from './constants';
 import UploadInsurePersonDialog from './components/UploadInsurePersonDialog.vue';
 import UploadStampFileDialog from './components/UploadStampFileDialog.vue';
-import { toThousand, format, downloadFile, setOSSLink } from '@/utils';
-import { omit } from 'lodash';
+import { format, downloadFile, setOSSLink } from '@/utils';
 import { ModelValueType } from 'element-plus';
-import { useQueryClient } from '@tanstack/vue-query';
-import {
-  InsuranceOrderTempPath,
-  JYBInsuranceOrderTempPath,
-  OnJobFlagEnumText,
-  insuranceTypeText,
-} from '@/constants';
+import { InsuranceOrderTempPath, OnJobFlagEnumText, insuranceTypeText } from '@/constants';
 import dayjs from 'dayjs';
 import _ from 'lodash';
 
@@ -139,9 +121,9 @@
     emits: {
       onClick: (role) => handleBatch(role),
     },
-    extraProps: {
-      hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
-    },
+    // extraProps: {
+    //   hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
+    // },
   },
   {
     data: {
@@ -286,10 +268,10 @@
 }
 
 function handleDownload() {
-  downloadFileByUrl(JYBInsuranceOrderTempPath, '淇濆崟瀵煎叆妯℃澘');
+  downloadFileByUrl(InsuranceOrderTempPath, '淇濆崟瀵煎叆妯℃澘');
 }
 
-function handleRowStyle(data: { row: API.InsuranceOrderListOutput; rowIndex: number }) {
+function handleRowStyle(data: { row: API.InsuranceOrderListOutput }) {
   if (
     dayjs(dayjs(data.row?.insuranceEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') >= 0 &&
     dayjs(dayjs(data.row?.insuranceEndTime).format('YYYY-MM-DD')).diff(dayjs(), 'day') < 6
diff --git a/src/views/Home/InsuranceOrderDetail.vue b/src/views/Home/InsuranceOrderDetail.vue
index e2c745b..5027481 100644
--- a/src/views/Home/InsuranceOrderDetail.vue
+++ b/src/views/Home/InsuranceOrderDetail.vue
@@ -28,7 +28,6 @@
 }
 
 const state = reactive({
-  activeIndex: 1,
   tabType: InsureOrderTabType.InsureOrderInfo,
 });
 </script>
diff --git a/src/views/Home/components/BatchDownsizingDialog.vue b/src/views/Home/components/BatchDownsizingDialog.vue
index 7d2a48a..39ebb2c 100644
--- a/src/views/Home/components/BatchDownsizingDialog.vue
+++ b/src/views/Home/components/BatchDownsizingDialog.vue
@@ -43,7 +43,7 @@
 </template>
 
 <script setup lang="ts">
-import { JYBInsuranceOrderTempPath } from '@/constants';
+import { InsuranceOrderTempPath } from '@/constants';
 import {
   ProDialog,
   UploadUserFile,
@@ -121,6 +121,6 @@
 }
 
 function downloadImportEntryStaff() {
-  downloadFileByUrl(JYBInsuranceOrderTempPath, '淇濆崟瀵煎叆妯℃澘');
+  downloadFileByUrl(InsuranceOrderTempPath, '淇濆崟瀵煎叆妯℃澘');
 }
 </script>
diff --git a/src/views/Home/components/InsureOrderInfoView.vue b/src/views/Home/components/InsureOrderInfoView.vue
index 57ab2cf..7656760 100644
--- a/src/views/Home/components/InsureOrderInfoView.vue
+++ b/src/views/Home/components/InsureOrderInfoView.vue
@@ -80,17 +80,11 @@
             </QueryFilterItem>
           </template>
           <template #btn>
-            <el-button @click="handleTemplateDownload()" icon="Download" type="primary"
-              >妯℃澘涓嬭浇</el-button
-            >
-            <el-button @click="handleImport()" icon="Download" type="primary">瀵煎叆</el-button>
-            <el-button @click="handleClear()" icon="Download" type="primary">娓呯┖鏁版嵁</el-button>
-            <el-button @click="handleDownloadPerson()" icon="Download" type="primary"
-              >浜哄憳娓呭崟涓嬭浇</el-button
-            >
-            <el-button @click="handleDownloadOrder()" icon="Download" type="primary"
-              >淇濆崟涓嬭浇</el-button
-            >
+            <el-button @click="handleTemplateDownload()" link type="primary">妯℃澘涓嬭浇</el-button>
+            <el-button @click="handleImport()" type="primary">瀵煎叆</el-button>
+            <el-button @click="handleClear()" type="primary">娓呯┖鏁版嵁</el-button>
+            <el-button @click="handleDownloadPerson()" type="primary">浜哄憳娓呭崟涓嬭浇</el-button>
+            <el-button @click="handleDownloadOrder()" type="primary">淇濆崟涓嬭浇</el-button>
           </template>
         </ProTableQueryFilterBar>
         <ProTableV2
@@ -131,11 +125,11 @@
   defineOperationBtns,
   useFormDialog,
 } from '@bole-core/components';
-import { insuranceTypeText } from '@/constants';
+import { InsuranceOrderTempPath, insuranceTypeText } from '@/constants';
 import ChangePersonInfoDialog from './ChangePersonInfoDialog.vue';
 import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
 import { useQuery, useQueryClient } from '@tanstack/vue-query';
-import { OrderInputType } from '@bole-core/core';
+import { downloadFileByUrl, OrderInputType } from '@bole-core/core';
 
 defineOptions({
   name: 'InsureOrderInfoView',
@@ -208,9 +202,9 @@
     emits: {
       onClick: (role) => handleChangeInfo(role),
     },
-    extraProps: {
-      hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
-    },
+    // extraProps: {
+    //   hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
+    // },
   },
   {
     data: {
@@ -218,11 +212,11 @@
       name: '鐞嗚禂璇︽儏',
     },
     emits: {
-      onClick: (role) => handleInsureClaimDetail(),
+      onClick: (role) => handleInsureClaimDetail(role),
     },
-    extraProps: {
-      hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
-    },
+    // extraProps: {
+    //   hide: (row: API.InsuranceOrderListOutput) => !row.orderBillFile,
+    // },
   },
 ]);
 
@@ -292,19 +286,21 @@
   }
 );
 
-function handleTemplateDownload() {}
+function handleTemplateDownload() {
+  downloadFileByUrl(InsuranceOrderTempPath, '浜哄憳淇℃伅妯℃澘');
+}
 function handleClear() {}
 function handleImport() {}
 
 function handleDownloadPerson() {}
 function handleDownloadOrder() {}
 function handleBatchChange() {
-  // router.push({
-  //   name: 'BatchChange',
-  //   params: {
-  //     id: id,
-  //   },
-  // });
+  router.push({
+    name: 'BatchChange',
+    params: {
+      id: id,
+    },
+  });
 }
 
 const { dialogProps, handleEdit, editForm } = useFormDialog({
@@ -322,7 +318,17 @@
 
 async function changeInfo() {}
 
-function handleInsureClaimDetail() {}
+function handleInsureClaimDetail(row: API.InsuranceOrderListOutput) {
+  router.push({
+    name: 'InsuranceClaimDetail',
+    params: {
+      id: row.id,
+    },
+    query: {
+      fromRoute: 'InsuranceOrderDetail',
+    },
+  });
+}
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/Home/components/UploadInsurePersonDialog.vue b/src/views/Home/components/UploadInsurePersonDialog.vue
index 0473413..ba9bc53 100644
--- a/src/views/Home/components/UploadInsurePersonDialog.vue
+++ b/src/views/Home/components/UploadInsurePersonDialog.vue
@@ -6,6 +6,7 @@
     draggable
     bodyNoPaddingBottom
     @close="onDialogClose"
+    width="600px"
   >
     <ProForm :model="innerForm" ref="dialogForm" label-width="120px">
       <ProFormItemV2
diff --git a/src/views/Home/components/UploadStampFileDialog.vue b/src/views/Home/components/UploadStampFileDialog.vue
index 8de4354..9ff782f 100644
--- a/src/views/Home/components/UploadStampFileDialog.vue
+++ b/src/views/Home/components/UploadStampFileDialog.vue
@@ -6,6 +6,7 @@
     draggable
     bodyNoPaddingBottom
     @close="onDialogClose"
+    width="600px"
   >
     <ProForm :model="innerForm" ref="dialogForm" label-width="120px">
       <ProFormItemV2
diff --git a/src/views/Home/constants/index.ts b/src/views/Home/constants/index.ts
index 4e26fcb..51e1480 100644
--- a/src/views/Home/constants/index.ts
+++ b/src/views/Home/constants/index.ts
@@ -2,12 +2,6 @@
 
 export const columns = defineColumns([
   {
-    id: '1',
-    enCode: 'channel',
-    name: '娓犻亾',
-    width: 160,
-  },
-  {
     id: '2',
     enCode: 'channel',
     name: '鎵规鍙�',
diff --git a/src/views/InsuranceClaim/InsuranceClaim.vue b/src/views/InsuranceClaim/InsuranceClaim.vue
index 52ed93a..99f3847 100644
--- a/src/views/InsuranceClaim/InsuranceClaim.vue
+++ b/src/views/InsuranceClaim/InsuranceClaim.vue
@@ -1,9 +1,9 @@
 <template>
-  <InsuranceClaimDetailView></InsuranceClaimDetailView>
+  <InsuranceClaimView></InsuranceClaimView>
 </template>
 
 <script setup lang="ts">
-import InsuranceClaimDetailView from './InsuranceClaimDetail.vue';
+import InsuranceClaimView from './components/InsuranceClaimView.vue';
 
 defineOptions({
   name: 'InsuranceClaim',
diff --git a/src/views/InsuranceClaim/InsuranceClaimDetail.vue b/src/views/InsuranceClaim/InsuranceClaimDetail.vue
index af72b53..c78ea3c 100644
--- a/src/views/InsuranceClaim/InsuranceClaimDetail.vue
+++ b/src/views/InsuranceClaim/InsuranceClaimDetail.vue
@@ -1,587 +1,11 @@
 <template>
-  <LoadingLayout :loading="isLoading">
-    <AppScrollContainer>
-      <ChunkCell title="鎶ユ淇℃伅">
-        <ProForm :model="form" ref="formRef" label-width="120px">
-          <ProFormCol>
-            <ProFormColItem :span="6">
-              <ProFormItemV2
-                label="韬唤璇佸彿鐮�:"
-                prop="idNumber"
-                :check-rules="[{ message: '璇疯緭鍏ヨ韩浠借瘉鍙风爜', type: 'idCard' }]"
-              >
-                <ProFormText
-                  v-model.trim="form.idNumber"
-                  placeholder="璇疯緭鍏ヨ韩浠借瘉鍙风爜"
-                  @change="handleIdNumberChange"
-                />
-              </ProFormItemV2>
-            </ProFormColItem>
-            <ProFormColItem :span="6">
-              <ProFormItemV2
-                label="鎶ユ鏃堕棿:"
-                prop="reportedTime"
-                :check-rules="[{ message: '璇烽�夋嫨鎶ユ鏃堕棿' }]"
-              >
-                <ProFormDatePicker
-                  v-model="form.reportedTime"
-                  type="datetime"
-                  format="YYYY-MM-DD HH:mm:ss"
-                  value-format="YYYY-MM-DD HH:mm:ss"
-                  placeholder="璇烽�夋嫨鎶ユ鏃堕棿"
-                  :disabled-date="disabledReportedDate"
-                  @change="handleReportedTimeChange"
-                  :key="datePickerKey"
-                ></ProFormDatePicker>
-              </ProFormItemV2>
-            </ProFormColItem>
-            <ProFormColItem :span="6">
-              <ProFormItemV2
-                label="鑱旂郴鐢佃瘽:"
-                prop="contactNumber"
-                :check-rules="[{ message: '璇疯緭鍏ヨ仈绯荤數璇�', type: 'phone' }]"
-              >
-                <ProFormText v-model.trim="form.contactNumber" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
-              </ProFormItemV2>
-            </ProFormColItem>
-            <ProFormColItem :span="6">
-              <ProFormItemV2
-                label="澶囩敤鑱旂郴鐢佃瘽:"
-                prop="bakContactNumber"
-                :check-rules="[{ message: '璇疯緭鍏ュ鐢ㄨ仈绯荤數璇�', type: 'phone', required: false }]"
-              >
-                <ProFormText
-                  v-model.trim="form.bakContactNumber"
-                  placeholder="璇疯緭鍏ュ鐢ㄨ仈绯荤數璇�"
-                />
-              </ProFormItemV2>
-            </ProFormColItem>
-            <ProFormColItem :span="6">
-              <ProFormItemV2 label="濮撳悕:" prop="name" :check-rules="[{ message: '璇疯緭鍏ュ鍚�' }]">
-                <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ュ鍚�" :maxlength="30" />
-              </ProFormItemV2>
-            </ProFormColItem>
-          </ProFormCol>
-        </ProForm>
-      </ChunkCell>
-      <ChunkCell title="淇濆崟淇℃伅">
-        <ProForm :model="form" ref="insuranceBaseFormRef" label-width="120px">
-          <ProFormCol>
-            <ProFormColItem :span="6">
-              <ProFormItemV2
-                label="鍙備繚鏈烘瀯:"
-                prop="insuredInstitution"
-                :check-rules="[{ message: '璇烽�夋嫨鍙備繚鏈烘瀯' }]"
-              >
-                <ProFormSelect
-                  placeholder="璇烽�夋嫨鍙備繚鏈烘瀯"
-                  :value-enum="InsuredInstitutionEnum"
-                  clearable
-                  v-model="form.insuredInstitution"
-                ></ProFormSelect>
-              </ProFormItemV2>
-            </ProFormColItem>
-            <ProFormColItem :span="6">
-              <ProFormItemV2
-                label="鎶曚繚鏂规:"
-                prop="insuranceScheme"
-                :check-rules="[{ message: '璇烽�夋嫨鎶曚繚鏂规' }]"
-              >
-                <ProFormSelect
-                  placeholder="璇烽�夋嫨鎶曚繚鏂规"
-                  :value-enum="InsuranceSchemeEnum"
-                  clearable
-                  v-model="form.insuranceScheme"
-                ></ProFormSelect>
-              </ProFormItemV2>
-            </ProFormColItem>
-          </ProFormCol>
-          <ProFormMixinsItemContainer>
-            <ProFormCol>
-              <ProFormColItem :span="6">
-                <ProFormItemV2 label="璧蜂繚鏃ユ湡:" prop="insuranceBeginTime" mode="read">
-                  <ProFormDatePicker
-                    v-model="form.insuranceBeginTime"
-                    type="date"
-                    value-format="YYYY-MM-DD"
-                    placeholder="璇烽�夋嫨璧蜂繚鏃ユ湡"
-                  ></ProFormDatePicker>
-                </ProFormItemV2>
-              </ProFormColItem>
-              <ProFormColItem :span="6">
-                <ProFormItemV2 label="鍔冲姩鍚堝悓鍗曚綅:" prop="laborContractEnterprise" mode="read">
-                  <ProFormText
-                    v-model.trim="form.laborContractEnterprise"
-                    placeholder="璇疯緭鍏ュ姵鍔ㄥ悎鍚屽崟浣�"
-                  />
-                </ProFormItemV2>
-              </ProFormColItem>
-              <ProFormColItem :span="6">
-                <ProFormItemV2 label="宸ョ:" prop="workType" mode="read">
-                  <ProFormText v-model.trim="form.workType" placeholder="璇疯緭鍏ュ伐绉�" />
-                </ProFormItemV2>
-              </ProFormColItem>
-            </ProFormCol>
-          </ProFormMixinsItemContainer>
-          <ProFormMixinsItemContainer>
-            <ProFormCol>
-              <ProFormColItem :span="6">
-                <ProFormItemV2 label="缁堜繚鏃ユ湡:" prop="insuranceEndTime" mode="read">
-                  <ProFormDatePicker
-                    v-model="form.insuranceEndTime"
-                    type="date"
-                    value-format="YYYY-MM-DD"
-                    placeholder="璇烽�夋嫨缁堜繚鏃ユ湡"
-                  ></ProFormDatePicker>
-                </ProFormItemV2>
-              </ProFormColItem>
-              <ProFormColItem :span="6">
-                <ProFormItemV2 label="瀹為檯宸ヤ綔鍗曚綅:" prop="workEnterprise" mode="read">
-                  <ProFormText
-                    v-model.trim="form.workEnterprise"
-                    placeholder="璇疯緭鍏ュ疄闄呭伐浣滃崟浣�"
-                  />
-                </ProFormItemV2>
-              </ProFormColItem>
-            </ProFormCol>
-          </ProFormMixinsItemContainer>
-        </ProForm>
-      </ChunkCell>
-      <ChunkCell title="淇濆崟淇℃伅">
-        <ProForm :model="form" ref="insuranceFormRef" label-width="120px">
-          <ProFormCol>
-            <ProFormColItem :span="6">
-              <ProFormItemV2
-                label="浜嬫晠绫诲瀷:"
-                prop="accidentType"
-                :check-rules="[{ message: '璇烽�夋嫨浜嬫晠绫诲瀷' }]"
-              >
-                <ProFormSelect
-                  placeholder="璇烽�夋嫨浜嬫晠绫诲瀷"
-                  :value-enum="AccidentTypeEnum"
-                  clearable
-                  v-model="form.accidentType"
-                ></ProFormSelect>
-              </ProFormItemV2>
-            </ProFormColItem>
-            <ProFormColItem :span="6">
-              <ProFormItemV2
-                label="浜嬫晠鍙戠敓鏃堕棿:"
-                prop="accidentTime"
-                :check-rules="[{ message: '璇烽�夋嫨浜嬫晠鍙戠敓鏃堕棿' }]"
-              >
-                <ProFormDatePicker
-                  v-model="form.accidentTime"
-                  type="datetime"
-                  format="YYYY-MM-DD HH:mm:ss"
-                  placeholder="璇烽�夋嫨浜嬫晠鍙戠敓鏃堕棿"
-                ></ProFormDatePicker>
-              </ProFormItemV2>
-            </ProFormColItem>
-          </ProFormCol>
-          <ProFormCol>
-            <ProFormColItem :span="6">
-              <ProFormItemV2 label="浼ゆ畫姣斾緥:" prop="disabilityRatio">
-                <ProFormInputNumber
-                  v-model="form.disabilityRatio"
-                  :controls="false"
-                  :min="0"
-                  :max="100"
-                  unit="%"
-                ></ProFormInputNumber>
-              </ProFormItemV2>
-            </ProFormColItem>
-            <ProFormColItem :span="18">
-              <ProFormItemV2
-                label="浜嬪彂鍦扮偣:"
-                prop="accidentAddress"
-                :check-rules="[{ message: '璇疯緭鍏ヤ簨鍙戝湴鐐�' }]"
-              >
-                <ProFormText
-                  v-model.trim="form.accidentAddress"
-                  placeholder="璇疯緭鍏ヤ簨鍙戝湴鐐�"
-                  :maxlength="100"
-                />
-              </ProFormItemV2>
-            </ProFormColItem>
-          </ProFormCol>
-          <ProFormCol>
-            <ProFormColItem :span="24">
-              <ProFormItemV2
-                label="浜嬫晠缁忚繃:"
-                prop="accidentProcess"
-                :check-rules="[{ message: '璇疯緭鍏ヤ簨鏁呯粡杩�' }]"
-              >
-                <ProFormTextArea
-                  v-model="form.accidentProcess"
-                  :rows="10"
-                  placeholder="璇疯緭鍏ヤ簨鏁呯粡杩�"
-                  :maxlength="500"
-                  show-word-limit
-                ></ProFormTextArea>
-              </ProFormItemV2>
-            </ProFormColItem>
-          </ProFormCol>
-          <div class="attachments-wrapper">
-            <div class="attachments">
-              <ProFormItemV2 label="浼よ�呰韩浠借瘉鐓х墖锛堟鍙嶏級:">
-                <div class="id-imgUrl-wrapper">
-                  <ProFormItemV2 prop="attachmentFrontIdCards" class="pro-form-item-label-hidden">
-                    <ProFormImageUpload
-                      v-model:file-url="form.attachmentFrontIdCards"
-                      :limitFileSize="10"
-                      btnText="韬唤璇佷汉鍍忛潰"
-                      :showTip="false"
-                    >
-                    </ProFormImageUpload>
-                  </ProFormItemV2>
-                  <ProFormItemV2 prop="attachmentBackIdCards" class="pro-form-item-label-hidden">
-                    <ProFormImageUpload
-                      v-model:file-url="form.attachmentBackIdCards"
-                      :limitFileSize="10"
-                      btnText="韬唤璇佸浗寰介潰"
-                      :showTip="false"
-                    >
-                    </ProFormImageUpload>
-                  </ProFormItemV2>
-                </div>
-              </ProFormItemV2>
-              <ProFormItemV2 prop="attachmentSites" label="鍙椾激鍦哄湴:">
-                <ProFormImageUpload
-                  v-model:file-url="form.attachmentSites"
-                  :limitFileSize="10"
-                  :showTip="false"
-                >
-                </ProFormImageUpload>
-              </ProFormItemV2>
-              <ProFormItemV2 prop="attachmentHandheldIdCards" label="浼よ�呮墜鎸佽韩浠借瘉鐓�:">
-                <ProFormImageUpload
-                  v-model:file-url="form.attachmentHandheldIdCards"
-                  :limitFileSize="10"
-                  :showTip="false"
-                >
-                </ProFormImageUpload>
-              </ProFormItemV2>
-              <ProFormItemV2 prop="attachmentAreas" label="鍙椾激閮ㄤ綅:">
-                <ProFormImageUpload
-                  v-model:file-url="form.attachmentAreas"
-                  :limitFileSize="10"
-                  :showTip="false"
-                  :limitFileCount="0"
-                >
-                </ProFormImageUpload>
-              </ProFormItemV2>
-              <ProFormItemV2 prop="attachmentCases" label="鐥呬緥鐓х墖:">
-                <ProFormImageUpload
-                  v-model:file-url="form.attachmentCases"
-                  :limitFileSize="10"
-                  :showTip="false"
-                  :limitFileCount="0"
-                >
-                </ProFormImageUpload>
-              </ProFormItemV2>
-            </div>
-            <ClaimPicDemoView />
-          </div>
-          <div class="chuck-add-or-edit-actions">
-            <el-button @click="handleBack">鍏抽棴</el-button>
-            <el-button type="primary" @click="handleSubmit">鎻愪氦</el-button>
-          </div>
-        </ProForm>
-      </ChunkCell>
-      <!-- <ChunkCell title="鐞嗚禂缁撴灉">
-        <ProForm :model="form" ref="claimFormRef" label-width="120px">
-          <ProFormCol>
-            <ProFormColItem :span="6">
-              <ProFormItemV2 label="鐞嗚禂缁撴灉:" prop="claimResult">
-                <ProFormSelect
-                  placeholder="璇烽�夋嫨鐞嗚禂缁撴灉"
-                  :value-enum="InsuranceClaimResultEnumText"
-                  clearable
-                  v-model="form.claimResult"
-                ></ProFormSelect>
-              </ProFormItemV2>
-            </ProFormColItem>
-            <ProFormColItem :span="6">
-              <ProFormItemV2 label="缁�/鎾ゆ鏃堕棿:" prop="claimResultTime">
-                <ProFormDatePicker
-                  v-model="form.claimResultTime"
-                  type="datetime"
-                  format="YYYY-MM-DD"
-                  value-format="YYYY-MM-DD"
-                  placeholder="璇烽�夋嫨缁�/鎾ゆ鏃堕棿"
-                ></ProFormDatePicker>
-              </ProFormItemV2>
-            </ProFormColItem>
-          </ProFormCol>
-          <ProFormItemV2 label="涓嬫閲戦:" prop="downPaymentAmount">
-            <ProFormInputNumber
-              v-model="form.downPaymentAmount"
-              :controls="false"
-              :min="0"
-              :precision="2"
-            ></ProFormInputNumber>
-          </ProFormItemV2>
-          <div class="chuck-add-or-edit-actions">
-            <el-button @click="handleBack">鍏抽棴</el-button>
-            <el-button type="primary" @click="handleSubmit">鎻愪氦</el-button>
-          </div>
-        </ProForm>
-      </ChunkCell> -->
-    </AppScrollContainer>
-    <SelectOrderDialog v-bind="dialogProps" />
-  </LoadingLayout>
+  <InsuranceClaimView :isDetail="true"></InsuranceClaimView>
 </template>
 
 <script setup lang="ts">
-import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
-import * as insuranceClaimServices from '@/services/api/InsuranceClaim';
-import {
-  ChunkCell,
-  AppScrollContainer,
-  LoadingLayout,
-  ProForm,
-  ProFormCol,
-  ProFormColItem,
-  ProFormText,
-  ProFormDatePicker,
-  ProFormSelect,
-  ProFormImageUpload,
-  ProFormTextArea,
-  ProFormItemV2,
-  ProFormMixinsItemContainer,
-  ProFormInputNumber,
-  useFormDialog,
-} from '@bole-core/components';
-import { FormInstance, DatePickerInstance } from 'element-plus';
-import { validateFormList, format } from '@/utils';
-import { convertFormToattAchments } from './utils';
-import {
-  InsuredInstitutionEnum,
-  InsuranceSchemeEnum,
-  AccidentTypeEnum,
-  InsuranceClaimAttachmentBusinessTypeEnum,
-  InsuranceClaimResultEnumText,
-} from '@/constants';
-import { useRouteView } from '@/hooks';
-import { Message, BoleRegExp } from '@bole-core/core';
-import { useInsuranceClaimDetail, useInsuranceOrderListByOrderRelevance } from './hooks';
-import ClaimPicDemoView from './components/ClaimPicDemoView.vue';
-import SelectOrderDialog from './components/SelectOrderDialog.vue';
-import { useQueryClient } from '@tanstack/vue-query';
+import InsuranceClaimView from './components/InsuranceClaimView.vue';
 
 defineOptions({
-  name: 'InsuranceClaimDetail',
+  name: 'InsuranceClaim',
 });
-
-const route = useRoute();
-const insuranceOrderId = (route.params.id as string) ?? '';
-const { closeViewPush } = useRouteView();
-
-const datePickerKey = ref(1);
-
-const { form, isLoading, claimDetail, disabledReportedDate, queryClaimDetailByOrderId, resetForm } =
-  useInsuranceClaimDetail({
-    insuranceOrderId,
-  });
-
-// const { existedInsuranceOrderList } = useInsuranceOrderListByOrderRelevance({
-//   params: computed(() => ({
-//     idIdNumber: form.idNumber,
-//     reportedTime: form.reportedTime,
-//   })),
-//   onSuccess(data) {
-//     if (data.length == 1) {
-//       // importInsuranceOrderData(data[0]);
-//       form.insuranceOrderId = data[0].id;
-//     } else if (data.length > 1) {
-//       handleAdd({
-//         insuranceOrderList: data,
-//       });
-//     }
-//   },
-// });
-
-const { dialogProps, handleAdd, editForm } = useFormDialog({
-  onConfirm: handleSelectedOrder,
-  defaultFormParams: {
-    insuranceOrderId: '',
-    insuranceOrderList: [] as API.InsuranceOrderListOutput[],
-  },
-});
-
-async function handleSelectedOrder() {
-  try {
-    datePickerKey.value += 1;
-    resetForm();
-    await nextTick();
-    form.insuranceOrderId = editForm.insuranceOrderId;
-    // let claimDetail = await queryClaimDetailByOrderId();
-    // if (claimDetail) {
-    //   Message.errorMessage('璇ヤ繚鍗曞凡鐞嗚禂');
-    // }
-  } catch (error) {}
-}
-
-const queryClient = useQueryClient();
-
-async function ensureInsuranceOrderList() {
-  try {
-    if (BoleRegExp.RegIDCard.test(form.idNumber) && !!form.reportedTime) {
-      let params: API.QueryInsuranceOrderListByOrderRelevanceInput = {
-        idIdNumber: form.idNumber,
-        reportedTime: form.reportedTime,
-      };
-      let existedInsuranceOrderList = await queryClient.ensureQueryData({
-        queryKey: ['insuranceOrderServices/getInsuranceOrderListByOrderRelevance', params],
-        queryFn: async () => {
-          return await insuranceOrderServices.getInsuranceOrderListByOrderRelevance(params, {
-            showLoading: false,
-          });
-        },
-      });
-      if (existedInsuranceOrderList.length == 1) {
-        form.insuranceOrderId = existedInsuranceOrderList[0].id;
-      } else if (existedInsuranceOrderList.length > 1) {
-        handleAdd({
-          insuranceOrderList: existedInsuranceOrderList,
-        });
-      } else {
-        Message.errorMessage('鏈壘鍒板尮閰嶇殑淇濆崟淇℃伅');
-      }
-    }
-
-    // return existedInsuranceOrderList;
-  } catch (error) {}
-}
-
-function handleIdNumberChange() {
-  ensureInsuranceOrderList();
-}
-
-function handleReportedTimeChange() {
-  if (form.accidentTime === '') {
-    form.accidentTime = form.reportedTime;
-  }
-  ensureInsuranceOrderList();
-}
-
-const formRef = ref<FormInstance>();
-const insuranceBaseFormRef = ref<FormInstance>();
-const insuranceFormRef = ref<FormInstance>();
-const claimFormRef = ref<FormInstance>();
-
-async function handleSubmit() {
-  try {
-    const valid = await validateFormList([
-      formRef.value,
-      insuranceBaseFormRef.value,
-      insuranceFormRef.value,
-    ]);
-
-    if (valid) {
-      addInsuranceClaim();
-    }
-  } catch (error) {}
-}
-
-async function addInsuranceClaim() {
-  try {
-    if (claimDetail.value === undefined) {
-      Message.errorMessage('鏈壘鍒板尮閰嶇殑淇濆崟淇℃伅');
-      return;
-    }
-    let params: API.AddInsuranceClaimInput = {
-      channel: form.channel,
-      name: form.name,
-      idNumber: form.idNumber,
-      workType: form.workType,
-      laborContractEnterprise: form.laborContractEnterprise,
-      workEnterprise: form.workEnterprise,
-      insuranceBeginTime: format(form.insuranceBeginTime),
-      insuranceEndTime: format(form.insuranceEndTime),
-      insuredInstitution: form.insuredInstitution,
-      insuranceScheme: form.insuranceScheme,
-      onJobFlag: form.onJobFlag,
-      gender: form.gender,
-      age: form.age,
-      premiumAmount: form.premiumAmount,
-      incDecAmount: form.incDecAmount,
-      insuranceOrderId: form.insuranceOrderId,
-      reportedTime: format(form.reportedTime, 'YYYY-MM-DD HH:mm:ss'),
-      contactNumber: form.contactNumber,
-      bakContactNumber: form.bakContactNumber,
-      accidentType: form.accidentType,
-      accidentTime: format(form.accidentTime, 'YYYY-MM-DD HH:mm:ss'),
-      // disabilityRatio: form.disabilityRatio,
-      accidentAddress: form.accidentAddress,
-      accidentProcess: form.accidentProcess,
-      // claimResult: form.claimResult,
-      // claimResultTime: form.claimResultTime,
-      attachments: [
-        ...convertFormToattAchments(
-          form.attachmentFrontIdCards,
-          InsuranceClaimAttachmentBusinessTypeEnum.InjuredIdCardImg
-        ),
-        ...convertFormToattAchments(
-          form.attachmentBackIdCards,
-          InsuranceClaimAttachmentBusinessTypeEnum.InjuredIdCardImg
-        ),
-        ...convertFormToattAchments(
-          form.attachmentSites,
-          InsuranceClaimAttachmentBusinessTypeEnum.InjurySiteImg
-        ),
-        ...convertFormToattAchments(
-          form.attachmentHandheldIdCards,
-          InsuranceClaimAttachmentBusinessTypeEnum.InjuredHandheldIdCardImg
-        ),
-        ...convertFormToattAchments(
-          form.attachmentAreas,
-          InsuranceClaimAttachmentBusinessTypeEnum.InjuredAreaImg
-        ),
-        ...convertFormToattAchments(
-          form.attachmentCases,
-          InsuranceClaimAttachmentBusinessTypeEnum.CasesImg
-        ),
-      ],
-    };
-    // if (form.downPaymentAmount) params.downPaymentAmount = form.downPaymentAmount;
-    if (form.disabilityRatio) params.disabilityRatio = form.disabilityRatio;
-    let res: number;
-    // if (!!claimDetail.value) {
-    //   Message.errorMessage('璇ヤ繚鍗曞凡鐞嗚禂');
-    // } else {
-    res = await insuranceClaimServices.addInsuranceClaim(params);
-    // }
-    if (res) {
-      Message.successMessage('鎿嶄綔鎴愬姛');
-      handleBack();
-    }
-  } catch (error) {}
-}
-
-function handleBack() {
-  closeViewPush(route, {
-    name: 'Home',
-  });
-}
 </script>
-
-<style lang="scss" scoped>
-@use '@/style/common.scss' as *;
-
-.attachments-wrapper {
-  position: relative;
-  display: flex;
-
-  .attachments {
-    flex: 1;
-    min-width: 0;
-  }
-}
-
-.id-imgUrl-wrapper {
-  display: flex;
-  gap: 40px;
-}
-</style>
diff --git a/src/views/InsuranceClaim/components/InsuranceClaimView.vue b/src/views/InsuranceClaim/components/InsuranceClaimView.vue
new file mode 100644
index 0000000..22591b9
--- /dev/null
+++ b/src/views/InsuranceClaim/components/InsuranceClaimView.vue
@@ -0,0 +1,602 @@
+<template>
+  <LoadingLayout :loading="isLoading">
+    <AppScrollContainer>
+      <ChunkCell title="鎶ユ淇℃伅">
+        <ProForm :model="form" ref="formRef" label-width="120px" :is-read="isDetail">
+          <ProFormCol>
+            <ProFormColItem :span="6">
+              <ProFormItemV2
+                label="韬唤璇佸彿鐮�:"
+                prop="idNumber"
+                :check-rules="[{ message: '璇疯緭鍏ヨ韩浠借瘉鍙风爜', type: 'idCard' }]"
+              >
+                <ProFormText
+                  v-model.trim="form.idNumber"
+                  placeholder="璇疯緭鍏ヨ韩浠借瘉鍙风爜"
+                  @change="handleIdNumberChange"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="6">
+              <ProFormItemV2
+                label="鎶ユ鏃堕棿:"
+                prop="reportedTime"
+                :check-rules="[{ message: '璇烽�夋嫨鎶ユ鏃堕棿' }]"
+              >
+                <ProFormDatePicker
+                  v-model="form.reportedTime"
+                  type="datetime"
+                  format="YYYY-MM-DD HH:mm:ss"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="璇烽�夋嫨鎶ユ鏃堕棿"
+                  :disabled-date="disabledReportedDate"
+                  @change="handleReportedTimeChange"
+                  :key="datePickerKey"
+                ></ProFormDatePicker>
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="6">
+              <ProFormItemV2
+                label="鑱旂郴鐢佃瘽:"
+                prop="contactNumber"
+                :check-rules="[{ message: '璇疯緭鍏ヨ仈绯荤數璇�', type: 'phone' }]"
+              >
+                <ProFormText v-model.trim="form.contactNumber" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="6">
+              <ProFormItemV2
+                label="澶囩敤鑱旂郴鐢佃瘽:"
+                prop="bakContactNumber"
+                :check-rules="[{ message: '璇疯緭鍏ュ鐢ㄨ仈绯荤數璇�', type: 'phone', required: false }]"
+              >
+                <ProFormText
+                  v-model.trim="form.bakContactNumber"
+                  placeholder="璇疯緭鍏ュ鐢ㄨ仈绯荤數璇�"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="6">
+              <ProFormItemV2 label="濮撳悕:" prop="name" :check-rules="[{ message: '璇疯緭鍏ュ鍚�' }]">
+                <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ュ鍚�" :maxlength="30" />
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="6">
+              <ProFormItemV2
+                label="淇濆崟鍙�:"
+                prop="name"
+                :check-rules="[{ message: '璇疯緭鍏ヤ繚鍗曞彿' }]"
+              >
+                <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ヤ繚鍗曞彿" :maxlength="30" />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+        </ProForm>
+      </ChunkCell>
+      <ChunkCell title="淇濆崟淇℃伅">
+        <ProForm :model="form" ref="insuranceBaseFormRef" label-width="120px" :is-read="isDetail">
+          <ProFormCol>
+            <ProFormColItem :span="6">
+              <ProFormItemV2
+                label="鍙備繚鏈烘瀯:"
+                prop="insuredInstitution"
+                :check-rules="[{ message: '璇烽�夋嫨鍙備繚鏈烘瀯' }]"
+              >
+                <ProFormSelect
+                  placeholder="璇烽�夋嫨鍙備繚鏈烘瀯"
+                  :value-enum="InsuredInstitutionEnum"
+                  clearable
+                  v-model="form.insuredInstitution"
+                ></ProFormSelect>
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="6">
+              <ProFormItemV2
+                label="鎶曚繚鏂规:"
+                prop="insuranceScheme"
+                :check-rules="[{ message: '璇烽�夋嫨鎶曚繚鏂规' }]"
+              >
+                <ProFormSelect
+                  placeholder="璇烽�夋嫨鎶曚繚鏂规"
+                  :value-enum="InsuranceSchemeEnum"
+                  clearable
+                  v-model="form.insuranceScheme"
+                ></ProFormSelect>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormMixinsItemContainer>
+            <ProFormCol>
+              <ProFormColItem :span="6">
+                <ProFormItemV2 label="璧蜂繚鏃ユ湡:" prop="insuranceBeginTime" mode="read">
+                  <ProFormDatePicker
+                    v-model="form.insuranceBeginTime"
+                    type="date"
+                    value-format="YYYY-MM-DD"
+                    placeholder="璇烽�夋嫨璧蜂繚鏃ユ湡"
+                  ></ProFormDatePicker>
+                </ProFormItemV2>
+              </ProFormColItem>
+              <ProFormColItem :span="6">
+                <ProFormItemV2 label="鎶曚繚浜�:" prop="laborContractEnterprise" mode="read">
+                  <ProFormText
+                    v-model.trim="form.laborContractEnterprise"
+                    placeholder="璇疯緭鍏ユ姇淇濅汉"
+                  />
+                </ProFormItemV2>
+              </ProFormColItem>
+              <ProFormColItem :span="6">
+                <ProFormItemV2 label="宸ョ:" prop="workType" mode="read">
+                  <ProFormText v-model.trim="form.workType" placeholder="璇疯緭鍏ュ伐绉�" />
+                </ProFormItemV2>
+              </ProFormColItem>
+            </ProFormCol>
+          </ProFormMixinsItemContainer>
+          <ProFormMixinsItemContainer>
+            <ProFormCol>
+              <ProFormColItem :span="6">
+                <ProFormItemV2 label="缁堜繚鏃ユ湡:" prop="insuranceEndTime" mode="read">
+                  <ProFormDatePicker
+                    v-model="form.insuranceEndTime"
+                    type="date"
+                    value-format="YYYY-MM-DD"
+                    placeholder="璇烽�夋嫨缁堜繚鏃ユ湡"
+                  ></ProFormDatePicker>
+                </ProFormItemV2>
+              </ProFormColItem>
+              <ProFormColItem :span="6">
+                <ProFormItemV2 label="琚繚浜�:" prop="workEnterprise" mode="read">
+                  <ProFormText v-model.trim="form.workEnterprise" placeholder="璇疯緭鍏ヨ淇濅汉" />
+                </ProFormItemV2>
+              </ProFormColItem>
+            </ProFormCol>
+          </ProFormMixinsItemContainer>
+        </ProForm>
+      </ChunkCell>
+      <ChunkCell title="淇濆崟淇℃伅">
+        <ProForm :model="form" ref="insuranceFormRef" label-width="160px" :is-read="isDetail">
+          <ProFormCol>
+            <ProFormColItem :span="6">
+              <ProFormItemV2
+                label="浜嬫晠绫诲瀷:"
+                prop="accidentType"
+                :check-rules="[{ message: '璇烽�夋嫨浜嬫晠绫诲瀷' }]"
+              >
+                <ProFormSelect
+                  placeholder="璇烽�夋嫨浜嬫晠绫诲瀷"
+                  :value-enum="AccidentTypeEnum"
+                  clearable
+                  v-model="form.accidentType"
+                ></ProFormSelect>
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="6">
+              <ProFormItemV2
+                label="浜嬫晠鍙戠敓鏃堕棿:"
+                prop="accidentTime"
+                :check-rules="[{ message: '璇烽�夋嫨浜嬫晠鍙戠敓鏃堕棿' }]"
+              >
+                <ProFormDatePicker
+                  v-model="form.accidentTime"
+                  type="datetime"
+                  format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="璇烽�夋嫨浜嬫晠鍙戠敓鏃堕棿"
+                ></ProFormDatePicker>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="6">
+              <ProFormItemV2 label="浼ゆ畫姣斾緥:" prop="disabilityRatio">
+                <ProFormInputNumber
+                  v-model="form.disabilityRatio"
+                  :controls="false"
+                  :min="0"
+                  :max="100"
+                  unit="%"
+                ></ProFormInputNumber>
+              </ProFormItemV2>
+            </ProFormColItem>
+            <ProFormColItem :span="18">
+              <ProFormItemV2
+                label="浜嬪彂鍦扮偣:"
+                prop="accidentAddress"
+                :check-rules="[{ message: '璇疯緭鍏ヤ簨鍙戝湴鐐�' }]"
+              >
+                <ProFormText
+                  v-model.trim="form.accidentAddress"
+                  placeholder="璇疯緭鍏ヤ簨鍙戝湴鐐�"
+                  :maxlength="100"
+                />
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <ProFormCol>
+            <ProFormColItem :span="24">
+              <ProFormItemV2
+                label="浜嬫晠缁忚繃:"
+                prop="accidentProcess"
+                :check-rules="[{ message: '璇疯緭鍏ヤ簨鏁呯粡杩�' }]"
+              >
+                <ProFormTextArea
+                  v-model="form.accidentProcess"
+                  :rows="10"
+                  placeholder="璇疯緭鍏ヤ簨鏁呯粡杩�"
+                  :maxlength="500"
+                  show-word-limit
+                ></ProFormTextArea>
+              </ProFormItemV2>
+            </ProFormColItem>
+          </ProFormCol>
+          <div class="attachments-wrapper">
+            <div class="attachments">
+              <ProFormItemV2 label="浼よ�呰韩浠借瘉鐓х墖(姝e弽):">
+                <div class="id-imgUrl-wrapper">
+                  <ProFormItemV2 prop="attachmentFrontIdCards" class="pro-form-item-label-hidden">
+                    <ProFormImageUpload
+                      v-model:file-url="form.attachmentFrontIdCards"
+                      :limitFileSize="10"
+                      btnText="韬唤璇佷汉鍍忛潰"
+                      :showTip="false"
+                    >
+                    </ProFormImageUpload>
+                  </ProFormItemV2>
+                  <ProFormItemV2 prop="attachmentBackIdCards" class="pro-form-item-label-hidden">
+                    <ProFormImageUpload
+                      v-model:file-url="form.attachmentBackIdCards"
+                      :limitFileSize="10"
+                      btnText="韬唤璇佸浗寰介潰"
+                      :showTip="false"
+                    >
+                    </ProFormImageUpload>
+                  </ProFormItemV2>
+                </div>
+              </ProFormItemV2>
+              <ProFormItemV2 prop="attachmentSites" label="鍙椾激鍦哄湴:">
+                <ProFormImageUpload
+                  v-model:file-url="form.attachmentSites"
+                  :limitFileSize="10"
+                  :showTip="false"
+                >
+                </ProFormImageUpload>
+              </ProFormItemV2>
+              <ProFormItemV2 prop="attachmentHandheldIdCards" label="浼よ�呮墜鎸佽韩浠借瘉鐓�:">
+                <ProFormImageUpload
+                  v-model:file-url="form.attachmentHandheldIdCards"
+                  :limitFileSize="10"
+                  :showTip="false"
+                >
+                </ProFormImageUpload>
+              </ProFormItemV2>
+              <ProFormItemV2 prop="attachmentAreas" label="鍙椾激閮ㄤ綅:">
+                <ProFormImageUpload
+                  v-model:file-url="form.attachmentAreas"
+                  :limitFileSize="10"
+                  :showTip="false"
+                  :limitFileCount="0"
+                >
+                </ProFormImageUpload>
+              </ProFormItemV2>
+              <ProFormItemV2 prop="attachmentCases" label="鐥呬緥鐓х墖:">
+                <ProFormImageUpload
+                  v-model:file-url="form.attachmentCases"
+                  :limitFileSize="10"
+                  :showTip="false"
+                  :limitFileCount="0"
+                >
+                </ProFormImageUpload>
+              </ProFormItemV2>
+            </div>
+            <ClaimPicDemoView />
+          </div>
+          <div class="chuck-add-or-edit-actions">
+            <el-button @click="handleBack">鍏抽棴</el-button>
+            <el-button v-if="!isDetail" type="primary" @click="handleSubmit">鎻愪氦</el-button>
+          </div>
+        </ProForm>
+      </ChunkCell>
+      <!-- <ChunkCell title="鐞嗚禂缁撴灉">
+          <ProForm :model="form" ref="claimFormRef" label-width="120px">
+            <ProFormCol>
+              <ProFormColItem :span="6">
+                <ProFormItemV2 label="鐞嗚禂缁撴灉:" prop="claimResult">
+                  <ProFormSelect
+                    placeholder="璇烽�夋嫨鐞嗚禂缁撴灉"
+                    :value-enum="InsuranceClaimResultEnumText"
+                    clearable
+                    v-model="form.claimResult"
+                  ></ProFormSelect>
+                </ProFormItemV2>
+              </ProFormColItem>
+              <ProFormColItem :span="6">
+                <ProFormItemV2 label="缁�/鎾ゆ鏃堕棿:" prop="claimResultTime">
+                  <ProFormDatePicker
+                    v-model="form.claimResultTime"
+                    type="datetime"
+                    format="YYYY-MM-DD"
+                    value-format="YYYY-MM-DD"
+                    placeholder="璇烽�夋嫨缁�/鎾ゆ鏃堕棿"
+                  ></ProFormDatePicker>
+                </ProFormItemV2>
+              </ProFormColItem>
+            </ProFormCol>
+            <ProFormItemV2 label="涓嬫閲戦:" prop="downPaymentAmount">
+              <ProFormInputNumber
+                v-model="form.downPaymentAmount"
+                :controls="false"
+                :min="0"
+                :precision="2"
+              ></ProFormInputNumber>
+            </ProFormItemV2>
+            <div class="chuck-add-or-edit-actions">
+              <el-button @click="handleBack">鍏抽棴</el-button>
+              <el-button type="primary" @click="handleSubmit">鎻愪氦</el-button>
+            </div>
+          </ProForm>
+        </ChunkCell> -->
+    </AppScrollContainer>
+    <SelectOrderDialog v-bind="dialogProps" />
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import * as insuranceOrderServices from '@/services/api/InsuranceOrder';
+import * as insuranceClaimServices from '@/services/api/InsuranceClaim';
+import {
+  ChunkCell,
+  AppScrollContainer,
+  LoadingLayout,
+  ProForm,
+  ProFormCol,
+  ProFormColItem,
+  ProFormText,
+  ProFormDatePicker,
+  ProFormSelect,
+  ProFormImageUpload,
+  ProFormTextArea,
+  ProFormItemV2,
+  ProFormMixinsItemContainer,
+  ProFormInputNumber,
+  useFormDialog,
+} from '@bole-core/components';
+import { FormInstance, DatePickerInstance } from 'element-plus';
+import { validateFormList, format } from '@/utils';
+import {
+  InsuredInstitutionEnum,
+  InsuranceSchemeEnum,
+  AccidentTypeEnum,
+  InsuranceClaimAttachmentBusinessTypeEnum,
+  InsuranceClaimResultEnumText,
+} from '@/constants';
+import { useRouteView } from '@/hooks';
+import { Message, BoleRegExp } from '@bole-core/core';
+import ClaimPicDemoView from './ClaimPicDemoView.vue';
+import SelectOrderDialog from './SelectOrderDialog.vue';
+import { useQueryClient } from '@tanstack/vue-query';
+import { convertFormToattAchments } from '../utils';
+import { useInsuranceClaimDetail } from '../hooks';
+
+defineOptions({
+  name: 'InsuranceClaimDetail',
+});
+
+type Props = {
+  isDetail?: boolean;
+};
+
+const props = withDefaults(defineProps<Props>(), {
+  isDetail: false,
+});
+
+const route = useRoute();
+const insuranceOrderId = (route.params.id as string) ?? '';
+const fromRoute = route.query.fromRoute as string;
+const { closeViewPush } = useRouteView();
+
+const datePickerKey = ref(1);
+
+const { form, isLoading, claimDetail, disabledReportedDate, queryClaimDetailByOrderId, resetForm } =
+  useInsuranceClaimDetail({
+    insuranceOrderId,
+  });
+
+// const { existedInsuranceOrderList } = useInsuranceOrderListByOrderRelevance({
+//   params: computed(() => ({
+//     idIdNumber: form.idNumber,
+//     reportedTime: form.reportedTime,
+//   })),
+//   onSuccess(data) {
+//     if (data.length == 1) {
+//       // importInsuranceOrderData(data[0]);
+//       form.insuranceOrderId = data[0].id;
+//     } else if (data.length > 1) {
+//       handleAdd({
+//         insuranceOrderList: data,
+//       });
+//     }
+//   },
+// });
+
+const { dialogProps, handleAdd, editForm } = useFormDialog({
+  onConfirm: handleSelectedOrder,
+  defaultFormParams: {
+    insuranceOrderId: '',
+    insuranceOrderList: [] as API.InsuranceOrderListOutput[],
+  },
+});
+
+async function handleSelectedOrder() {
+  try {
+    datePickerKey.value += 1;
+    resetForm();
+    await nextTick();
+    form.insuranceOrderId = editForm.insuranceOrderId;
+    // let claimDetail = await queryClaimDetailByOrderId();
+    // if (claimDetail) {
+    //   Message.errorMessage('璇ヤ繚鍗曞凡鐞嗚禂');
+    // }
+  } catch (error) {}
+}
+
+const queryClient = useQueryClient();
+
+async function ensureInsuranceOrderList() {
+  try {
+    if (BoleRegExp.RegIDCard.test(form.idNumber) && !!form.reportedTime) {
+      let params: API.QueryInsuranceOrderListByOrderRelevanceInput = {
+        idIdNumber: form.idNumber,
+        reportedTime: form.reportedTime,
+      };
+      let existedInsuranceOrderList = await queryClient.ensureQueryData({
+        queryKey: ['insuranceOrderServices/getInsuranceOrderListByOrderRelevance', params],
+        queryFn: async () => {
+          return await insuranceOrderServices.getInsuranceOrderListByOrderRelevance(params, {
+            showLoading: false,
+          });
+        },
+      });
+      if (existedInsuranceOrderList.length == 1) {
+        form.insuranceOrderId = existedInsuranceOrderList[0].id;
+      } else if (existedInsuranceOrderList.length > 1) {
+        handleAdd({
+          insuranceOrderList: existedInsuranceOrderList,
+        });
+      } else {
+        Message.errorMessage('鏈壘鍒板尮閰嶇殑淇濆崟淇℃伅');
+      }
+    }
+
+    // return existedInsuranceOrderList;
+  } catch (error) {}
+}
+
+function handleIdNumberChange() {
+  ensureInsuranceOrderList();
+}
+
+function handleReportedTimeChange() {
+  if (form.accidentTime === '') {
+    form.accidentTime = form.reportedTime;
+  }
+  ensureInsuranceOrderList();
+}
+
+const formRef = ref<FormInstance>();
+const insuranceBaseFormRef = ref<FormInstance>();
+const insuranceFormRef = ref<FormInstance>();
+const claimFormRef = ref<FormInstance>();
+
+async function handleSubmit() {
+  try {
+    const valid = await validateFormList([
+      formRef.value,
+      insuranceBaseFormRef.value,
+      insuranceFormRef.value,
+    ]);
+
+    if (valid) {
+      addInsuranceClaim();
+    }
+  } catch (error) {}
+}
+
+async function addInsuranceClaim() {
+  try {
+    if (claimDetail.value === undefined) {
+      Message.errorMessage('鏈壘鍒板尮閰嶇殑淇濆崟淇℃伅');
+      return;
+    }
+    let params: API.AddInsuranceClaimInput = {
+      channel: form.channel,
+      name: form.name,
+      idNumber: form.idNumber,
+      workType: form.workType,
+      laborContractEnterprise: form.laborContractEnterprise,
+      workEnterprise: form.workEnterprise,
+      insuranceBeginTime: format(form.insuranceBeginTime),
+      insuranceEndTime: format(form.insuranceEndTime),
+      insuredInstitution: form.insuredInstitution,
+      insuranceScheme: form.insuranceScheme,
+      onJobFlag: form.onJobFlag,
+      gender: form.gender,
+      age: form.age,
+      premiumAmount: form.premiumAmount,
+      incDecAmount: form.incDecAmount,
+      insuranceOrderId: form.insuranceOrderId,
+      reportedTime: format(form.reportedTime, 'YYYY-MM-DD HH:mm:ss'),
+      contactNumber: form.contactNumber,
+      bakContactNumber: form.bakContactNumber,
+      accidentType: form.accidentType,
+      accidentTime: format(form.accidentTime, 'YYYY-MM-DD HH:mm:ss'),
+      // disabilityRatio: form.disabilityRatio,
+      accidentAddress: form.accidentAddress,
+      accidentProcess: form.accidentProcess,
+      // claimResult: form.claimResult,
+      // claimResultTime: form.claimResultTime,
+      attachments: [
+        ...convertFormToattAchments(
+          form.attachmentFrontIdCards,
+          InsuranceClaimAttachmentBusinessTypeEnum.InjuredIdCardImg
+        ),
+        ...convertFormToattAchments(
+          form.attachmentBackIdCards,
+          InsuranceClaimAttachmentBusinessTypeEnum.InjuredIdCardImg
+        ),
+        ...convertFormToattAchments(
+          form.attachmentSites,
+          InsuranceClaimAttachmentBusinessTypeEnum.InjurySiteImg
+        ),
+        ...convertFormToattAchments(
+          form.attachmentHandheldIdCards,
+          InsuranceClaimAttachmentBusinessTypeEnum.InjuredHandheldIdCardImg
+        ),
+        ...convertFormToattAchments(
+          form.attachmentAreas,
+          InsuranceClaimAttachmentBusinessTypeEnum.InjuredAreaImg
+        ),
+        ...convertFormToattAchments(
+          form.attachmentCases,
+          InsuranceClaimAttachmentBusinessTypeEnum.CasesImg
+        ),
+      ],
+    };
+    // if (form.downPaymentAmount) params.downPaymentAmount = form.downPaymentAmount;
+    if (form.disabilityRatio) params.disabilityRatio = form.disabilityRatio;
+    let res: number;
+    // if (!!claimDetail.value) {
+    //   Message.errorMessage('璇ヤ繚鍗曞凡鐞嗚禂');
+    // } else {
+    res = await insuranceClaimServices.addInsuranceClaim(params);
+    // }
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      handleBack();
+    }
+  } catch (error) {}
+}
+
+function handleBack() {
+  closeViewPush(route, {
+    name: fromRoute ?? 'Home',
+  });
+}
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+
+.attachments-wrapper {
+  position: relative;
+  display: flex;
+
+  .attachments {
+    flex: 1;
+    min-width: 0;
+  }
+}
+
+.id-imgUrl-wrapper {
+  display: flex;
+  gap: 40px;
+}
+</style>

--
Gitblit v1.9.1