From 2d3530a7c11557a40807ad7c0b9e302ce6ce3a9f Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期五, 28 八月 2026 10:16:32 +0800
Subject: [PATCH] feat: 综合业务模块页面重构与交互完善

---
 src/views/qualityManagement/finalInspection/components/formDia.vue |  214 +++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 189 insertions(+), 25 deletions(-)

diff --git a/src/views/qualityManagement/finalInspection/components/formDia.vue b/src/views/qualityManagement/finalInspection/components/formDia.vue
index 94801ff..b2b271f 100644
--- a/src/views/qualityManagement/finalInspection/components/formDia.vue
+++ b/src/views/qualityManagement/finalInspection/components/formDia.vue
@@ -169,13 +169,57 @@
           </el-col>
         </el-row>
       </el-form>
+      <el-row class="mb8" v-if="!isViewMode">
+        <el-button type="primary" plain icon="Plus" @click="handleAddRow">鏂板涓�琛�</el-button>
+      </el-row>
       <PIMTable rowKey="id"
                 :column="tableColumn"
                 :tableData="tableData"
                 :tableLoading="tableLoading"
                 height="400">
+        <template #parameterItemSlot="{ row }">
+          <span v-if="isViewMode">{{ row.parameterItem }}</span>
+          <el-input v-else v-model="row.parameterItem" placeholder="璇疯緭鍏�" />
+        </template>
+        <template #parameterTypeSlot="{ row }">
+          <span v-if="isViewMode">{{ row.parameterType === 1 ? '鏁板瓧' : row.parameterType === 0 ? '鏂囧瓧' : '' }}</span>
+          <el-select v-else v-model="row.parameterType" @change="handleTypeChange(row)">
+            <el-option label="鏂囧瓧" :value="0" />
+            <el-option label="鏁板瓧" :value="1" />
+          </el-select>
+        </template>
+        <template #maxValueSlot="{ row }">
+          <span v-if="isViewMode">{{ row.maxValue }}</span>
+          <el-input-number v-else v-model="row.maxValue" :controls="false" :disabled="row.parameterType !== 1" style="width: 100%" />
+        </template>
+        <template #minValueSlot="{ row }">
+          <span v-if="isViewMode">{{ row.minValue }}</span>
+          <el-input-number v-else v-model="row.minValue" :controls="false" :disabled="row.parameterType !== 1" style="width: 100%" />
+        </template>
+        <template #unitSlot="{ row }">
+          <span v-if="isViewMode">{{ row.unit }}</span>
+          <el-input v-else v-model="row.unit" />
+        </template>
+        <template #standardValueSlot="{ row }">
+          <span v-if="isViewMode">{{ row.standardValue }}</span>
+          <el-input v-else v-model="row.standardValue" :disabled="row.parameterType !== 0" />
+        </template>
+        <template #controlValueSlot="{ row }">
+          <span v-if="isViewMode">{{ row.controlValue }}</span>
+          <el-input v-else v-model="row.controlValue" />
+        </template>
+        <template #operationSlot="{ row }">
+          <el-button v-if="!isViewMode" type="danger" link @click="removeRow(row)">鍒犻櫎</el-button>
+        </template>
         <template #slot="{ row }">
-          <el-input v-model="row.testValue"
+          <el-input-number v-if="row.parameterType === 1"
+                           v-model="row.testValue"
+                           :controls="false"
+                           clearable
+                           :disabled="isViewMode"
+                           style="width: 100%" />
+          <el-input v-else
+                    v-model="row.testValue"
                     clearable
                     :disabled="isViewMode" />
         </template>
@@ -203,6 +247,7 @@
     computed,
     getCurrentInstance,
     nextTick,
+    watch
   } from "vue";
   import { getOptions } from "@/api/procurementManagement/procurementLedger.js";
   import { modelList, productTreeList } from "@/api/basicData/product.js";
@@ -267,36 +312,121 @@
   });
   const supplierList = ref([]);
   const productOptions = ref([]);
-  const tableColumn = ref([
-    {
-      label: "鎸囨爣",
-      prop: "parameterItem",
-    },
-    {
-      label: "鍗曚綅",
-      prop: "unit",
-    },
-    {
-      label: "鏍囧噯鍊�",
-      prop: "standardValue",
-    },
-    {
-      label: "鍐呮帶鍊�",
-      prop: "controlValue",
-    },
-    {
-      label: "妫�楠屽��",
-      prop: "testValue",
-      dataType: "slot",
-      slot: "slot",
-    },
-  ]);
+  const tableColumn = computed(() => {
+    const cols = [
+      {
+        label: "鎸囨爣",
+        prop: "parameterItem",
+        dataType: "slot",
+        slot: "parameterItemSlot"
+      },
+      {
+        label: "鍙傛暟绫诲瀷",
+        prop: "parameterType",
+        dataType: "slot",
+        slot: "parameterTypeSlot",
+        width: "120"
+      },
+      {
+        label: "鏈�澶у��",
+        prop: "maxValue",
+        dataType: "slot",
+        slot: "maxValueSlot",
+        width: "100"
+      },
+      {
+        label: "鏈�灏忓��",
+        prop: "minValue",
+        dataType: "slot",
+        slot: "minValueSlot",
+        width: "100"
+      },
+      {
+        label: "鍗曚綅",
+        prop: "unit",
+        dataType: "slot",
+        slot: "unitSlot",
+        width: "100"
+      },
+      {
+        label: "鏍囧噯鍊�",
+        prop: "standardValue",
+        dataType: "slot",
+        slot: "standardValueSlot"
+      },
+      {
+        label: "鍐呮帶鍊�",
+        prop: "controlValue",
+        dataType: "slot",
+        slot: "controlValueSlot"
+      },
+      {
+        label: "妫�楠屽��",
+        prop: "testValue",
+        dataType: "slot",
+        slot: "slot",
+      }
+    ];
+    if (!isViewMode.value) {
+      cols.push({
+        label: "鎿嶄綔",
+        prop: "operation",
+        dataType: "slot",
+        slot: "operationSlot",
+        width: "80",
+        fixed: "right"
+      });
+    }
+    return cols;
+  });
   const tableData = ref([]);
   const tableLoading = ref(false);
   const userList = ref([]);
   const currentProductId = ref(0);
   const testStandardOptions = ref([]); // 鎸囨爣閫夋嫨涓嬫媺妗嗘暟鎹�
   const modelOptions = ref([]);
+
+  watch(() => tableData.value, (newVal) => {
+    if (isViewMode.value) return; 
+    if (!newVal || newVal.length === 0) return;
+    
+    let passCount = 0;
+    let failCount = 0;
+    
+    newVal.forEach(item => {
+      let isPass = false;
+      const val = item.testValue;
+      
+      if (val === null || val === undefined || val === '') {
+        isPass = false; 
+      } else if (item.parameterType === 1) {
+        const numVal = Number(val);
+        const min = Number(item.minValue);
+        const max = Number(item.maxValue);
+        if (!isNaN(numVal) && numVal >= min && numVal <= max) {
+          isPass = true;
+        }
+      } else {
+        if (String(val) === String(item.standardValue)) {
+          isPass = true;
+        }
+      }
+      
+      if (isPass) {
+        passCount++;
+      } else {
+        failCount++;
+      }
+    });
+    
+    if (failCount === 0 && passCount > 0) {
+      form.value.checkResult = "鍚堟牸";
+    } else if (passCount === 0 && failCount > 0) {
+      form.value.checkResult = "涓嶅悎鏍�";
+    } else {
+      form.value.checkResult = "閮ㄥ垎鍚堟牸";
+    }
+  }, { deep: true });
 
   // 鎵撳紑寮规
   const openDialog = async (type, row) => {
@@ -533,6 +663,10 @@
           ...item,
           id: null,
         }));
+        
+        if (tableData.value.some(item => item.parameterType === null || item.parameterType === undefined)) {
+          proxy.$modal.msgWarning("鍙傛暟绫诲瀷鏈厤缃紝璇烽厤缃寚鏍囩淮鎶ゆā鏉�");
+        }
       })
       .catch(error => {
         console.error("鑾峰彇鏍囧噯鍙傛暟澶辫触:", error);
@@ -547,6 +681,36 @@
       tableData.value = res.data;
     });
   };
+
+  const handleAddRow = () => {
+    tableData.value.push({
+      parameterItem: '',
+      parameterType: 0,
+      maxValue: undefined,
+      minValue: undefined,
+      unit: '',
+      standardValue: '',
+      controlValue: '',
+      testValue: ''
+    });
+  };
+
+  const removeRow = (row) => {
+    const index = tableData.value.indexOf(row);
+    if (index !== -1) {
+      tableData.value.splice(index, 1);
+    }
+  };
+
+  const handleTypeChange = (row) => {
+    if (row.parameterType === 0) {
+      row.maxValue = undefined;
+      row.minValue = undefined;
+    } else {
+      row.standardValue = '';
+    }
+    row.testValue = '';
+  };
   // 鍏抽棴寮规
   const closeDia = () => {
     proxy.resetForm("formRef");

--
Gitblit v1.9.3