From 5f94854ed49ce166eeb0a6651b2a421222bea367 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 31 三月 2026 10:43:58 +0800
Subject: [PATCH] fix: 生产过程中添加批号、供应商
---
src/views/productionManagement/productionOrder/MaterialRequisitionDialog.vue | 96 ++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 84 insertions(+), 12 deletions(-)
diff --git a/src/views/productionManagement/productionOrder/MaterialRequisitionDialog.vue b/src/views/productionManagement/productionOrder/MaterialRequisitionDialog.vue
index 98d4f71..497ea82 100644
--- a/src/views/productionManagement/productionOrder/MaterialRequisitionDialog.vue
+++ b/src/views/productionManagement/productionOrder/MaterialRequisitionDialog.vue
@@ -2,7 +2,7 @@
<el-dialog
v-model="visible"
title="棰嗘枡"
- width="1000px"
+ width="1400px"
top="3vh"
:close-on-click-modal="false"
destroy-on-close
@@ -19,11 +19,8 @@
<el-table-column prop="productName" label="浜у搧鍚嶇О" min-width="150" />
<el-table-column prop="model" label="鍨嬪彿" min-width="150" />
<el-table-column prop="unit" label="鍗曚綅" width="80" align="center" />
- <!-- <el-table-column prop="qualitity" label="鍙鐢ㄦ暟閲�" width="100" align="center">
- <template #default="{ row }">
- {{ row.qualitity || 0 }}
- </template>
- </el-table-column> -->
+ <el-table-column prop="customer" label="渚涘簲鍟�" min-width="160" show-overflow-tooltip />
+ <el-table-column prop="batchNo" label="鎵瑰彿" min-width="180" show-overflow-tooltip />
<el-table-column prop="requisitionQty" label="棰嗙敤鏁伴噺" width="120" align="center">
<template #default="{ row }">
<el-input-number
@@ -61,13 +58,43 @@
<el-dialog
v-model="addDialogVisible"
title="閫夋嫨鍘熸潗鏂�"
- width="800px"
+ width="1000px"
top="5vh"
:close-on-click-modal="false"
append-to-body
>
+ <div class="material-filter" style="margin-bottom: 20px;">
+ <el-select
+ v-model="filterSupplier"
+ placeholder="渚涘簲鍟�"
+ clearable
+ filterable
+ style="width: 220px"
+ >
+ <el-option
+ v-for="opt in supplierFilterOptions"
+ :key="opt"
+ :label="opt"
+ :value="opt"
+ />
+ </el-select>
+ <el-select
+ v-model="filterBatchNo"
+ placeholder="鎵瑰彿"
+ clearable
+ filterable
+ style="width: 220px; margin-left: 12px"
+ >
+ <el-option
+ v-for="opt in batchFilterOptions"
+ :key="opt"
+ :label="opt"
+ :value="opt"
+ />
+ </el-select>
+ </div>
<el-table
- :data="availableMaterials"
+ :data="filteredMaterials"
border
style="width: 100%"
height="50vh"
@@ -78,6 +105,8 @@
<el-table-column prop="productName" label="浜у搧鍚嶇О" min-width="150" />
<el-table-column prop="model" label="鍨嬪彿" min-width="150" />
<el-table-column prop="unit" label="鍗曚綅" width="80" align="center" />
+ <el-table-column prop="customer" label="渚涘簲鍟�" min-width="160" show-overflow-tooltip />
+ <el-table-column prop="batchNo" label="鎵瑰彿" min-width="180" show-overflow-tooltip />
<!-- <el-table-column prop="qualitity" label="鍙鐢ㄦ暟閲�" width="100" align="center">
<template #default="{ row }">
{{ row.qualitity || 0 }}
@@ -129,6 +158,45 @@
const availableMaterials = ref([]);
const selectedMaterials = ref([]);
+// 閫夋嫨寮圭獥绛涢�夋潯浠讹紙渚涘簲鍟�/鎵瑰彿锛�
+const filterSupplier = ref('');
+const filterBatchNo = ref('');
+
+// 灏嗗悗绔彲鑳借繑鍥炵殑瀛楁鍋氫竴涓嬪綊涓�鍖栵細渚涘簲鍟�/鎵瑰彿瀛楁鍚嶅彲鑳戒笉涓�鑷�
+const normalizeMaterial = (m) => {
+ return {
+ ...m,
+ customer: m.customer ?? m.supplierName ?? '',
+ batchNo: m.batchNo ?? m.batchNumber ?? m.batch_number ?? m.lotNo ?? '',
+ };
+};
+
+const supplierFilterOptions = computed(() => {
+ return Array.from(new Set(availableMaterials.value.map((m) => m.customer).filter(Boolean)));
+});
+
+const batchFilterOptions = computed(() => {
+ const list = filterSupplier.value
+ ? availableMaterials.value.filter((m) => m.customer === filterSupplier.value)
+ : availableMaterials.value;
+ return Array.from(new Set(list.map((m) => m.batchNo).filter(Boolean)));
+});
+
+const filteredMaterials = computed(() => {
+ return availableMaterials.value.filter((m) => {
+ if (filterSupplier.value && m.customer !== filterSupplier.value) return false;
+ if (filterBatchNo.value && m.batchNo !== filterBatchNo.value) return false;
+ return true;
+ });
+});
+
+watch(filterSupplier, () => {
+ // 濡傛灉褰撳墠鈥滄壒鍙封�濅笉灞炰簬鎵�閫変緵搴斿晢锛屽垯娓呯┖
+ if (filterBatchNo.value && !batchFilterOptions.value.includes(filterBatchNo.value)) {
+ filterBatchNo.value = '';
+ }
+});
+
// 鐩戝惉寮规鎵撳紑锛屽姞杞芥暟鎹�
watch(() => props.modelValue, (val) => {
if (val && props.orderData) {
@@ -146,7 +214,7 @@
if (bomId) {
try {
const res = await getMaterials({ bomId });
- materialsFromApi = res.data || [];
+ materialsFromApi = (res.data || []).map(normalizeMaterial);
} catch (error) {
console.error('鏌ヨ鍘熸潗鏂欏垪琛ㄥけ璐�:', error);
}
@@ -164,7 +232,9 @@
return {
...savedItem,
qualitity: apiItem?.qualitity ?? savedItem.qualitity ?? 0,
- requisitionQty: savedItem.requisitionQty || 0
+ requisitionQty: savedItem.requisitionQty || 0,
+ customer: savedItem.customer ?? savedItem.supplierName ?? apiItem?.customer ?? '',
+ batchNo: savedItem.batchNo ?? savedItem.batchNumber ?? apiItem?.batchNo ?? '',
};
});
} catch (e) {
@@ -190,7 +260,9 @@
const res = await getMaterials({ bomId });
console.log('getMaterials杩斿洖鏁版嵁:', res.data);
// 鐩存帴灞曠ず鎵�鏈夋暟鎹紝涓嶈繃婊�
- availableMaterials.value = res.data || [];
+ availableMaterials.value = (res.data || []).map(normalizeMaterial);
+ filterSupplier.value = '';
+ filterBatchNo.value = '';
selectedMaterials.value = [];
addDialogVisible.value = true;
} catch (error) {
@@ -222,7 +294,7 @@
.map(item => ({
...item,
requisitionQty: 0,
- remark: ''
+ remark: '',
}));
if (newItems.length === 0) {
--
Gitblit v1.9.3