From b176162c23294d8d1bfb9f09cf6bb759efb0124a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 15 七月 2026 14:10:26 +0800
Subject: [PATCH] 银川 1.库存现有量添加自定义出库入库功能 2.整理重复文件

---
 src/views/wls/materialstock/components/stock-adjust-modal.vue |  205 ++++++++++++++++++++++++++++++++-------------------
 1 files changed, 129 insertions(+), 76 deletions(-)

diff --git a/src/views/wls/materialstock/components/stock-adjust-modal.vue b/src/views/wls/materialstock/components/stock-adjust-modal.vue
index 31f31e9..aeb5883 100644
--- a/src/views/wls/materialstock/components/stock-adjust-modal.vue
+++ b/src/views/wls/materialstock/components/stock-adjust-modal.vue
@@ -4,7 +4,6 @@
   MaterialStockAdjustOutParams,
 } from '#/api/mes/wm/materialstock';
 import type { MdmItemApi } from '#/api/mdm/item';
-import type { MdmItemBatchConfigApi } from '#/api/mes/md/item-batch-config';
 import type { VbenFormSchema } from '#/adapter/form';
 
 import { ref } from 'vue';
@@ -20,9 +19,8 @@
   adjustMaterialStockOut,
 } from '#/api/mes/wm/materialstock';
 import { getItem } from '#/api/mdm/item';
-import { getItemBatchConfigByItemId } from '#/api/mes/md/item-batch-config';
 import { MdmItemSelect } from '#/views/basicData/mdm/components';
-import { MdVendorSelect } from '#/views/mes/md/vendor/components';
+import { ErpSupplierSelect } from '#/views/erp/purchase/supplier/components';
 import BatchConfigDisplay from './batch-config-display.vue';
 import {
   WmWarehouseAreaSelect,
@@ -44,56 +42,45 @@
 const batchEnabled = ref(false);
 // 鏄惁鎵嬪姩濉啓鎵规鍙�
 const manualBatchEntry = ref(false);
-// 鐗╂枡鎵规閰嶇疆
-const batchConfig = ref<MdmItemBatchConfigApi.ItemBatchConfig | null>(null);
 // 鎵规閰嶇疆灞曠ず缁勪欢寮曠敤
 const batchConfigDisplayRef = ref<InstanceType<typeof BatchConfigDisplay>>();
 
 // 鏍囬
 const modalTitle = ref('搴撳瓨璋冩暣');
 
-/** 鍔犺浇鐗╂枡鎵规閰嶇疆骞舵洿鏂板瓧娈垫樉绀� */
-async function loadBatchConfigAndUpdateFields(itemId: number) {
-  try {
-    const config = await getItemBatchConfigByItemId(itemId);
-    batchConfig.value = config;
-  } catch {
-    batchConfig.value = null;
-  }
-  await updateBatchFields();
-}
-
-/** 鏇存柊鎵规瀛楁鏄剧ず锛堟牴鎹厤缃睍绀哄凡鍚敤鐨勫睘鎬э級 */
+/** 鏇存柊鎵规瀛楁鏄剧ず锛堟牴鎹墿鏂欐暟鎹腑鐨勬壒娆¢厤缃睍绀哄凡鍚敤鐨勫睘鎬э級 */
 async function updateBatchFields() {
   const enabled = selectedItem.value?.isBatchManaged === true;
   batchEnabled.value = enabled;
 
   if (!enabled) {
-    // 闅愯棌鎵�鏈夋壒娆$浉鍏冲瓧娈�
     formApi.updateSchema([
       { fieldName: 'batchCode', dependencies: { show: () => false } },
+      { fieldName: 'manualBatchEntry', dependencies: { show: () => false } },
       { fieldName: 'produceDate', dependencies: { show: () => false } },
       { fieldName: 'expireDate', dependencies: { show: () => false } },
-      { fieldName: 'manualBatchEntry', dependencies: { show: () => false } },
+      { fieldName: 'receiptDate', dependencies: { show: () => false } },
       { fieldName: 'vendorId', dependencies: { show: () => true } },
+      { fieldName: 'purchaseOrderCode', dependencies: { show: () => false } },
+      { fieldName: 'lotNumber', dependencies: { show: () => false } },
+      { fieldName: 'qualityStatus', dependencies: { show: () => false } },
     ]);
     return;
   }
 
-  // 鍚敤鎵规绠$悊锛屾牴鎹厤缃樉绀哄瓧娈�
-  const config = batchConfig.value;
+  const item = selectedItem.value;
   const isIn = operateType.value === 1;
 
-  // 鏄惁鎵嬪姩濉啓鎵规鍙锋帶鍒舵壒娆″彿瀛楁鐨勬樉绀�
-  const showBatchCode = manualBatchEntry.value;
-  const showProduceDate = isIn && !!config?.produceDateFlag;
-  const showExpireDate = isIn && !!config?.expireDateFlag;
-
   formApi.updateSchema([
-    { fieldName: 'batchCode', dependencies: { show: () => showBatchCode } },
-    { fieldName: 'produceDate', dependencies: { show: () => showProduceDate } },
-    { fieldName: 'expireDate', dependencies: { show: () => showExpireDate } },
+    { fieldName: 'batchCode', dependencies: { show: () => manualBatchEntry.value } },
     { fieldName: 'manualBatchEntry', dependencies: { show: () => true } },
+    { fieldName: 'produceDate', dependencies: { show: () => isIn && !!item?.produceDateFlag } },
+    { fieldName: 'expireDate', dependencies: { show: () => isIn && !!item?.expireDateFlag } },
+    { fieldName: 'receiptDate', dependencies: { show: () => isIn && !!item?.receiptDateFlag } },
+    { fieldName: 'vendorId', dependencies: { show: () => !isIn || !!item?.vendorFlag } },
+    { fieldName: 'purchaseOrderCode', dependencies: { show: () => isIn && !!item?.purchaseOrderCodeFlag } },
+    { fieldName: 'lotNumber', dependencies: { show: () => isIn && !!item?.lotNumberFlag } },
+    { fieldName: 'qualityStatus', dependencies: { show: () => isIn && !!item?.qualityStatusFlag } },
   ]);
 }
 
@@ -103,10 +90,9 @@
   if (item?.id) {
     const itemDetail = await getItem(item.id);
     selectedItem.value = itemDetail;
-    // 鍔犺浇鐗╂枡鎵规閰嶇疆骞舵洿鏂板瓧娈�
-    await loadBatchConfigAndUpdateFields(item.id);
+    // 鏍规嵁鐗╂枡鏁版嵁鏇存柊鎵规瀛楁
+    await updateBatchFields();
   } else {
-    batchConfig.value = null;
     batchEnabled.value = false;
   }
   // 娓呯┖鎵规鐩稿叧鍊�
@@ -290,17 +276,77 @@
       },
       dependencies: {
         triggerFields: ['itemId'],
-        show: () => false, // 榛樿闅愯棌
+        show: () => false,
+      },
+    },
+    // 鍏ュ簱鏃ユ湡锛堟牴鎹壒娆¢厤缃樉绀猴紝浠呭叆搴擄級
+    {
+      fieldName: 'receiptDate',
+      label: '鍏ュ簱鏃ユ湡',
+      component: 'DatePicker',
+      componentProps: {
+        placeholder: '璇烽�夋嫨鍏ュ簱鏃ユ湡',
+        format: 'YYYY-MM-DD',
+        valueFormat: 'YYYY-MM-DD',
+      },
+      dependencies: {
+        triggerFields: ['itemId'],
+        show: () => false,
       },
     },
     {
       fieldName: 'vendorId',
       label: '渚涘簲鍟�',
-      component: markRaw(MdVendorSelect),
+      component: markRaw(ErpSupplierSelect),
       componentProps: {
         placeholder: '璇烽�夋嫨渚涘簲鍟�',
       },
       rules: 'selectRequired',
+    },
+    // 閲囪喘璁㈠崟鍙凤紙鏍规嵁鎵规閰嶇疆鏄剧ず锛屼粎鍏ュ簱锛�
+    {
+      fieldName: 'purchaseOrderCode',
+      label: '閲囪喘璁㈠崟鍙�',
+      component: 'Input',
+      componentProps: {
+        placeholder: '璇疯緭鍏ラ噰璐鍗曞彿',
+      },
+      dependencies: {
+        triggerFields: ['itemId'],
+        show: () => false,
+      },
+    },
+    // 鐢熶骇鎵瑰彿锛堟牴鎹壒娆¢厤缃樉绀猴紝浠呭叆搴擄級
+    {
+      fieldName: 'lotNumber',
+      label: '鐢熶骇鎵瑰彿',
+      component: 'Input',
+      componentProps: {
+        placeholder: '璇疯緭鍏ョ敓浜ф壒鍙�',
+      },
+      dependencies: {
+        triggerFields: ['itemId'],
+        show: () => false,
+      },
+    },
+    // 璐ㄩ噺鐘舵�侊紙鏍规嵁鎵规閰嶇疆鏄剧ず锛屼粎鍏ュ簱锛�
+    {
+      fieldName: 'qualityStatus',
+      label: '璐ㄩ噺鐘舵��',
+      component: 'Select',
+      componentProps: {
+        placeholder: '璇烽�夋嫨璐ㄩ噺鐘舵��',
+        allowClear: true,
+        options: [
+          { label: '鍚堟牸', value: 'QUALIFIED' },
+          { label: '涓嶅悎鏍�', value: 'UNQUALIFIED' },
+          { label: '寰呮', value: 'PENDING' },
+        ],
+      },
+      dependencies: {
+        triggerFields: ['itemId'],
+        show: () => false,
+      },
     },
     {
       fieldName: 'quantity',
@@ -355,7 +401,6 @@
       selectedWarehouse.value = null;
       selectedLocation.value = null;
       batchEnabled.value = false;
-      batchConfig.value = null;
       operateType.value = 1;
       modalTitle.value = '搴撳瓨璋冩暣';
       return;
@@ -365,9 +410,13 @@
     // 榛樿闅愯棌鎵规鐩稿叧瀛楁
     formApi.updateSchema([
       { fieldName: 'batchCode', dependencies: { show: () => false } },
+      { fieldName: 'manualBatchEntry', dependencies: { show: () => false } },
       { fieldName: 'produceDate', dependencies: { show: () => false } },
       { fieldName: 'expireDate', dependencies: { show: () => false } },
-      { fieldName: 'manualBatchEntry', dependencies: { show: () => false } },
+      { fieldName: 'receiptDate', dependencies: { show: () => false } },
+      { fieldName: 'purchaseOrderCode', dependencies: { show: () => false } },
+      { fieldName: 'lotNumber', dependencies: { show: () => false } },
+      { fieldName: 'qualityStatus', dependencies: { show: () => false } },
     ]);
     // 閲嶇疆鎵嬪姩濉啓鎵规鍙风姸鎬�
     manualBatchEntry.value = false;
@@ -383,7 +432,7 @@
       if (data.itemId) {
         const itemDetail = await getItem(data.itemId);
         selectedItem.value = itemDetail;
-        await loadBatchConfigAndUpdateFields(data.itemId);
+        await updateBatchFields();
       }
     }
   },
@@ -399,35 +448,36 @@
 
   const values = await formApi.getValues();
 
-  const {
-    itemId,
-    warehouseId,
-    locationId,
-    areaId,
-    batchCode,
-    produceDate,
-    expireDate,
-    vendorId,
-    quantity,
-    reason,
-  } = values;
-
   // 鍚敤鎵规绠$悊鏃剁殑鏍¢獙
   if (batchEnabled.value) {
-    // 鎵嬪姩濉啓鎵规鍙锋椂锛屾壒娆″彿蹇呭~
-    if (manualBatchEntry.value && !batchCode) {
+    if (manualBatchEntry.value && !values.batchCode) {
       message.error('璇疯緭鍏ユ壒娆″彿');
       return;
     }
-    // 鏍规嵁鎵规閰嶇疆鏍¢獙蹇呭~瀛楁锛堜粎鍏ュ簱锛�
     if (operateType.value === 1) {
-      const config = batchConfig.value;
-      if (config?.produceDateFlag && !produceDate) {
+      const item = selectedItem.value;
+      if (item?.produceDateFlag && !values.produceDate) {
         message.error('璇烽�夋嫨鐢熶骇鏃ユ湡');
         return;
       }
-      if (config?.expireDateFlag && !expireDate) {
+      if (item?.expireDateFlag && !values.expireDate) {
         message.error('璇烽�夋嫨鏈夋晥鏈�');
+        return;
+      }
+      if (item?.receiptDateFlag && !values.receiptDate) {
+        message.error('璇烽�夋嫨鍏ュ簱鏃ユ湡');
+        return;
+      }
+      if (item?.purchaseOrderCodeFlag && !values.purchaseOrderCode) {
+        message.error('璇疯緭鍏ラ噰璐鍗曞彿');
+        return;
+      }
+      if (item?.lotNumberFlag && !values.lotNumber) {
+        message.error('璇疯緭鍏ョ敓浜ф壒鍙�');
+        return;
+      }
+      if (item?.qualityStatusFlag && !values.qualityStatus) {
+        message.error('璇烽�夋嫨璐ㄩ噺鐘舵��');
         return;
       }
     }
@@ -439,30 +489,34 @@
     if (type === 1) {
       // 鍏ュ簱
       const params: MaterialStockAdjustInParams = {
-        itemId,
-        warehouseId,
-        locationId,
-        areaId,
-        batchCode,
-        produceDate,
-        expireDate,
-        vendorId,
-        quantity,
-        reason,
+        itemId: values.itemId,
+        warehouseId: values.warehouseId,
+        locationId: values.locationId,
+        areaId: values.areaId,
+        batchCode: values.batchCode,
+        produceDate: values.produceDate,
+        expireDate: values.expireDate,
+        receiptDate: values.receiptDate,
+        vendorId: values.vendorId,
+        purchaseOrderCode: values.purchaseOrderCode,
+        lotNumber: values.lotNumber,
+        qualityStatus: values.qualityStatus,
+        quantity: values.quantity,
+        reason: values.reason,
       };
       await adjustMaterialStockIn(params);
       message.success('鍏ュ簱鎴愬姛');
     } else {
       // 鍑哄簱
       const params: MaterialStockAdjustOutParams = {
-        itemId,
-        warehouseId,
-        locationId,
-        areaId,
-        batchCode,
-        vendorId,
-        quantity,
-        reason,
+        itemId: values.itemId,
+        warehouseId: values.warehouseId,
+        locationId: values.locationId,
+        areaId: values.areaId,
+        batchCode: values.batchCode,
+        vendorId: values.vendorId,
+        quantity: values.quantity,
+        reason: values.reason,
       };
       await adjustMaterialStockOut(params);
       message.success('鍑哄簱鎴愬姛');
@@ -481,8 +535,7 @@
     <Form class="mx-4" />
     <BatchConfigDisplay
       ref="batchConfigDisplayRef"
-      :item-id="selectedItem?.id"
-      :is-batch-managed="batchEnabled"
+      :item="selectedItem"
     />
   </Modal>
 </template>

--
Gitblit v1.9.3