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