From 80a2014c36cec818464a9c7f090eadf0b4a14b8c Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 18 六月 2026 09:55:15 +0800
Subject: [PATCH] 社保方案保险类型和基数必填

---
 src/views/personnelManagement/socialSecuritySet/components/formDia.vue |   36 ++++++++++++++++++++++++++++++------
 1 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/src/views/personnelManagement/socialSecuritySet/components/formDia.vue b/src/views/personnelManagement/socialSecuritySet/components/formDia.vue
index 985a6b1..a8cba91 100644
--- a/src/views/personnelManagement/socialSecuritySet/components/formDia.vue
+++ b/src/views/personnelManagement/socialSecuritySet/components/formDia.vue
@@ -90,7 +90,9 @@
                     </div>
                     <el-form-item :prop="'insuranceBenefits.' + index + '.insuranceType'"
                                   label="淇濋櫓绫诲瀷锛�"
-                                  label-width="100px">
+                                  label-width="100px"
+                                  :rules="[{ required: true, message: '璇烽�夋嫨淇濋櫓绫诲瀷', trigger: 'blur' }]"
+                    >
                       <el-select v-model="item.insuranceType"
                                  placeholder="璇烽�夋嫨"
                                  clearable
@@ -103,7 +105,9 @@
                       </el-select>
                     </el-form-item>
                     <el-form-item label="缂磋垂鍩烘暟锛�"
-                                  label-width="100px">
+                                  label-width="100px"
+                                  :prop="'insuranceBenefits.' + index + '.paymentBase'"
+                                  :rules="[{ validator: validatePaymentBase, trigger: 'blur' }]">
                       <div class="base-salary-wrap">
                         <el-input v-model="item.paymentBase"
                                   placeholder="鏍规嵁鍩烘湰宸ヨ祫缂寸撼"
@@ -113,14 +117,16 @@
                                   :disabled="isDetail || item.useBasicSalary"
                                   @input="handlePaymentBaseInput(item)" />
                         <el-checkbox v-model="item.useBasicSalary"
-                                     @change="handleUseBasicSalaryChange(item)"
+                                     @change="(val) => handleUseBasicSalaryChange(item, index)"
                                      :disabled="isDetail">
                           璋冪敤鍩烘湰宸ヨ祫
                         </el-checkbox>
                       </div>
                     </el-form-item>
                     <el-form-item label="涓汉缂磋垂姣斾緥锛�"
-                                  label-width="100px">
+                                  label-width="100px"
+                                  :prop="'insuranceBenefits.' + index + '.personalRatio'"
+                                  :rules="[{ required: true, message: '璇疯緭鍏ヤ釜浜虹即璐规瘮渚�', trigger: 'blur' }]">
                       <div class="personal-ratio-wrap">
                         <el-input v-model="item.personalRatio"
                                   placeholder="璇疯緭鍏�"
@@ -259,10 +265,13 @@
     form.value.insuranceBenefits.splice(index, 1);
   };
 
-  const handleUseBasicSalaryChange = item => {
+  const handleUseBasicSalaryChange = (item, index) => {
     if (item.useBasicSalary) {
       item.paymentBase = "";
     }
+    nextTick(() => {
+      formRef.value?.validateField(`insuranceBenefits.${index}.paymentBase`);
+    });
   };
 
   const handlePaymentBaseInput = item => {
@@ -286,6 +295,21 @@
       if (value < 0) {
         item.personalFixed = "";
       }
+    }
+  };
+
+  const validatePaymentBase = (rule, value, callback) => {
+    const match = rule.field.match(/insuranceBenefits\.(\d+)\.paymentBase/);
+    if (match) {
+      const index = parseInt(match[1], 10);
+      const item = form.value.insuranceBenefits[index];
+      if (item && !item.useBasicSalary && (!value || value === "")) {
+        callback(new Error("璇疯緭鍏ョ即璐瑰熀鏁�"));
+      } else {
+        callback();
+      }
+    } else {
+      callback();
     }
   };
 
@@ -477,4 +501,4 @@
     color: #606266;
     font-size: 14px;
   }
-</style>
+</style>
\ No newline at end of file

--
Gitblit v1.9.3