From 4dee4cb5b31a7f1dcd2c7b3d72f74b78d2fe3f29 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 18 九月 2026 15:56:41 +0800
Subject: [PATCH] fix: 质检是否入库

---
 src/views/qualityManagement/rawMaterialInspection/components/formDia.vue |   95 +++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 82 insertions(+), 13 deletions(-)

diff --git a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
index 8bcc72b..a66c609 100644
--- a/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
+++ b/src/views/qualityManagement/rawMaterialInspection/components/formDia.vue
@@ -14,6 +14,7 @@
                   v-model="form.supplier"
                   placeholder="璇烽�夋嫨"
                   clearable
+                  filterable
                   :disabled="isViewMode || supplierQuantityDisabled"
               >
                 <el-option
@@ -102,17 +103,30 @@
 
         <el-row :gutter="30">
           <el-col :span="12">
+            <el-form-item label="鏄惁鎶芥锛�" prop="isSampling">
+              <el-radio-group v-model="form.isSampling" class="sampling-radio-group" :disabled="isViewMode" @change="handleSamplingChange">
+                <el-radio-button :label="1">鏄�</el-radio-button>
+                <el-radio-button :label="0">鍚�</el-radio-button>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" v-if="form.isSampling === 1">
+            <el-form-item label="鎶芥鏁伴噺锛�" prop="samplingQuantity">
+              <el-input-number :step="0.01" :min="0" style="width: 100%" v-model="form.samplingQuantity"
+                               placeholder="璇疯緭鍏�" clearable :precision="2" :disabled="isViewMode"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="30">
+          <el-col :span="12">
             <el-form-item label="妫�娴嬪崟浣嶏細" prop="checkCompany">
               <el-input v-model="form.checkCompany" placeholder="璇疯緭鍏�" clearable :disabled="isViewMode"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="妫�娴嬬粨鏋滐細" prop="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 label="鍚堟牸鐜囷細">
+              <el-tag :type="passRateTagType">{{ passRateDisplayText }}</el-tag>
             </el-form-item>
           </el-col>
         </el-row>
@@ -194,7 +208,8 @@
     unit: "",
     quantity: "",
     checkCompany: "",
-    checkResult: "",
+    isSampling: 0,
+    samplingQuantity: "",
   },
   rules: {
     checkTime: [{required: true, message: "璇疯緭鍏�", trigger: "blur"},],
@@ -208,7 +223,8 @@
     qualifiedQuantity: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
     unqualifiedQuantity: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
     checkCompany: [{required: false, message: "璇疯緭鍏�", trigger: "blur"}],
-    checkResult: [{required: true, message: "璇烽�夋嫨妫�娴嬬粨鏋�", trigger: "change"}],
+    isSampling: [{required: true, message: "璇烽�夋嫨鏄惁鎶芥", trigger: "change"}],
+    samplingQuantity: [{required: true, message: "璇疯緭鍏ユ娊妫�鏁伴噺", trigger: "blur"}],
   },
 });
 const tableColumn = ref([
@@ -249,6 +265,37 @@
 // 鏄惁涓烘煡鐪嬫ā寮�
 const isViewMode = computed(() => operationType.value === 'view');
 
+const passRateValue = computed(() => {
+  const fromApi = form.value.passRate;
+  if (fromApi != null && fromApi !== '') {
+    const n = Number(fromApi);
+    if (!Number.isNaN(n)) return n;
+  }
+  const qualified = Number(form.value.qualifiedQuantity) || 0;
+  const unqualified = Number(form.value.unqualifiedQuantity) || 0;
+  const total = qualified + unqualified;
+  if (!total || total === 0) return null;
+  return (qualified / total) * 100;
+});
+
+const passRateDisplayText = computed(() => {
+  const params = passRateValue.value;
+  if (params == null || params === '') return '鈥�';
+  const n = Number(params);
+  if (Number.isNaN(n)) return '鈥�';
+  return `${n.toFixed(2)}%`;
+});
+
+const passRateTagType = computed(() => {
+  const params = passRateValue.value;
+  if (params == null || params === '') return 'info';
+  const n = Number(params);
+  if (Number.isNaN(n)) return 'info';
+  if (n >= 100) return 'success';
+  if (n >= 90) return 'warning';
+  return 'danger';
+});
+
 // 缂栬緫鏃讹細productMainId 鎴� purchaseLedgerId 浠讳竴鏈夊�煎垯渚涘簲鍟嗐�佹暟閲忕疆鐏�
 const supplierQuantityDisabled = computed(() => {
   const v = form.value || {};
@@ -282,7 +329,8 @@
     unit: "",
     quantity: "",
     checkCompany: "",
-    checkResult: "",
+    isSampling: 0,
+    samplingQuantity: "",
   }
   testStandardOptions.value = [];
   tableData.value = [];
@@ -291,7 +339,8 @@
   if (operationType.value === 'edit' || operationType.value === 'view') {
     // 鍏堜繚瀛� testStandardId锛岄伩鍏嶈娓呯┖
     const savedTestStandardId = row.testStandardId;
-    form.value = {...row}
+    const { passRate, ...rowWithoutPassRate } = row;
+    form.value = { ...rowWithoutPassRate, testStandardId: "" };
     currentProductId.value = row.productId || 0
     // 鍏抽敭锛氱紪杈戞椂鍔犺浇瑙勬牸鍨嬪彿涓嬫媺閫夐」锛屾墠鑳藉弽鏄� productModelId
     if (currentProductId.value) {
@@ -300,7 +349,11 @@
         modelOptions.value = res || [];
         // 鍚屾鍥炲~ model / unit锛堟湁浜涙帴鍙h繑鍥炵殑 row 閲屽彲鑳芥病甯﹀叏锛�
         if (form.value.productModelId) {
-          handleChangeModel(form.value.productModelId);
+          const selectedModel = modelOptions.value.find(item => item.id == form.value.productModelId);
+          if (selectedModel) {
+            form.value.model = selectedModel.model || '';
+            form.value.unit = selectedModel.unit || '';
+          }
         }
       } catch (e) {
         console.error("鍔犺浇瑙勬牸鍨嬪彿澶辫触", e);
@@ -312,6 +365,7 @@
       // 鍏堝姞杞芥寚鏍囬�夐」
       let params = {
         productId: currentProductId.value,
+        productModelId: form.value.productModelId || undefined,
         inspectType: 0
       }
       qualityInspectDetailByProductId(params).then(res => {
@@ -376,6 +430,8 @@
 const handleChangeModel = (value) => {
   form.value.model = modelOptions.value.find(item => item.id == value)?.model || '';
   form.value.unit = modelOptions.value.find(item => item.id == value)?.unit || '';
+  // 瑙勬牸鍨嬪彿鍙樺寲鍚庢寜 浜у搧+瑙勬牸鍨嬪彿 閲嶆柊杩囨护鍙�夋寚鏍�
+  getList(value);
 }
 
 const findNodeById = (nodes, productId) => {
@@ -434,7 +490,7 @@
   })
 }
 
-const getList = () => {
+const getList = (modelId) => {
   if (!currentProductId.value) {
     testStandardOptions.value = [];
     tableData.value = [];
@@ -442,6 +498,7 @@
   }
   let params = {
     productId: currentProductId.value,
+    productModelId: modelId ?? form.value.productModelId ?? undefined,
     inspectType: 0
   }
   qualityInspectDetailByProductId(params).then(res => {
@@ -506,6 +563,16 @@
   }
 };
 
+// 鏄惁鎶芥鍒囨崲
+const handleSamplingChange = (value) => {
+  if (value !== 1) {
+    form.value.samplingQuantity = "";
+    nextTick(() => {
+      proxy.$refs?.formRef?.clearValidate?.("samplingQuantity");
+    });
+  }
+};
+
 // 鍏抽棴寮规
 const closeDia = () => {
   proxy.resetForm("formRef");
@@ -521,5 +588,7 @@
 </script>
 
 <style scoped>
-
+.sampling-radio-group {
+  height: 32px;
+}
 </style>

--
Gitblit v1.9.3