From eecd51db2f0e1094650206fa534dd02f5de58c9c Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期一, 18 五月 2026 10:22:50 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_NEW_pro' into dev_NEW_pro

---
 src/views/qualityManagement/processInspection/components/formDia.vue |  120 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 101 insertions(+), 19 deletions(-)

diff --git a/src/views/qualityManagement/processInspection/components/formDia.vue b/src/views/qualityManagement/processInspection/components/formDia.vue
index 88c1e20..635360f 100644
--- a/src/views/qualityManagement/processInspection/components/formDia.vue
+++ b/src/views/qualityManagement/processInspection/components/formDia.vue
@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-dialog v-model="dialogFormVisible"
-               :title="operationType === 'add' ? '鏂板杩囩▼妫�楠�' : '缂栬緫杩囩▼妫�楠�'"
+               :title="operationType === 'add' ? '鏂板杩囩▼妫�楠�' : operationType === 'view' ? '鏌ョ湅杩囩▼妫�楠�' : '缂栬緫杩囩▼妫�楠�'"
                width="70%"
                @close="closeDia">
       <el-form :model="form"
@@ -16,7 +16,7 @@
               <el-select v-model="form.process"
                          placeholder="璇烽�夋嫨宸ュ簭"
                          clearable
-                         :disabled="processQuantityDisabled"
+                         :disabled="isViewMode || processQuantityDisabled"
                          style="width: 100%">
                 <el-option v-for="item in processList"
                            :key="item.name"
@@ -35,7 +35,7 @@
                               @change="getModels"
                               :data="productOptions"
                               :render-after-expand="false"
-                              :disabled="operationType === 'edit'"
+                              :disabled="isViewMode || operationType === 'edit'"
                               style="width: 100%" />
             </el-form-item>
           </el-col>
@@ -47,7 +47,7 @@
               <el-select v-model="form.productModelId"
                          placeholder="璇烽�夋嫨"
                          clearable
-                         :disabled="operationType === 'edit'"
+                         :disabled="isViewMode || operationType === 'edit'"
                          filterable
                          readonly
                          @change="handleChangeModel">
@@ -65,7 +65,8 @@
                          placeholder="璇烽�夋嫨鎸囨爣"
                          clearable
                          @change="handleTestStandardChange"
-                         style="width: 100%">
+                         style="width: 100%"
+                         :disabled="isViewMode">
                 <el-option v-for="item in testStandardOptions"
                            :key="item.id"
                            :label="item.standardName || item.standardNo"
@@ -93,7 +94,37 @@
                                placeholder="璇疯緭鍏�"
                                clearable
                                :precision="2"
-                               :disabled="processQuantityDisabled" />
+                               :disabled="isViewMode || processQuantityDisabled" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="鍚堟牸鏁伴噺锛�"
+                          prop="qualifiedQuantity">
+              <el-input-number :step="0.01"
+                               :min="0"
+                               style="width: 100%"
+                               v-model="form.qualifiedQuantity"
+                               placeholder="璇疯緭鍏�"
+                               clearable
+                               :precision="2"
+                               @change="handleQualifiedQuantityChange"
+                               :disabled="isViewMode" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="涓嶅悎鏍兼暟閲忥細"
+                          prop="unqualifiedQuantity">
+              <el-input-number :step="0.01"
+                               :min="0"
+                               style="width: 100%"
+                               v-model="form.unqualifiedQuantity"
+                               placeholder="璇疯緭鍏�"
+                               clearable
+                               :precision="2"
+                               @change="handleUnqualifiedQuantityChange"
+                               :disabled="isViewMode" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -103,17 +134,20 @@
                           prop="checkCompany">
               <el-input v-model="form.checkCompany"
                         placeholder="璇疯緭鍏�"
-                        clearable />
+                        clearable
+                        :disabled="isViewMode" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="妫�娴嬬粨鏋滐細"
                           prop="checkResult">
-              <el-select v-model="form.checkResult">
+              <el-select v-model="form.checkResult" :disabled="isViewMode">
                 <el-option label="鍚堟牸"
                            value="鍚堟牸" />
                 <el-option label="涓嶅悎鏍�"
                            value="涓嶅悎鏍�" />
+                <el-option label="閮ㄥ垎鍚堟牸"
+                           value="閮ㄥ垎鍚堟牸" />
               </el-select>
             </el-form-item>
           </el-col>
@@ -124,7 +158,8 @@
                           prop="checkName">
               <el-select v-model="form.checkName"
                          placeholder="璇烽�夋嫨"
-                         clearable>
+                         clearable
+                         :disabled="isViewMode">
                 <el-option v-for="item in userList"
                            :key="item.nickName"
                            :label="item.nickName"
@@ -141,7 +176,8 @@
                               value-format="YYYY-MM-DD"
                               format="YYYY-MM-DD"
                               clearable
-                              style="width: 100%" />
+                              style="width: 100%"
+                              :disabled="isViewMode" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -153,14 +189,18 @@
                 height="400">
         <template #slot="{ row }">
           <el-input v-model="row.testValue"
-                    clearable />
+                    clearable
+                    :disabled="isViewMode" />
         </template>
       </PIMTable>
       <template #footer>
         <div class="dialog-footer">
-          <el-button type="primary"
-                     @click="submitForm">纭</el-button>
-          <el-button @click="closeDia">鍙栨秷</el-button>
+          <template v-if="!isViewMode">
+            <el-button type="primary"
+                       @click="submitForm">纭</el-button>
+            <el-button @click="closeDia">鍙栨秷</el-button>
+          </template>
+          <el-button v-else @click="closeDia">鍏抽棴</el-button>
         </div>
       </template>
     </el-dialog>
@@ -189,6 +229,7 @@
   import { userListNoPage } from "@/api/system/user.js";
   import { qualityInspectParamInfo } from "@/api/qualityManagement/qualityInspectParam.js";
   import { list } from "@/api/productionManagement/productionProcess";
+  import qualified from "@/views/inventoryManagement/stockManagement/Qualified.vue";
   const { proxy } = getCurrentInstance();
   const emit = defineEmits(["close"]);
 
@@ -206,6 +247,8 @@
       testStandardId: "",
       unit: "",
       quantity: "",
+      qualifiedQuantity: "",
+      unqualifiedQuantity: "",
       checkCompany: "",
       checkResult: "",
     },
@@ -215,17 +258,19 @@
       checkName: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
       productId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
       productModelId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
-      testStandardId: [
-        { required: false, message: "璇烽�夋嫨鎸囨爣", trigger: "change" },
-      ],
+      testStandardId: [{ required: false, message: "璇烽�夋嫨鎸囨爣", trigger: "change" }],
       unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
       quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+      qualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
+      unqualifiedQuantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
       checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }],
       checkResult: [{ required: true, message: "璇疯緭鍏�", trigger: "change" }],
     },
   });
   const userList = ref([]);
   const { form, rules } = toRefs(data);
+  // 鏄惁涓烘煡鐪嬫ā寮�
+  const isViewMode = computed(() => operationType.value === 'view');
   // 缂栬緫鏃讹細productMainId 鎴� purchaseLedgerId 浠讳竴鏈夊�煎垯宸ュ簭銆佹暟閲忕疆鐏�
   const processQuantityDisabled = computed(() => {
     const v = form.value || {};
@@ -299,7 +344,7 @@
     tableData.value = [];
     // 鍏堢‘淇濅骇鍝佹爲宸插姞杞斤紝鍚﹀垯缂栬緫鏃朵骇鍝�/瑙勬牸鍨嬪彿鏃犳硶鍙嶆樉
     await getProductOptions();
-    if (operationType.value === "edit") {
+    if (operationType.value === "edit" || operationType.value === "view") {
       // 鍏堜繚瀛� testStandardId锛岄伩鍏嶈娓呯┖
       const savedTestStandardId = row.testStandardId;
       // 鍏堣缃〃鍗曟暟鎹紝浣嗘殏鏃舵竻绌� testStandardId锛岀瓑閫夐」鍔犺浇瀹屾垚鍚庡啀璁剧疆
@@ -400,6 +445,28 @@
       modelOptions.value.find(item => item.id == value)?.unit || "";
   };
 
+  const handleQualifiedQuantityChange = (value) => {
+    if (value === null || value === undefined) {
+      form.value.qualifiedQuantity = 0;
+      return;
+    }
+    const quantity = parseFloat(form.value.quantity) || 0;
+    const qualified = parseFloat(value) || 0;
+    form.value.qualifiedQuantity = qualified > quantity?quantity:qualified;
+    form.value.unqualifiedQuantity = Math.max(0, quantity - qualified);
+  };
+
+  const handleUnqualifiedQuantityChange = (value) => {
+    if (value === null || value === undefined) {
+      form.value.unqualifiedQuantity = 0;
+      return;
+    }
+    const quantity = parseFloat(form.value.quantity) || 0;
+    const unqualified = parseFloat(value) || 0;
+    form.value.unqualifiedQuantity = unqualified > quantity?quantity:unqualified;
+    form.value.qualifiedQuantity = Math.max(0, quantity - unqualified);
+  };
+
   const findNodeById = (nodes, productId) => {
     for (let i = 0; i < nodes.length; i++) {
       if (nodes[i].value === productId) {
@@ -440,6 +507,17 @@
             delete item.id;
           });
         }
+        // 纭繚鏁伴噺涓嶄负null
+        const quantity = parseFloat(form.value.quantity) || 0;
+        const qualified = parseFloat(form.value.qualifiedQuantity) || 0;
+        const unqualified = parseFloat(form.value.unqualifiedQuantity) || 0;
+
+        // 楠岃瘉鏁伴噺鍏崇郴
+        if (qualified + unqualified !== quantity) {
+          proxy.$modal.msgError("鍚堟牸鏁伴噺涓庝笉鍚堟牸鏁伴噺涔嬪拰蹇呴』绛変簬鎬绘暟閲�");
+          return;
+        }
+
         const data = {
           ...form.value,
           process: processName, // 淇濈暀 process 瀛楁浠ュ吋瀹瑰悗绔�
@@ -491,6 +569,10 @@
     getQualityTestStandardParamByTestStandardId(testStandardId)
       .then(res => {
         tableData.value = res.data || [];
+        tableData.value = tableData.value.map(item => ({
+          ...item,
+          id: null
+        }));
       })
       .catch(error => {
         console.error("鑾峰彇鏍囧噯鍙傛暟澶辫触:", error);
@@ -520,4 +602,4 @@
 </script>
 
 <style scoped>
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3