From babd7a49ba48c83334bbe9a4c992d784e062f6e3 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期五, 04 七月 2025 14:33:47 +0800
Subject: [PATCH] fix: 江佑保系统健壮性修复

---
 src/views/Home/components/UploadInsurePersonDialog.vue |    6 +++
 src/hooks/dic.ts                                       |    5 ++
 src/constants/insuranceClaim.ts                        |   13 ++++++
 src/services/api/typings.d.ts                          |    8 ++--
 src/views/Home/components/InsureOrderInfoView.vue      |   74 +++++++++++++++++++++++++++++-------
 src/views/Home/components/InsureInstructionsDialog.vue |    3 +
 src/views/Home/Home.vue                                |    3 +
 src/services/api/InsuranceOrder.ts                     |    2 
 8 files changed, 92 insertions(+), 22 deletions(-)

diff --git a/src/constants/insuranceClaim.ts b/src/constants/insuranceClaim.ts
index 5ec5d81..cdeb0ca 100644
--- a/src/constants/insuranceClaim.ts
+++ b/src/constants/insuranceClaim.ts
@@ -92,6 +92,10 @@
   Reject = -10,
   /**寰呭鏍� */
   WaitAudit = 10,
+  /**寰呭鏍� 寮哄埗鍐嶅鍚庣殑鍐嶅鐘舵��*/
+  WaitReAudit = 11,
+  /**寰呭鏍� 琛ユ彁鍚庣殑鍐嶅鐘舵��*/
+  WaitFillAudit = 12,
   /**瀹℃牳涓� */
   Auditing = 15,
   /**閫氳繃 */
@@ -101,6 +105,15 @@
 export const InsurancePolicyAuditStatusEnumText = {
   [InsurancePolicyAuditStatusEnum.Reject]: '椹冲洖',
   [InsurancePolicyAuditStatusEnum.WaitAudit]: '寰呭鏍�',
+  [InsurancePolicyAuditStatusEnum.WaitReAudit]: '寰呭鏍�',
+  [InsurancePolicyAuditStatusEnum.WaitFillAudit]: '寰呭鏍�',
+  [InsurancePolicyAuditStatusEnum.Auditing]: '瀹℃牳涓�',
+  [InsurancePolicyAuditStatusEnum.Pass]: '閫氳繃',
+};
+
+export const InsurancePolicyAuditStatusEnumTextForFilter = {
+  [InsurancePolicyAuditStatusEnum.Reject]: '椹冲洖',
+  [InsurancePolicyAuditStatusEnum.WaitAudit]: '寰呭鏍�',
   [InsurancePolicyAuditStatusEnum.Auditing]: '瀹℃牳涓�',
   [InsurancePolicyAuditStatusEnum.Pass]: '閫氳繃',
 };
diff --git a/src/hooks/dic.ts b/src/hooks/dic.ts
index 7c5ab3e..e206017 100644
--- a/src/hooks/dic.ts
+++ b/src/hooks/dic.ts
@@ -80,8 +80,13 @@
     staleTime: Infinity,
   });
 
+  function getInsureProductSchemeByCode(code: string) {
+    return allInsureProductSchemeList.value.find((x) => x.code === code);
+  }
+
   return {
     allInsureProductSchemeList,
     refetch,
+    getInsureProductSchemeByCode,
   };
 }
diff --git a/src/services/api/InsuranceOrder.ts b/src/services/api/InsuranceOrder.ts
index 54e53d5..d7fb3a0 100644
--- a/src/services/api/InsuranceOrder.ts
+++ b/src/services/api/InsuranceOrder.ts
@@ -460,7 +460,7 @@
   body: API.RestorePolicyInput,
   options?: API.RequestConfig
 ) {
-  return request<any>('/api/InsuranceOrder/RestorePolicyStatus', {
+  return request<boolean>('/api/InsuranceOrder/RestorePolicyStatus', {
     method: 'POST',
     headers: {
       'Content-Type': 'application/json',
diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts
index ebb87b8..17f224a 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -935,6 +935,8 @@
     auditRemark?: string;
     /** 淇濋櫓浜у搧IdNumber */
     productIdNumber?: string;
+    /** 鏂规浠g爜 */
+    productSchemeCode?: string;
     /** 鏄惁璧扮嚎涓婃祦绋� */
     productOnline?: boolean;
     payStatus?: InsurancePolicyListPayStatusEnum;
@@ -1576,7 +1578,7 @@
     failCount?: number;
   }
 
-  type InsurancePolicyAuditStatusEnum = 10 | 15 | 20 | -10;
+  type InsurancePolicyAuditStatusEnum = 10 | 11 | 12 | 15 | 20 | -10;
 
   type InsurancePolicyListPayStatusEnum = 1 | 2;
 
@@ -1611,7 +1613,7 @@
     invoiceDownloadOssUrl?: string;
   }
 
-  type InsurancePolicyPayStatusEnum = 1 | 2 | -1;
+  type InsurancePolicyPayStatusEnum = 0 | 1 | 2 | -1;
 
   type InsurancePolicyStatusEnum = 10 | 20 | 30;
 
@@ -2083,8 +2085,6 @@
   }
 
   interface RestorePolicyDto {
-    /** Id */
-    id?: string;
     /** 璁㈠崟鍙� */
     channelOrderNo?: string;
     /** 淇濆崟鍙� */
diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue
index 8f164ac..de84ceb 100644
--- a/src/views/Home/Home.vue
+++ b/src/views/Home/Home.vue
@@ -27,7 +27,7 @@
           <QueryFilterItem>
             <FieldRadio
               v-model="extraParamState.auditStatus"
-              :value-enum="InsurancePolicyAuditStatusEnumText"
+              :value-enum="InsurancePolicyAuditStatusEnumTextForFilter"
               buttonStyle
               showAllBtn
               @change="getList()"
@@ -154,6 +154,7 @@
   InsurancePolicyStatusEnum,
   AppType,
   InsurancePolicyAuditStatusEnumText,
+  InsurancePolicyAuditStatusEnumTextForFilter,
   InsurancePolicyAuditStatusEnum,
   InsurancePolicyProductIdNumberEnum,
   InsurancePolicyListPayStatusEnum,
diff --git a/src/views/Home/components/InsureInstructionsDialog.vue b/src/views/Home/components/InsureInstructionsDialog.vue
index 588ff25..7dbb543 100644
--- a/src/views/Home/components/InsureInstructionsDialog.vue
+++ b/src/views/Home/components/InsureInstructionsDialog.vue
@@ -8,6 +8,7 @@
     width="600px"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
+    @close="goTo(`step0`)"
   >
     <div class="insureInstructionsDialog-content">
       <!-- <img :src="IconTaipingLogo" alt="" class="logo" /> -->
@@ -97,7 +98,7 @@
 
 const visibleFiles = ref(false);
 
-const { isCurrent, goToNext, goToPrevious, isLast, isFirst } = useStepper(
+const { isCurrent, goToNext, goToPrevious, isLast, isFirst, goTo } = useStepper(
   InsuranceTempList.map((x, index) => `step${index}`)
 );
 </script>
diff --git a/src/views/Home/components/InsureOrderInfoView.vue b/src/views/Home/components/InsureOrderInfoView.vue
index 8772799..4c31188 100644
--- a/src/views/Home/components/InsureOrderInfoView.vue
+++ b/src/views/Home/components/InsureOrderInfoView.vue
@@ -94,8 +94,26 @@
             </QueryFilterItem>
           </template>
           <template #btn>
-            <template v-if="detail.status === InsurancePolicyStatusEnum.WaitEffect">
-              <template v-if="!detail.productOnline">
+            <template v-if="detail.productOnline">
+              <el-button
+                v-if="detail.auditStatus === InsurancePolicyAuditStatusEnum.Pass"
+                @click="handleSupplySubmit()"
+                type="primary"
+                >琛ユ彁</el-button
+              >
+              <template v-if="detail.status !== InsurancePolicyStatusEnum.WaitEffect">
+                <el-button @click="handleExport(InsuranceDetailStatusEnum.Effecting)" type="primary"
+                  >瀵煎嚭鍦ㄤ繚浜哄憳</el-button
+                >
+                <el-button @click="handleExport(InsuranceDetailStatusEnum.Fail)" type="primary"
+                  >瀵煎嚭閿欒浜哄憳</el-button
+                >
+                <el-button @click="handleGoStampFiles(id)" type="primary">涓嬭浇淇濆崟</el-button>
+                <el-button @click="handleGoDownloadInvoice(id)" type="primary">涓嬭浇鍙戠エ</el-button>
+              </template>
+            </template>
+            <template v-else>
+              <template v-if="detail.status === InsurancePolicyStatusEnum.WaitEffect">
                 <el-button @click="handleTemplateDownload()" link type="primary"
                   >妯℃澘涓嬭浇</el-button
                 >
@@ -113,18 +131,6 @@
                   </template>
                 </BlFileUpload>
                 <el-button @click="handleClear()" type="primary">娓呯┖鏁版嵁</el-button>
-              </template>
-            </template>
-            <template v-else>
-              <template v-if="detail.productOnline">
-                <el-button @click="handleExport(InsuranceDetailStatusEnum.Effecting)" type="primary"
-                  >瀵煎嚭鍦ㄤ繚浜哄憳</el-button
-                >
-                <el-button @click="handleExport(InsuranceDetailStatusEnum.Fail)" type="primary"
-                  >瀵煎嚭閿欒浜哄憳</el-button
-                >
-                <el-button @click="handleGoStampFiles(id)" type="primary">涓嬭浇淇濆崟</el-button>
-                <el-button @click="handleGoDownloadInvoice(id)" type="primary">涓嬭浇鍙戠エ</el-button>
               </template>
               <template v-else>
                 <el-button @click="handleExport(null)" type="primary">涓嬭浇浜哄憳娓呭崟</el-button>
@@ -145,6 +151,7 @@
       </ChunkCell>
       <ChangePersonInfoDialog v-bind="dialogProps"></ChangePersonInfoDialog>
       <InsureClaimDetailDialog v-bind="dialogInsureClaimProps"></InsureClaimDetailDialog>
+      <UploadInsurePersonDialog v-bind="dialogSupplyProps" isSupply />
     </AppContainer>
   </LoadingLayout>
 </template>
@@ -190,7 +197,12 @@
 import { downloadFile, downloadFileByUrl, Message, OrderInputType } from '@bole-core/core';
 import { setOSSLink } from '@/utils';
 import dayjs from 'dayjs';
-import { useInsureActions } from '@/hooks';
+import {
+  useInsureActions,
+  useInsureProductSchemeAllList,
+  useUserInsureProductSetting,
+} from '@/hooks';
+import UploadInsurePersonDialog from './UploadInsurePersonDialog.vue';
 
 defineOptions({
   name: 'InsureOrderInfoView',
@@ -548,6 +560,38 @@
     }
   } catch (error) {}
 }
+
+const { getInsureProductIdByIdNumber } = useUserInsureProductSetting();
+const { getInsureProductSchemeByCode } = useInsureProductSchemeAllList({
+  insureProductId: computed(() => getInsureProductIdByIdNumber(detail.value.productIdNumber)),
+});
+
+function handleSupplySubmit() {
+  handleSupplyAdd({
+    serialNum: detail.value.serialNum,
+    productIdNumber: detail.value.productIdNumber,
+    productSchemeIdNumber: getInsureProductSchemeByCode(detail.value.productSchemeCode)?.idNumber,
+    effectStartTime: dayjs().add(1, 'day').format('YYYY-MM-DD'),
+  });
+}
+
+const {
+  dialogProps: dialogSupplyProps,
+  handleAdd: handleSupplyAdd,
+  editForm: supplyForm,
+} = useFormDialog({
+  onConfirm: supplySubmit,
+  defaultFormParams: {
+    serialNum: '',
+    url: [] as UploadUserFile[],
+    productIdNumber: '',
+    productSchemeIdNumber: '',
+    effectStartTime: dayjs().add(1, 'day').format('YYYY-MM-DD'),
+  },
+});
+
+// TODO 琛ユ彁
+async function supplySubmit() {}
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/Home/components/UploadInsurePersonDialog.vue b/src/views/Home/components/UploadInsurePersonDialog.vue
index 168ac0b..6be682b 100644
--- a/src/views/Home/components/UploadInsurePersonDialog.vue
+++ b/src/views/Home/components/UploadInsurePersonDialog.vue
@@ -25,6 +25,7 @@
           enum-label-key="productName"
           enum-value-key="productIdNumber"
           @change="handleProductChange"
+          :disabled="isSupply"
         ></ProFormSelect>
       </ProFormItemV2>
       <ProFormItemV2
@@ -40,6 +41,7 @@
           v-model="form.productSchemeIdNumber"
           enum-label-key="name"
           enum-value-key="idNumber"
+          :disabled="isSupply"
         ></ProFormSelect>
       </ProFormItemV2>
       <ProFormItemV2 label="鎵规鍙凤細" prop="serialNum" :check-rules="[{ message: '璇疯緭鍏ユ壒娆″彿' }]">
@@ -47,6 +49,7 @@
           placeholder="璇疯緭鍏ユ壒娆″彿"
           v-model.trim="innerForm.serialNum"
           :maxlength="30"
+          :disabled="isSupply"
         ></ProFormText>
       </ProFormItemV2>
       <ProFormItemV2
@@ -60,6 +63,7 @@
           value-format="YYYY-MM-DD"
           placeholder="璇烽�夋嫨璧蜂繚鏃ユ湡"
           :disabled-date="disabledStartDate"
+          :disabled="isSupply"
         ></ProFormDatePicker>
       </ProFormItemV2>
       <ProFormItemV2
@@ -118,10 +122,12 @@
     productSchemeIdNumber: string;
     effectStartTime: string;
   };
+  isSupply?: boolean;
 };
 
 const props = withDefaults(defineProps<Props>(), {
   modelValue: false,
+  isSupply: false,
 });
 
 const emit = defineEmits<{

--
Gitblit v1.9.1