From 2d3530a7c11557a40807ad7c0b9e302ce6ce3a9f Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期五, 28 八月 2026 10:16:32 +0800
Subject: [PATCH] feat: 综合业务模块页面重构与交互完善
---
src/views/qualityManagement/finalInspection/components/formDia.vue | 214 +++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 189 insertions(+), 25 deletions(-)
diff --git a/src/views/qualityManagement/finalInspection/components/formDia.vue b/src/views/qualityManagement/finalInspection/components/formDia.vue
index 94801ff..b2b271f 100644
--- a/src/views/qualityManagement/finalInspection/components/formDia.vue
+++ b/src/views/qualityManagement/finalInspection/components/formDia.vue
@@ -169,13 +169,57 @@
</el-col>
</el-row>
</el-form>
+ <el-row class="mb8" v-if="!isViewMode">
+ <el-button type="primary" plain icon="Plus" @click="handleAddRow">鏂板涓�琛�</el-button>
+ </el-row>
<PIMTable rowKey="id"
:column="tableColumn"
:tableData="tableData"
:tableLoading="tableLoading"
height="400">
+ <template #parameterItemSlot="{ row }">
+ <span v-if="isViewMode">{{ row.parameterItem }}</span>
+ <el-input v-else v-model="row.parameterItem" placeholder="璇疯緭鍏�" />
+ </template>
+ <template #parameterTypeSlot="{ row }">
+ <span v-if="isViewMode">{{ row.parameterType === 1 ? '鏁板瓧' : row.parameterType === 0 ? '鏂囧瓧' : '' }}</span>
+ <el-select v-else v-model="row.parameterType" @change="handleTypeChange(row)">
+ <el-option label="鏂囧瓧" :value="0" />
+ <el-option label="鏁板瓧" :value="1" />
+ </el-select>
+ </template>
+ <template #maxValueSlot="{ row }">
+ <span v-if="isViewMode">{{ row.maxValue }}</span>
+ <el-input-number v-else v-model="row.maxValue" :controls="false" :disabled="row.parameterType !== 1" style="width: 100%" />
+ </template>
+ <template #minValueSlot="{ row }">
+ <span v-if="isViewMode">{{ row.minValue }}</span>
+ <el-input-number v-else v-model="row.minValue" :controls="false" :disabled="row.parameterType !== 1" style="width: 100%" />
+ </template>
+ <template #unitSlot="{ row }">
+ <span v-if="isViewMode">{{ row.unit }}</span>
+ <el-input v-else v-model="row.unit" />
+ </template>
+ <template #standardValueSlot="{ row }">
+ <span v-if="isViewMode">{{ row.standardValue }}</span>
+ <el-input v-else v-model="row.standardValue" :disabled="row.parameterType !== 0" />
+ </template>
+ <template #controlValueSlot="{ row }">
+ <span v-if="isViewMode">{{ row.controlValue }}</span>
+ <el-input v-else v-model="row.controlValue" />
+ </template>
+ <template #operationSlot="{ row }">
+ <el-button v-if="!isViewMode" type="danger" link @click="removeRow(row)">鍒犻櫎</el-button>
+ </template>
<template #slot="{ row }">
- <el-input v-model="row.testValue"
+ <el-input-number v-if="row.parameterType === 1"
+ v-model="row.testValue"
+ :controls="false"
+ clearable
+ :disabled="isViewMode"
+ style="width: 100%" />
+ <el-input v-else
+ v-model="row.testValue"
clearable
:disabled="isViewMode" />
</template>
@@ -203,6 +247,7 @@
computed,
getCurrentInstance,
nextTick,
+ watch
} from "vue";
import { getOptions } from "@/api/procurementManagement/procurementLedger.js";
import { modelList, productTreeList } from "@/api/basicData/product.js";
@@ -267,36 +312,121 @@
});
const supplierList = ref([]);
const productOptions = ref([]);
- const tableColumn = ref([
- {
- label: "鎸囨爣",
- prop: "parameterItem",
- },
- {
- label: "鍗曚綅",
- prop: "unit",
- },
- {
- label: "鏍囧噯鍊�",
- prop: "standardValue",
- },
- {
- label: "鍐呮帶鍊�",
- prop: "controlValue",
- },
- {
- label: "妫�楠屽��",
- prop: "testValue",
- dataType: "slot",
- slot: "slot",
- },
- ]);
+ const tableColumn = computed(() => {
+ const cols = [
+ {
+ label: "鎸囨爣",
+ prop: "parameterItem",
+ dataType: "slot",
+ slot: "parameterItemSlot"
+ },
+ {
+ label: "鍙傛暟绫诲瀷",
+ prop: "parameterType",
+ dataType: "slot",
+ slot: "parameterTypeSlot",
+ width: "120"
+ },
+ {
+ label: "鏈�澶у��",
+ prop: "maxValue",
+ dataType: "slot",
+ slot: "maxValueSlot",
+ width: "100"
+ },
+ {
+ label: "鏈�灏忓��",
+ prop: "minValue",
+ dataType: "slot",
+ slot: "minValueSlot",
+ width: "100"
+ },
+ {
+ label: "鍗曚綅",
+ prop: "unit",
+ dataType: "slot",
+ slot: "unitSlot",
+ width: "100"
+ },
+ {
+ label: "鏍囧噯鍊�",
+ prop: "standardValue",
+ dataType: "slot",
+ slot: "standardValueSlot"
+ },
+ {
+ label: "鍐呮帶鍊�",
+ prop: "controlValue",
+ dataType: "slot",
+ slot: "controlValueSlot"
+ },
+ {
+ label: "妫�楠屽��",
+ prop: "testValue",
+ dataType: "slot",
+ slot: "slot",
+ }
+ ];
+ if (!isViewMode.value) {
+ cols.push({
+ label: "鎿嶄綔",
+ prop: "operation",
+ dataType: "slot",
+ slot: "operationSlot",
+ width: "80",
+ fixed: "right"
+ });
+ }
+ return cols;
+ });
const tableData = ref([]);
const tableLoading = ref(false);
const userList = ref([]);
const currentProductId = ref(0);
const testStandardOptions = ref([]); // 鎸囨爣閫夋嫨涓嬫媺妗嗘暟鎹�
const modelOptions = ref([]);
+
+ watch(() => tableData.value, (newVal) => {
+ if (isViewMode.value) return;
+ if (!newVal || newVal.length === 0) return;
+
+ let passCount = 0;
+ let failCount = 0;
+
+ newVal.forEach(item => {
+ let isPass = false;
+ const val = item.testValue;
+
+ if (val === null || val === undefined || val === '') {
+ isPass = false;
+ } else if (item.parameterType === 1) {
+ const numVal = Number(val);
+ const min = Number(item.minValue);
+ const max = Number(item.maxValue);
+ if (!isNaN(numVal) && numVal >= min && numVal <= max) {
+ isPass = true;
+ }
+ } else {
+ if (String(val) === String(item.standardValue)) {
+ isPass = true;
+ }
+ }
+
+ if (isPass) {
+ passCount++;
+ } else {
+ failCount++;
+ }
+ });
+
+ if (failCount === 0 && passCount > 0) {
+ form.value.checkResult = "鍚堟牸";
+ } else if (passCount === 0 && failCount > 0) {
+ form.value.checkResult = "涓嶅悎鏍�";
+ } else {
+ form.value.checkResult = "閮ㄥ垎鍚堟牸";
+ }
+ }, { deep: true });
// 鎵撳紑寮规
const openDialog = async (type, row) => {
@@ -533,6 +663,10 @@
...item,
id: null,
}));
+
+ if (tableData.value.some(item => item.parameterType === null || item.parameterType === undefined)) {
+ proxy.$modal.msgWarning("鍙傛暟绫诲瀷鏈厤缃紝璇烽厤缃寚鏍囩淮鎶ゆā鏉�");
+ }
})
.catch(error => {
console.error("鑾峰彇鏍囧噯鍙傛暟澶辫触:", error);
@@ -547,6 +681,36 @@
tableData.value = res.data;
});
};
+
+ const handleAddRow = () => {
+ tableData.value.push({
+ parameterItem: '',
+ parameterType: 0,
+ maxValue: undefined,
+ minValue: undefined,
+ unit: '',
+ standardValue: '',
+ controlValue: '',
+ testValue: ''
+ });
+ };
+
+ const removeRow = (row) => {
+ const index = tableData.value.indexOf(row);
+ if (index !== -1) {
+ tableData.value.splice(index, 1);
+ }
+ };
+
+ const handleTypeChange = (row) => {
+ if (row.parameterType === 0) {
+ row.maxValue = undefined;
+ row.minValue = undefined;
+ } else {
+ row.standardValue = '';
+ }
+ row.testValue = '';
+ };
// 鍏抽棴寮规
const closeDia = () => {
proxy.resetForm("formRef");
--
Gitblit v1.9.3