From c62745c757f758527136e62f1d9d8e576e7bd72f Mon Sep 17 00:00:00 2001
From: ZN <zhang_12370@163.com>
Date: 星期一, 09 三月 2026 10:42:20 +0800
Subject: [PATCH] Merge branch 'dev_New' of http://114.132.189.42:9002/r/product-inventory-management into dev_New

---
 src/views/personnelManagement/socialSecuritySet/components/formDia.vue |  178 ++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 139 insertions(+), 39 deletions(-)

diff --git a/src/views/personnelManagement/socialSecuritySet/components/formDia.vue b/src/views/personnelManagement/socialSecuritySet/components/formDia.vue
index 3feab2d..c473f17 100644
--- a/src/views/personnelManagement/socialSecuritySet/components/formDia.vue
+++ b/src/views/personnelManagement/socialSecuritySet/components/formDia.vue
@@ -15,7 +15,10 @@
           <el-col :span="8">
             <el-form-item label="閫傜敤浜哄憳锛�" prop="deptIds">
               <div class="dept-checkbox-wrap">
-                <el-checkbox-group v-model="form.deptIds">
+                <el-checkbox-group
+                  v-model="form.deptIds"
+                  :disabled="isDetail"
+                >
                   <div
                     v-for="dept in deptList"
                     :key="dept.deptId"
@@ -41,7 +44,12 @@
                 <el-icon class="card-collapse"><ArrowUp /></el-icon>
               </template>
               <el-form-item label="鏂规鏍囬锛�" prop="title">
-                <el-input v-model="form.title" placeholder="璇疯緭鍏�" clearable />
+                <el-input
+                  v-model="form.title"
+                  placeholder="璇疯緭鍏�"
+                  clearable
+                  :disabled="isDetail"
+                />
               </el-form-item>
               <el-form-item label="澶囨敞锛�" prop="remark">
                 <el-input
@@ -50,6 +58,7 @@
                   :rows="2"
                   placeholder="璇疯緭鍏�"
                   clearable
+                  :disabled="isDetail"
                 />
               </el-form-item>
             </el-card>
@@ -58,7 +67,12 @@
             <el-card class="form-card" shadow="never">
               <template #header>
                 <span class="card-title"><span class="card-title-line">|</span> 淇濋櫓绫诲瀷</span>
-                <el-button type="primary" size="small" @click="addInsuranceBenefit">
+                <el-button
+                  v-if="!isDetail"
+                  type="primary"
+                  size="small"
+                  @click="addInsuranceBenefit"
+                >
                   娣诲姞淇濋櫓绂忓埄
                 </el-button>
               </template>
@@ -72,7 +86,7 @@
                     <div class="insurance-benefit-title">
                       淇濋櫓绂忓埄{{ index + 1 }}
                       <el-button
-                        v-if="form.insuranceBenefits.length > 1"
+                        v-if="!isDetail && form.insuranceBenefits.length > 1"
                         type="danger"
                         link
                         size="small"
@@ -92,6 +106,7 @@
                         placeholder="璇烽�夋嫨"
                         clearable
                         style="width: 100%"
+                        :disabled="isDetail"
                       >
                         <el-option
                           v-for="opt in insuranceTypeOptions"
@@ -102,9 +117,23 @@
                       </el-select>
                     </el-form-item>
                     <el-form-item label="缂磋垂鍩烘暟锛�" label-width="100px">
-                      <div class="checkbox-group-inline">
-                        <el-checkbox v-model="item.baseOnSalary">鏍规嵁鍩烘湰宸ヨ祫缂寸撼</el-checkbox>
-                        <el-checkbox v-model="item.useBasicSalary">璋冪敤鍩烘湰宸ヨ祫</el-checkbox>
+                      <div class="base-salary-wrap">
+                        <el-input
+                          v-model="item.paymentBase"
+                          placeholder="鏍规嵁鍩烘湰宸ヨ祫缂寸撼"
+                          clearable
+                          style="width: 120px"
+                          type="number"
+                          :disabled="isDetail || item.useBasicSalary"
+                          @input="handlePaymentBaseInput(item)"
+                        />
+                        <el-checkbox
+                          v-model="item.useBasicSalary"
+                          @change="handleUseBasicSalaryChange(item)"
+                          :disabled="isDetail"
+                        >
+                          璋冪敤鍩烘湰宸ヨ祫
+                        </el-checkbox>
                       </div>
                     </el-form-item>
                     <el-form-item label="涓汉缂磋垂姣斾緥锛�" label-width="100px">
@@ -115,6 +144,7 @@
                           clearable
                           style="width: 100px"
                           type="number"
+                          :disabled="isDetail"
                         />
                         <span class="ratio-unit">(%)</span>
                         <span class="ratio-plus">+</span>
@@ -124,6 +154,7 @@
                           clearable
                           style="width: 100px"
                           type="number"
+                          :disabled="isDetail"
                         />
                       </div>
                     </el-form-item>
@@ -139,15 +170,11 @@
 </template>
 
 <script setup>
-import { ref, reactive, toRefs, getCurrentInstance, nextTick } from "vue";
+import { ref, reactive, toRefs, getCurrentInstance, nextTick, computed } from "vue";
 import FormDialog from "@/components/Dialog/FormDialog.vue";
 import { ArrowUp } from "@element-plus/icons-vue";
 import { listDept } from "@/api/system/dept.js";
-import {
-  socialSecurityInfo,
-  socialSecurityAdd,
-  socialSecurityUpdate,
-} from "@/api/personnelManagement/socialSecuritySet.js";
+import { socialSecurityAdd, socialSecurityUpdate } from "@/api/personnelManagement/socialSecuritySet.js";
 
 const emit = defineEmits(["close"]);
 const { proxy } = getCurrentInstance();
@@ -157,22 +184,28 @@
 const formRef = ref(null);
 const deptList = ref([]);
 
+const isDetail = computed(() => operationType.value === "detail");
+
 const dialogTitle = () =>
-  operationType.value === "add" ? "鏂板鏂规" : "缂栬緫鏂规";
+  operationType.value === "add"
+    ? "鏂板鏂规"
+    : operationType.value === "edit"
+    ? "缂栬緫鏂规"
+    : "鏂规璇︽儏";
 
 // 淇濋櫓绫诲瀷閫夐」锛堝彲鎸夊瓧鍏告浛鎹級
 const insuranceTypeOptions = [
-  { label: "鍏昏�佷繚闄�", value: "pension" },
-  { label: "鍖荤枟淇濋櫓", value: "medical" },
-  { label: "澶变笟淇濋櫓", value: "unemployment" },
-  { label: "宸ヤ激淇濋櫓", value: "work_injury" },
-  { label: "鐢熻偛淇濋櫓", value: "maternity" },
+  { label: "鍏昏�佷繚闄�", value: "鍏昏�佷繚闄�" },
+  { label: "鍖荤枟淇濋櫓", value: "鍖荤枟淇濋櫓" },
+  { label: "澶变笟淇濋櫓", value: "澶变笟淇濋櫓" },
+  { label: "宸ヤ激淇濋櫓", value: "宸ヤ激淇濋櫓" },
+  { label: "鐢熻偛淇濋櫓", value: "鐢熻偛淇濋櫓" },
 ];
 
 const defaultBenefit = () => ({
   _key: Math.random().toString(36).slice(2),
   insuranceType: "",
-  baseOnSalary: false,
+  paymentBase: "",
   useBasicSalary: false,
   personalRatio: "",
   personalFixed: "",
@@ -231,6 +264,18 @@
   form.value.insuranceBenefits.splice(index, 1);
 };
 
+const handleUseBasicSalaryChange = (item) => {
+  if (item.useBasicSalary) {
+    item.paymentBase = "";
+  }
+};
+
+const handlePaymentBaseInput = (item) => {
+  if (item.paymentBase !== "" && item.paymentBase != null) {
+    item.useBasicSalary = false;
+  }
+};
+
 const resetForm = () => {
   form.value = {
     id: undefined,
@@ -246,32 +291,77 @@
   dialogFormVisible.value = true;
   loadDeptList();
   resetForm();
-  if (type === "edit" && row?.id) {
-    socialSecurityInfo(row.id).then((res) => {
-      const d = res.data || {};
-      form.value.id = d.id;
-      form.value.title = d.title;
-      form.value.remark = d.remark ?? "";
-      form.value.deptIds = d.deptIds ?? [];
-      form.value.insuranceBenefits =
-        (d.insuranceBenefits && d.insuranceBenefits.length)
-          ? d.insuranceBenefits.map((b) => ({
-              ...b,
-              _key: b._key || Math.random().toString(36).slice(2),
-            }))
-          : [defaultBenefit()];
-    });
+  if ((type === "edit" || type === "detail") && row) {
+    const d = row || {};
+    form.value.id = d.id;
+    form.value.title = d.title;
+    form.value.remark = d.remark ?? "";
+    // deptIds 鍚庣鍙兘鏄�楀彿鍒嗛殧瀛楃涓叉垨鏁扮粍锛岃繖閲岀粺涓�杞负鏁扮粍骞跺敖閲忚繕鍘熸暟鍊肩被鍨�
+    if (d.deptIds) {
+      form.value.deptIds = String(d.deptIds)
+        .split(",")
+        .filter((v) => v !== "")
+        .map((v) => {
+          const num = Number(v);
+          return Number.isNaN(num) ? v : num;
+        });
+    } else {
+      form.value.deptIds = [];
+    }
+    const detailList = d.schemeInsuranceDetailList || [];
+    form.value.insuranceBenefits =
+      detailList.length > 0
+        ? detailList.map((b) => ({
+            _key: Math.random().toString(36).slice(2),
+            insuranceType: b.insuranceType || "",
+            paymentBase: b.paymentBase ?? "",
+            useBasicSalary: b.useBasicSalary === 2,
+            personalRatio: b.personalRatio ?? "",
+            personalFixed: b.personalFixed ?? "",
+          }))
+        : [defaultBenefit()];
   }
 };
 
 const submitForm = () => {
+  // 璇︽儏妯″紡涓嬩笉鎻愪氦锛屽彧鍏抽棴寮圭獥
+  if (operationType.value === "detail") {
+    closeDia();
+    return;
+  }
   formRef.value?.validate((valid) => {
     if (!valid) return;
+    const deptIds =
+      Array.isArray(form.value.deptIds) && form.value.deptIds.length
+        ? form.value.deptIds.join(",")
+        : "";
+    const schemeInsuranceDetailList = (form.value.insuranceBenefits || []).map(
+      ({ _key, ...rest }) => ({
+        ...rest,
+        useBasicSalary: rest.useBasicSalary ? 2 : 1,
+      })
+    );
+    const insuranceTypes = schemeInsuranceDetailList
+      .map((item) => item.insuranceType)
+      .filter((v) => v)
+      .join(",");
+    // 閮ㄩ棬鍚嶇О锛屽涓娇鐢ㄩ�楀彿闅斿紑锛堟牴鎹�変腑鐨� deptIds 涓� deptList 璁$畻锛�
+    const deptNames = (deptList.value || [])
+      .filter((d) =>
+        (form.value.deptIds || []).some(
+          (id) => String(id) === String(d.deptId)
+        )
+      )
+      .map((d) => d.deptName)
+      .join(",");
     const submitData = {
-      ...form.value,
-      insuranceBenefits: form.value.insuranceBenefits.map(
-        ({ _key, ...rest }) => rest
-      ),
+      id: form.value.id,
+      title: form.value.title,
+      remark: form.value.remark ?? "",
+      deptIds,
+      insuranceTypes,
+      deptNames,
+      schemeInsuranceDetailList,
     };
     if (operationType.value === "add") {
       socialSecurityAdd(submitData).then(() => {
@@ -356,6 +446,16 @@
   flex-wrap: wrap;
   gap: 16px;
 }
+.base-salary-wrap {
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  gap: 8px;
+}
+.base-salary-text {
+  color: #606266;
+  font-size: 14px;
+}
 .personal-ratio-wrap {
   display: flex;
   align-items: center;

--
Gitblit v1.9.3