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