From 9a3b4f98153a48566de083a8ed5ba208282d3eae Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 23 六月 2026 11:14:51 +0800
Subject: [PATCH] 新疆马铃薯 1.质量管理三种检验要自动判断是否合格 2.指标维护修改权限放开

---
 src/views/qualityManagement/processInspection/components/inspectionFormDia.vue |  191 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 153 insertions(+), 38 deletions(-)

diff --git a/src/views/qualityManagement/processInspection/components/inspectionFormDia.vue b/src/views/qualityManagement/processInspection/components/inspectionFormDia.vue
index e24e8d4..10f3671 100644
--- a/src/views/qualityManagement/processInspection/components/inspectionFormDia.vue
+++ b/src/views/qualityManagement/processInspection/components/inspectionFormDia.vue
@@ -6,7 +6,7 @@
         width="70%"
         @close="closeDia"
     >
-      <div style="margin-bottom: 10px;text-align: right">
+      <div v-if="!isViewMode" style="margin-bottom: 10px;text-align: right">
         <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
       </div>
       <PIMTable
@@ -15,17 +15,76 @@
           :tableData="tableData"
           :tableLoading="tableLoading"
           :isSelection="true"
+          :isShowPagination="false"
           @selection-change="handleSelectionChange"
-          height="600"
+          height="400"
       >
-        <template #slot="{ row }">
-          <el-input v-model="row.testValue" clearable/>
+        <template #judgeTypeSlot="{ row }">
+          <el-tag v-if="row.judgeType === '鈮�'" type="success">鈮�</el-tag>
+          <el-tag v-else-if="row.judgeType === '鈮�'" type="warning">鈮�</el-tag>
+          <el-tag v-else-if="row.judgeType === '鑼冨洿'" type="info">鑼冨洿</el-tag>
+          <el-tag v-else>鏂囧瓧</el-tag>
+        </template>
+        <template #isRequiredSlot="{ row }">
+          <el-tag v-if="row.isRequired === 1" type="danger">鏄�</el-tag>
+          <el-tag v-else type="info">鍚�</el-tag>
+        </template>
+        <template #testValueSlot="{ row }">
+          <el-input v-model="row.testValue" clearable :disabled="isViewMode" @input="handleTestValueChange(row)" />
+        </template>
+        <template #isQualifiedSlot="{ row }">
+          <template v-if="row.judgeType !== '鏂囧瓧鎻忚堪'">
+            <el-tag v-if="row.isQualified === 1" type="success">鍚堟牸</el-tag>
+            <el-tag v-else-if="row.isQualified === 0" type="danger">涓嶅悎鏍�</el-tag>
+            <span v-else>-</span>
+          </template>
+          <template v-else>
+            <el-select v-model="row.isQualified" placeholder="璇烽�夋嫨" size="small" :disabled="isViewMode" @change="handleTextResultChange(row)">
+              <el-option :value="1" label="鍚堟牸" />
+              <el-option :value="0" label="涓嶅悎鏍�" />
+            </el-select>
+          </template>
         </template>
       </PIMTable>
+
+      <div style="margin-top: 16px;">
+        <el-form label-width="120px">
+          <el-form-item label="鑷姩鍒ゆ柇缁撴灉">
+            <template v-if="autoJudgeResult">
+              <el-tag v-if="autoJudgeResult === '鍚堟牸'" type="success" size="large">鍚堟牸</el-tag>
+              <el-tag v-else-if="autoJudgeResult === '閮ㄥ垎鍚堟牸'" type="warning" size="large">閮ㄥ垎鍚堟牸</el-tag>
+              <el-tag v-else type="danger" size="large">涓嶅悎鏍�</el-tag>
+              <span v-if="autoJudgeResult === '涓嶅悎鏍�'" style="margin-left: 10px; color: #909399;">
+                锛堝繀瑕佸垽鏂弬鏁版湁涓嶅悎鏍奸」锛屼笉鍙墜鍔ㄤ慨鏀癸級
+              </span>
+              <span v-if="autoJudgeResult === '閮ㄥ垎鍚堟牸'" style="margin-left: 10px; color: #909399;">
+                锛堝繀瑕佸垽鏂弬鏁板潎鍚堟牸锛岄潪蹇呰鍙傛暟鏈変笉鍚堟牸椤癸紝鍙墜鍔ㄩ�夋嫨鏈�缁堢粨鏋滐級
+              </span>
+            </template>
+            <template v-else>
+              <el-tag type="info" size="large">闇�鎵嬪姩鍒ゆ柇</el-tag>
+              <span style="margin-left: 10px; color: #909399;">
+                锛堟墍鏈夊弬鏁板潎涓烘枃瀛楁弿杩扮被鍨嬶紝璇锋墜鍔ㄩ�夋嫨锛�
+              </span>
+            </template>
+          </el-form-item>
+          <el-form-item label="鏈�缁堝垽瀹�">
+            <el-radio-group v-model="checkResult" :disabled="isViewMode || autoJudgeResult === '涓嶅悎鏍�'">
+              <el-radio label="鍚堟牸">鍚堟牸</el-radio>
+              <el-radio label="涓嶅悎鏍�">涓嶅悎鏍�</el-radio>
+              <el-radio label="閮ㄥ垎鍚堟牸">閮ㄥ垎鍚堟牸</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-form>
+      </div>
+
       <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>
@@ -33,14 +92,13 @@
 </template>
 
 <script setup>
-import {ref} from "vue";
-import {Search} from "@element-plus/icons-vue";
+import { ref, computed, getCurrentInstance } from "vue";
 import {
   qualityInspectParamDel,
   qualityInspectParamInfo,
   qualityInspectParamUpdate
 } from "@/api/qualityManagement/qualityInspectParam.js";
-import {ElMessageBox} from "element-plus";
+import { ElMessageBox } from "element-plus";
 const { proxy } = getCurrentInstance()
 const emit = defineEmits(['close'])
 
@@ -48,38 +106,31 @@
 const operationType = ref('')
 const currentId = ref('')
 const selectedRows = ref([]);
+const autoJudgeResult = ref(null)
+const checkResult = ref('')
+const isViewMode = computed(() => operationType.value === 'view')
+
 const tableColumn = ref([
-  {
-    label: "鎸囨爣",
-    prop: "parameterItem",
-  },
-  {
-    label: "鍗曚綅",
-    prop: "unit",
-  },
-  {
-    label: "鍘傚鏍囧噯鍊�",
-    prop: "standardValue",
-  },
-  {
-    label: "鍐呮帶鍊�",
-    prop: "controlValue",
-  },
-  {
-    label: "妫�楠屽��",
-    prop: "testValue",
-    dataType: 'slot',
-    slot: 'slot',
-  },
+  { label: "鎸囨爣", prop: "parameterItem" },
+  { label: "鍗曚綅", prop: "unit" },
+  { label: "鍘傚鏍囧噯鍊�", prop: "standardValue" },
+  { label: "涓嬮檺鍊�", prop: "minValue" },
+  { label: "涓婇檺鍊�", prop: "maxValue" },
+  { label: "鍐呮帶鍊�", prop: "controlValue" },
+  { label: "鍒ゆ柇绫诲瀷", prop: "judgeType", dataType: 'slot', slot: 'judgeTypeSlot' },
+  { label: "蹇呰鍒ゆ柇", prop: "isRequired", dataType: 'slot', slot: 'isRequiredSlot' },
+  { label: "妫�楠屽��", prop: "testValue", dataType: 'slot', slot: 'testValueSlot' },
+  { label: "鏄惁鍚堟牸", prop: "isQualified", dataType: 'slot', slot: 'isQualifiedSlot' },
 ]);
 const tableData = ref([]);
 const tableLoading = ref(false);
 
-// 鎵撳紑寮规
 const openDialog = (type, row) => {
   operationType.value = type;
   dialogFormVisible.value = true;
-  if (operationType.value === 'edit') {
+  autoJudgeResult.value = null
+  checkResult.value = ''
+  if (operationType.value === 'edit' || operationType.value === 'view') {
     currentId.value = row.id;
     getList()
   }
@@ -89,23 +140,87 @@
     tableData.value = res.data;
   })
 }
-// 琛ㄦ牸閫夋嫨鏁版嵁
 const handleSelectionChange = (selection) => {
   selectedRows.value = selection;
 };
-// 鎻愪氦浜у搧琛ㄥ崟
+
+const handleTestValueChange = (row) => {
+  if (isViewMode.value) return;
+  if (!row.testValue || !row.judgeType || row.judgeType === '鏂囧瓧鎻忚堪') {
+    return;
+  }
+  const testVal = parseFloat(row.testValue);
+  if (isNaN(testVal)) return;
+
+  let qualified = false;
+  if (row.judgeType === '鈮�') {
+    const stdVal = parseFloat(row.standardValue);
+    if (isNaN(stdVal)) return;
+    qualified = testVal >= stdVal;
+  } else if (row.judgeType === '鈮�') {
+    const stdVal = parseFloat(row.standardValue);
+    if (isNaN(stdVal)) return;
+    qualified = testVal <= stdVal;
+  } else if (row.judgeType === '鑼冨洿') {
+    const minVal = parseFloat(row.minValue);
+    const maxVal = parseFloat(row.maxValue);
+    if (isNaN(minVal) || isNaN(maxVal)) return;
+    qualified = testVal >= minVal && testVal <= maxVal;
+  } else {
+    return;
+  }
+  row.isQualified = qualified ? 1 : 0;
+  performAutoJudgeAll();
+};
+
+const handleTextResultChange = () => {
+  performAutoJudgeAll()
+};
+
+const performAutoJudgeAll = () => {
+  if (!tableData.value.length) return;
+  const allTextDesc = tableData.value.every(item => item.judgeType === '鏂囧瓧鎻忚堪');
+  if (allTextDesc) {
+    autoJudgeResult.value = null;
+    return;
+  }
+  const requiredParams = tableData.value.filter(item => item.isRequired === 1);
+  if (requiredParams.length === 0) {
+    autoJudgeResult.value = null;
+    return;
+  }
+  const hasUnqualified = requiredParams.some(item => item.isQualified === 0);
+  const allJudged = requiredParams.every(item => item.isQualified === 1 || item.isQualified === 0);
+  if (!allJudged) {
+    autoJudgeResult.value = null;
+    return;
+  }
+  if (hasUnqualified) {
+    autoJudgeResult.value = '涓嶅悎鏍�';
+    checkResult.value = '涓嶅悎鏍�';
+    return;
+  }
+  const nonRequiredUnqualified = tableData.value.filter(item => item.isRequired !== 1 && item.isQualified === 0);
+  if (nonRequiredUnqualified.length > 0) {
+    autoJudgeResult.value = '閮ㄥ垎鍚堟牸';
+    checkResult.value = '閮ㄥ垎鍚堟牸';
+  } else {
+    autoJudgeResult.value = '鍚堟牸';
+    checkResult.value = '鍚堟牸';
+  }
+};
+
 const submitForm = () => {
+  performAutoJudgeAll();
   qualityInspectParamUpdate(tableData.value).then(res => {
     proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
     closeDia();
   })
 }
-// 鍏抽棴寮规
 const closeDia = () => {
   dialogFormVisible.value = false;
   emit('close')
 };
-// 鍒犻櫎
 const handleDelete = () => {
   let ids = [];
   if (selectedRows.value.length > 0) {
@@ -136,4 +251,4 @@
 
 <style scoped>
 
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3