From 9c2c8534862d5a843b1e8766bd4bf171ac295fb3 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期五, 12 十二月 2025 16:37:07 +0800
Subject: [PATCH] feat: 保险

---
 src/views/EmploymentManage/components/AddOrEditEmploymentView.vue |   92 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 82 insertions(+), 10 deletions(-)

diff --git a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
index 41f34b8..98ba258 100644
--- a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
+++ b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
@@ -13,6 +13,7 @@
               :value-enum="supplierEnterpriseSelect"
               placeholder="璇烽�夋嫨渚涘簲鍟�"
               :disabled="isEdit"
+              @change="supplierEnterpriseChange"
             ></ProFormSelect>
           </ProFormItemV2>
           <ProFormCol>
@@ -41,6 +42,7 @@
                   :max="999999999999"
                   :precision="0"
                   unit="浜�"
+                  @change="calcTaskTotalServiceFee"
                 ></ProFormInputNumber>
               </ProFormItemV2>
             </ProFormColItem>
@@ -70,6 +72,7 @@
                   :showExtra="true"
                   :button-style="false"
                   :disabled="feeCannotEdit"
+                  @change="calcTaskTotalServiceFee"
                 >
                   <template #extra>
                     <ProFormInputNumber
@@ -81,6 +84,7 @@
                       :max="999999999999"
                       :unit="EnumBillingMethodUnitText[form.billingMethod]"
                       :disabled="feeCannotEdit"
+                      @change="calcTaskTotalServiceFee"
                     ></ProFormInputNumber>
                   </template>
                 </RadioWithExtra>
@@ -105,6 +109,7 @@
                     :max="999999999999"
                     unit="灏忔椂/澶�"
                     :disabled="feeCannotEdit"
+                    @change="calcTaskTotalServiceFee"
                   ></ProFormInputNumber>
                 </ProFormItemV2>
               </ProFormColItem>
@@ -146,6 +151,7 @@
                   :max="999999999999"
                   unit="浠�"
                   :disabled="feeCannotEdit"
+                  @change="calcTaskTotalServiceFee"
                 ></ProFormInputNumber>
               </ProFormItemV2>
             </ProFormColItem>
@@ -378,6 +384,21 @@
               </ProFormItemV2>
             </ProFormColItem>
           </ProFormCol>
+          <ProFormItemV2
+            label="淇濋櫓浜у搧:"
+            prop="insuranceProductId"
+            :check-rules="[{ message: '璇烽�夋嫨淇濋櫓浜у搧' }]"
+            v-if="
+              form.checkReceiveMethods.includes(EnumTaskCheckReceiveMethod.CheckIn) &&
+              form.isConfiguredInsurance
+            "
+          >
+            <ProFormSelect
+              v-model="form.insuranceProductId"
+              :value-enum="enterpriseInsuranceProductSelect"
+              @change="calcTaskTotalServiceFee"
+            ></ProFormSelect>
+          </ProFormItemV2>
           <ProFormItemV2 label="棰勮鏈嶅姟璐规�婚:" prop="totalServiceFee">
             {{ `${toThousand(form.totalServiceFee)}鍏僠 }}
           </ProFormItemV2>
@@ -435,7 +456,7 @@
   EnumSettlementCycleDateWeekArray,
   EnumSettlementCycle,
   EnumTaskCheckReceiveMethodText,
-  EnumEnterpriseWalletAccessText,
+  EnumTaskCheckReceiveMethod,
 } from '@/constants';
 import { format, FormValidator, toThousand } from '@/utils';
 import dayjs from 'dayjs';
@@ -518,9 +539,16 @@
   applyTime: [] as unknown as ModelValueType,
   settlementAccess: '' as any as EnumEnterpriseWalletAccess,
   totalServiceFee: 0,
+
+  insuranceProductId: '',
+  isConfiguredInsurance: false,
 });
 
 const { settlementAccessList } = useEnterpriseWalletAccessSelect({
+  supplierEnterpriseId: computed(() => form.supplierEnterpriseId),
+});
+
+const { enterpriseInsuranceProductSelect } = useEnterpriseInsuranceProductSelect({
   supplierEnterpriseId: computed(() => form.supplierEnterpriseId),
 });
 
@@ -577,6 +605,10 @@
     ];
     form.settlementAccess = data.settlementAccess;
     form.totalServiceFee = data.estimatedServiceFee;
+
+    form.insuranceProductId = data.insuranceProductId ?? '';
+
+    supplierEnterpriseChange();
   },
   enabled: isEdit,
 });
@@ -587,18 +619,13 @@
 
 function handleTimeChange() {
   form.applyTime = [] as unknown as ModelValueType;
+  calcTaskTotalServiceFee();
 }
 
 function handleBack() {
   closeViewPush(route, {
     name: 'TaskManageList',
   });
-}
-
-function calculateMonthInterval(startDate, endDate) {
-  const diffInDays = dayjs(endDate).diff(startDate, 'day');
-  const monthInterval = Math.ceil(diffInDays / 30);
-  return monthInterval > 15 ? Math.ceil(monthInterval / 30) : monthInterval;
 }
 
 const productFormRef = ref<FormInstance>();
@@ -613,17 +640,58 @@
   });
 }
 
+// function calculateMonthInterval(startDate, endDate) {
+//   const diffInDays = dayjs(endDate).diff(startDate, 'day');
+//   const monthInterval = Math.ceil(diffInDays / 30);
+//   return monthInterval > 15 ? Math.ceil(monthInterval / 30) : monthInterval;
+// }
+
+// const totalServiceFee = computed(() => {
+//   const monthInterval = calculateMonthInterval(form.time[0], form.time[1]);
+//   const dayInterval = dayjs(form.time[1]).diff(dayjs(form.time[0]), 'day');
+//   switch (form.billingMethod) {
+//     case EnumBillingMethod.Month:
+//       return monthInterval * (form.serviceFee ?? 0) * (form.needPeopleNumber ?? 0);
+//     case EnumBillingMethod.Day:
+//       return dayInterval * (form.serviceFee ?? 0) * (form.needPeopleNumber ?? 0);
+//     case EnumBillingMethod.Hour:
+//       return (
+//         dayInterval *
+//         (form.verifyWorkHours ?? 0) *
+//         (form.serviceFee ?? 0) *
+//         (form.needPeopleNumber ?? 0)
+//       );
+//     case EnumBillingMethod.Piece:
+//       return (form.totalPieceQuantity ?? 0) * (form.serviceFee ?? 0);
+//     default:
+//       return form.totalServiceFee;
+//   }
+// });
+
+function supplierEnterpriseChange() {
+  if (form.supplierEnterpriseId) {
+    form.isConfiguredInsurance = supplierEnterpriseSelect.value?.find(
+      (item) => item.value === form.supplierEnterpriseId
+    )?.data?.isConfiguredInsurance;
+  }
+}
+
 async function calcTaskTotalServiceFee() {
   try {
     let params: API.CalcTaskTotalServiceFeeCommand = {
       billingMethod: form.billingMethod,
-      serviceFee: form.serviceFee,
-      verifyWorkHours: form.verifyWorkHours,
+      serviceFee: form.serviceFee ?? 0,
+      verifyWorkHours: form.verifyWorkHours ?? 0,
       totalPieceQuantity: form.totalPieceQuantity,
-      needPeopleNumber: form.needPeopleNumber,
+      needPeopleNumber: form.needPeopleNumber ?? 0,
       beginTime: dayjs(form.time[0]).format('YYYY-MM-DD 00:00:00'),
       endTime: dayjs(form.time[1]).format('YYYY-MM-DD 23:59:59'),
+      supplierEnterpriseId: form.supplierEnterpriseId,
+      checkReceiveMethods: form.checkReceiveMethods,
     };
+    if (form.insuranceProductId) {
+      params.insuranceProductId = form.insuranceProductId;
+    }
     let res = await taskServices.calcTaskTotalServiceFee(params);
     if (res) {
       form.totalServiceFee = res.totalServiceFee;
@@ -663,7 +731,11 @@
       description: form.description,
       checkReceiveMethods: form.checkReceiveMethods,
       settlementAccess: form.settlementAccess,
+      insuranceProductId: form.insuranceProductId,
     };
+    if (form.billingMethod !== EnumBillingMethod.Face) {
+      params.serviceFee = form.serviceFee;
+    }
     if (isEdit) {
       params.id = id;
     }

--
Gitblit v1.9.1