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/processInspection/components/formDia.vue | 180 +++++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 147 insertions(+), 33 deletions(-)
diff --git a/src/views/qualityManagement/processInspection/components/formDia.vue b/src/views/qualityManagement/processInspection/components/formDia.vue
index b15eabb..722fb93 100644
--- a/src/views/qualityManagement/processInspection/components/formDia.vue
+++ b/src/views/qualityManagement/processInspection/components/formDia.vue
@@ -1,7 +1,7 @@
<template>
<div>
<el-dialog v-model="dialogFormVisible"
- :title="operationType === 'add' ? '鏂板杩囩▼妫�楠�' : '缂栬緫杩囩▼妫�楠�'"
+ :title="operationType === 'add' ? '鏂板杩囩▼妫�楠�' : operationType === 'view' ? '鏌ョ湅杩囩▼妫�楠�' : '缂栬緫杩囩▼妫�楠�'"
width="70%"
@close="closeDia">
<el-form :model="form"
@@ -16,7 +16,7 @@
<el-select v-model="form.process"
placeholder="璇烽�夋嫨宸ュ簭"
clearable
- :disabled="processQuantityDisabled"
+ :disabled="isViewMode || processQuantityDisabled"
style="width: 100%">
<el-option v-for="item in processList"
:key="item.name"
@@ -35,7 +35,7 @@
@change="getModels"
:data="productOptions"
:render-after-expand="false"
- :disabled="operationType === 'edit'"
+ :disabled="isViewMode || operationType === 'edit'"
style="width: 100%" />
</el-form-item>
</el-col>
@@ -47,7 +47,7 @@
<el-select v-model="form.productModelId"
placeholder="璇烽�夋嫨"
clearable
- :disabled="operationType === 'edit'"
+ :disabled="isViewMode || operationType === 'edit'"
filterable
readonly
@change="handleChangeModel">
@@ -65,7 +65,8 @@
placeholder="璇烽�夋嫨鎸囨爣"
clearable
@change="handleTestStandardChange"
- style="width: 100%">
+ style="width: 100%"
+ :disabled="isViewMode">
<el-option v-for="item in testStandardOptions"
:key="item.id"
:label="item.standardName || item.standardNo"
@@ -93,7 +94,7 @@
placeholder="璇疯緭鍏�"
clearable
:precision="2"
- :disabled="processQuantityDisabled" />
+ :disabled="isViewMode || processQuantityDisabled" />
</el-form-item>
</el-col>
</el-row>
@@ -108,7 +109,8 @@
placeholder="璇疯緭鍏�"
clearable
:precision="2"
- @change="handleQualifiedQuantityChange" />
+ @change="handleQualifiedQuantityChange"
+ :disabled="isViewMode" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -121,7 +123,50 @@
placeholder="璇疯緭鍏�"
clearable
:precision="2"
- @change="handleUnqualifiedQuantityChange" />
+ @change="handleUnqualifiedQuantityChange"
+ :disabled="isViewMode" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <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"
+ v-if="operationType === 'edit'">
+ <el-col :span="12">
+ <el-form-item label="鏄惁鍏ュ簱锛�"
+ prop="isStockIn">
+ <el-switch v-model="form.isStockIn"
+ :active-value="1"
+ :inactive-value="0"
+ active-text="鏄�"
+ inactive-text="鍚�" />
+ <span class="stock-in-tip">閫夋嫨鈥滄槸鈥濆皢鐢熸垚鍏ュ簱璁板綍鍜屽簱瀛橈紝閫夋嫨鈥滃惁鈥濆彧淇濆瓨璐ㄦ璁板綍</span>
</el-form-item>
</el-col>
</el-row>
@@ -131,20 +176,13 @@
prop="checkCompany">
<el-input v-model="form.checkCompany"
placeholder="璇疯緭鍏�"
- clearable />
+ clearable
+ :disabled="isViewMode" />
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="妫�娴嬬粨鏋滐細"
- prop="checkResult">
- <el-select v-model="form.checkResult">
- <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>
@@ -154,7 +192,8 @@
prop="checkName">
<el-select v-model="form.checkName"
placeholder="璇烽�夋嫨"
- clearable>
+ clearable
+ :disabled="isViewMode">
<el-option v-for="item in userList"
:key="item.nickName"
:label="item.nickName"
@@ -171,7 +210,8 @@
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
clearable
- style="width: 100%" />
+ style="width: 100%"
+ :disabled="isViewMode" />
</el-form-item>
</el-col>
</el-row>
@@ -183,14 +223,18 @@
height="400">
<template #slot="{ row }">
<el-input v-model="row.testValue"
- clearable />
+ clearable
+ :disabled="isViewMode" />
</template>
</PIMTable>
<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>
@@ -240,7 +284,9 @@
qualifiedQuantity: "",
unqualifiedQuantity: "",
checkCompany: "",
- checkResult: "",
+ isSampling: 0,
+ samplingQuantity: "",
+ isStockIn: 0,
},
rules: {
checkTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
@@ -254,11 +300,45 @@
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 userList = ref([]);
const { form, rules } = toRefs(data);
+ // 鏄惁涓烘煡鐪嬫ā寮�
+ 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 processQuantityDisabled = computed(() => {
const v = form.value || {};
@@ -326,17 +406,21 @@
unit: "",
quantity: "",
checkCompany: "",
- checkResult: "",
+ isSampling: 0,
+ samplingQuantity: "",
+ isStockIn: 0,
};
testStandardOptions.value = [];
tableData.value = [];
// 鍏堢‘淇濅骇鍝佹爲宸插姞杞斤紝鍚﹀垯缂栬緫鏃朵骇鍝�/瑙勬牸鍨嬪彿鏃犳硶鍙嶆樉
await getProductOptions();
- if (operationType.value === "edit") {
+ if (operationType.value === "edit" || operationType.value === "view") {
// 鍏堜繚瀛� testStandardId锛岄伩鍏嶈娓呯┖
const savedTestStandardId = row.testStandardId;
- // 鍏堣缃〃鍗曟暟鎹紝浣嗘殏鏃舵竻绌� testStandardId锛岀瓑閫夐」鍔犺浇瀹屾垚鍚庡啀璁剧疆
- form.value = { ...row, testStandardId: "" };
+ const { passRate, ...rowWithoutPassRate } = row;
+ form.value = { ...rowWithoutPassRate, testStandardId: "" };
+ // 缂栬緫鏃�"鏄惁鍏ュ簱"榛樿鍚︼紝浠呬慨鏀硅川妫�璁板綍
+ form.value.isStockIn = 0;
currentProductId.value = row.productId || 0;
// 鍏抽敭锛氱紪杈戞椂鍔犺浇瑙勬牸鍨嬪彿涓嬫媺閫夐」锛屾墠鑳藉弽鏄� productModelId
if (currentProductId.value) {
@@ -345,7 +429,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);
@@ -357,6 +445,7 @@
// 鍏堝姞杞芥寚鏍囬�夐」
let params = {
productId: currentProductId.value,
+ productModelId: form.value.productModelId || undefined,
inspectType: 1,
process: form.value.process || "",
};
@@ -431,6 +520,8 @@
modelOptions.value.find(item => item.id == value)?.model || "";
form.value.unit =
modelOptions.value.find(item => item.id == value)?.unit || "";
+ // 瑙勬牸鍨嬪彿鍙樺寲鍚庢寜 浜у搧+瑙勬牸鍨嬪彿 閲嶆柊杩囨护鍙�夋寚鏍�
+ getList(value);
};
const handleQualifiedQuantityChange = (value) => {
@@ -525,7 +616,7 @@
}
});
};
- const getList = () => {
+ const getList = (modelId) => {
if (!currentProductId.value) {
testStandardOptions.value = [];
tableData.value = [];
@@ -534,6 +625,7 @@
const processName = form.value.process || "";
let params = {
productId: currentProductId.value,
+ productModelId: modelId ?? form.value.productModelId ?? undefined,
inspectType: 1,
process: processName,
};
@@ -557,6 +649,10 @@
getQualityTestStandardParamByTestStandardId(testStandardId)
.then(res => {
tableData.value = res.data || [];
+ tableData.value = tableData.value.map(item => ({
+ ...item,
+ id: null
+ }));
})
.catch(error => {
console.error("鑾峰彇鏍囧噯鍙傛暟澶辫触:", error);
@@ -570,6 +666,15 @@
qualityInspectParamInfo(id).then(res => {
tableData.value = res.data;
});
+ };
+ // 鏄惁鎶芥鍒囨崲
+ const handleSamplingChange = (value) => {
+ if (value !== 1) {
+ form.value.samplingQuantity = "";
+ nextTick(() => {
+ proxy.$refs?.formRef?.clearValidate?.("samplingQuantity");
+ });
+ }
};
// 鍏抽棴寮规
const closeDia = () => {
@@ -586,4 +691,13 @@
</script>
<style scoped>
+.sampling-radio-group {
+ height: 32px;
+}
+
+.stock-in-tip {
+ margin-left: 12px;
+ font-size: 12px;
+ color: #909399;
+}
</style>
--
Gitblit v1.9.3