From d2fb1300564eaa8166f4db1184c521e468cd2ed3 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期五, 17 四月 2026 14:23:09 +0800
Subject: [PATCH] 不合格处理:增加字段增删改,展示

---
 src/views/qualityManagement/nonconformingManagement/components/formDia.vue           |   68 ++++++++++++++++
 src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue |   72 +++++++++++++++++
 src/views/qualityManagement/nonconformingManagement/index.vue                        |   75 ++++++++++++++++++
 3 files changed, 208 insertions(+), 7 deletions(-)

diff --git a/src/views/qualityManagement/nonconformingManagement/components/formDia.vue b/src/views/qualityManagement/nonconformingManagement/components/formDia.vue
index 0c6562c..7a2c49a 100644
--- a/src/views/qualityManagement/nonconformingManagement/components/formDia.vue
+++ b/src/views/qualityManagement/nonconformingManagement/components/formDia.vue
@@ -112,6 +112,56 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="鍘熷洜鍒嗘瀽锛�" prop="reasonAnalysis">
+              <el-input
+                  v-model="form.reasonAnalysis"
+                  type="textarea"
+                  :rows="4"
+                  placeholder="璇疯緭鍏�"
+                  clearable
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="棰勯槻涓庣籂姝f帾鏂斤細" prop="preventiveCorrective">
+              <el-input
+                  v-model="form.preventiveCorrective"
+                  type="textarea"
+                  :rows="4"
+                  placeholder="璇疯緭鍏�"
+                  clearable
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="宸ユ椂鎹熷け锛�" prop="lossWorking">
+              <el-input-number
+                  v-model="form.lossWorking"
+                  :min="0"
+                  :step="0.01"
+                  :precision="2"
+                  style="width: 100%"
+                  placeholder="璇疯緭鍏�"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏉愭枡璐规崯澶憋細" prop="lossMaterial">
+              <el-input-number
+                  v-model="form.lossMaterial"
+                  :min="0"
+                  :step="0.01"
+                  :precision="2"
+                  style="width: 100%"
+                  placeholder="璇疯緭鍏�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -124,7 +174,7 @@
 </template>
 
 <script setup>
-import {ref, reactive, toRefs} from "vue";
+import {ref, reactive, toRefs, getCurrentInstance} from "vue";
 import {modelList, productTreeList} from "@/api/basicData/product.js";
 import {
   getQualityUnqualifiedInfo,
@@ -157,6 +207,10 @@
     dealResult: '',
     dealName: '',
     dealTime: '',
+    reasonAnalysis: '',
+    preventiveCorrective: '',
+    lossWorking: 0,
+    lossMaterial: 0,
   },
   rules: {
     checkTime: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" },],
@@ -201,6 +255,10 @@
       unit: '',
       quantity: '',
       productName: '',
+      reasonAnalysis: '',
+      preventiveCorrective: '',
+      lossWorking: 0,
+      lossMaterial: 0,
     };
   } else {
     form.value = {};
@@ -209,7 +267,13 @@
   if (operationType.value === 'edit') {
     getQualityUnqualifiedInfo(row.id).then(res => {
       const { inspectState, ...rest } = (res.data || {})
-      form.value = { ...rest }
+      form.value = {
+        reasonAnalysis: '',
+        preventiveCorrective: '',
+        lossWorking: 0,
+        lossMaterial: 0,
+        ...rest
+      }
     })
   }
 }
diff --git a/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue b/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue
index 8f4492a..e3cf7b8 100644
--- a/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue
+++ b/src/views/qualityManagement/nonconformingManagement/components/inspectionFormDia.vue
@@ -109,6 +109,56 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="鍘熷洜鍒嗘瀽锛�" prop="reasonAnalysis">
+              <el-input
+                  v-model="form.reasonAnalysis"
+                  type="textarea"
+                  :rows="4"
+                  placeholder="璇疯緭鍏�"
+                  clearable
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="棰勯槻涓庣籂姝f帾鏂斤細" prop="preventiveCorrective">
+              <el-input
+                  v-model="form.preventiveCorrective"
+                  type="textarea"
+                  :rows="4"
+                  placeholder="璇疯緭鍏�"
+                  clearable
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="宸ユ椂鎹熷け锛�" prop="lossWorking">
+              <el-input-number
+                  v-model="form.lossWorking"
+                  :min="0"
+                  :step="0.01"
+                  :precision="2"
+                  style="width: 100%"
+                  placeholder="璇疯緭鍏�"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏉愭枡璐规崯澶憋細" prop="lossMaterial">
+              <el-input-number
+                  v-model="form.lossMaterial"
+                  :min="0"
+                  :step="0.01"
+                  :precision="2"
+                  style="width: 100%"
+                  placeholder="璇疯緭鍏�"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -128,6 +178,7 @@
   qualityUnqualifiedDeal
 } from "@/api/qualityManagement/nonconformingManagement.js";
 import {userListNoPage} from "@/api/system/user.js";
+import { getCurrentInstance } from "vue";
 const { proxy } = getCurrentInstance()
 const emit = defineEmits(['close'])
 
@@ -151,7 +202,11 @@
     dealResult: '',
     dealName: '',
     dealTime: '',
-    method: undefined
+    method: undefined,
+    reasonAnalysis: '',
+    preventiveCorrective: '',
+    lossWorking: 0,
+    lossMaterial: 0,
   },
   rules: {
     checkTime: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" },],
@@ -194,13 +249,24 @@
     userList.value = [];
   }
   dialogFormVisible.value = true;
-  form.value = {};
+  form.value = {
+    reasonAnalysis: '',
+    preventiveCorrective: '',
+    lossWorking: 0,
+    lossMaterial: 0,
+  };
   getProductOptions();
   if (operationType.value === 'edit') {
     getQualityUnqualifiedInfo(row.id).then(res => {
       const { inspectState, ...rest } = (res.data || {})
       // 鏈夋暟鎹氨鏄剧ず榛樿鍊硷紝娌℃湁灏变笉鏄剧ず
-      form.value = { ...rest }
+      form.value = {
+        reasonAnalysis: '',
+        preventiveCorrective: '',
+        lossWorking: 0,
+        lossMaterial: 0,
+        ...rest
+      }
     })
   }
 }
diff --git a/src/views/qualityManagement/nonconformingManagement/index.vue b/src/views/qualityManagement/nonconformingManagement/index.vue
index 55d2472..98a0731 100644
--- a/src/views/qualityManagement/nonconformingManagement/index.vue
+++ b/src/views/qualityManagement/nonconformingManagement/index.vue
@@ -1,3 +1,4 @@
+// 涓嶅悎鏍肩鐞�
 <template>
   <div class="app-container">
     <div class="search_form">
@@ -51,8 +52,36 @@
           :tableLoading="tableLoading"
           @pagination="pagination"
           :total="page.total"
-      ></PIMTable>
+      >
+        <template #reasonAnalysis="{ row }">
+          <el-button
+              link
+              type="primary"
+              @click="openTextPreviewDialog('鍘熷洜鍒嗘瀽', row?.reasonAnalysis)"
+          >
+            {{ row?.reasonAnalysis}}
+          </el-button>
+        </template>
+        <template #preventiveCorrective="{ row }">
+          <el-button
+              link
+              type="primary"
+              @click="openTextPreviewDialog('棰勯槻涓庣籂姝f帾鏂�', row?.preventiveCorrective)"
+          >
+            {{ row?.preventiveCorrective}}
+          </el-button>
+        </template>
+        <template #lossWorking="{ row }">
+          <span>{{ row?.lossWorking ?? '-' }}</span>
+        </template>
+        <template #lossMaterial="{ row }">
+          <span>{{ row?.lossMaterial ?? '-' }}</span>
+        </template>
+      </PIMTable>
     </div>
+    <el-dialog v-model="textPreviewDialogVisible" :title="textPreviewTitle" width="600px">
+      <div class="text-preview-content">{{ textPreviewContent || "鏆傛棤鍐呭" }}</div>
+    </el-dialog>
     <FormDia ref="formDia" @close="handleQuery"></FormDia>
     <InspectionFormDia ref="inspectionFormDia" @close="handleQuery"></InspectionFormDia>
   </div>
@@ -173,6 +202,30 @@
     width: 120
   },
   {
+    label: "鍘熷洜鍒嗘瀽",
+    prop: "reasonAnalysis",
+    dataType: "slot",
+    slot: "reasonAnalysis",
+    width: 160
+  },
+  {
+    label: "棰勯槻涓庣籂姝f帾鏂�",
+    prop: "preventiveCorrective",
+    dataType: "slot",
+    slot: "preventiveCorrective",
+    width: 180
+  },
+  {
+    label: "宸ユ椂鎹熷け",
+    prop: "lossWorking",
+    width: 140
+  },
+  {
+    label: "鏉愭枡璐规崯澶�",
+    prop: "lossMaterial",
+    width: 140
+  },
+  {
     dataType: "action",
     label: "鎿嶄綔",
     align: "center",
@@ -193,6 +246,9 @@
 const tableData = ref([]);
 const selectedRows = ref([]);
 const tableLoading = ref(false);
+const textPreviewDialogVisible = ref(false);
+const textPreviewTitle = ref("");
+const textPreviewContent = ref("");
 const page = reactive({
   current: 1,
   size: 100,
@@ -259,6 +315,12 @@
     inspectionFormDia.value?.openDialog(type, row)
   })
 };
+// 鏌ョ湅瀛楁璇︽儏
+const openTextPreviewDialog = (title, content) => {
+  textPreviewTitle.value = title;
+  textPreviewContent.value = content || "";
+  textPreviewDialogVisible.value = true;
+};
 
 // 鍒犻櫎
 const handleDelete = () => {
@@ -303,4 +365,13 @@
 });
 </script>
 
-<style scoped></style>
+<style scoped>
+.text-preview-content {
+  white-space: pre-wrap;
+  line-height: 1.6;
+  color: #606266;
+  word-break: break-word;
+  max-height: 60vh;
+  overflow-y: auto;
+}
+</style>

--
Gitblit v1.9.3