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