From fdd158306bf6dc3584f5110a385323f4a8dfb463 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 02 九月 2026 14:25:10 +0800
Subject: [PATCH] feat(wms): 重构仓库管理系统并优化图表显示
---
src/views/wls/salesnotice/modules/line-form.vue | 92 ++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 84 insertions(+), 8 deletions(-)
diff --git a/src/views/wls/salesnotice/modules/line-form.vue b/src/views/wls/salesnotice/modules/line-form.vue
index f33e49a..ddc7c5e 100644
--- a/src/views/wls/salesnotice/modules/line-form.vue
+++ b/src/views/wls/salesnotice/modules/line-form.vue
@@ -15,7 +15,12 @@
} from '#/api/mes/wm/salesnotice/line';
import { $t } from '#/locales';
-import { useLineFormSchema } from '../data';
+import {
+ loadAvailableQuantity,
+ loadQualifiedStockBatchOptions,
+ loadQualifiedStockItemOptions,
+ useLineFormSchema,
+} from '../data';
const emit = defineEmits(['success']);
const formData = ref<MesWmSalesNoticeLineApi.SalesNoticeLine>();
@@ -26,6 +31,26 @@
? $t('ui.actionTitle.edit', ['鍙戣揣閫氱煡鍗曡'])
: $t('ui.actionTitle.create', ['鍙戣揣閫氱煡鍗曡']);
});
+
+async function updateBatchOptions(itemId?: number) {
+ const batchOptions = itemId
+ ? await loadQualifiedStockBatchOptions(itemId)
+ : [];
+ formApi.updateSchema([
+ {
+ fieldName: 'batchId',
+ componentProps: { options: batchOptions },
+ },
+ ]);
+}
+
+async function refreshAvailableQuantity(itemId?: number, batchId?: number) {
+ const quantity = await loadAvailableQuantity(itemId, batchId);
+ await formApi.setFieldValue(
+ 'availableQuantity',
+ quantity > 0 ? `${quantity}` : undefined,
+ );
+}
const [Form, formApi] = useVbenForm({
commonConfig: {
@@ -38,6 +63,32 @@
layout: 'horizontal',
schema: useLineFormSchema(),
showDefaultActions: false,
+ handleValuesChange: async (values, fieldsChanged) => {
+ // setValues 缂栬緫鍥炲~鏃� itemId/batchId 鍚屾椂鍙樺寲锛屼笉娓呮壒娆′粎鍒锋柊閫夐」
+ const itemChanged = fieldsChanged.includes('itemId');
+ const batchChanged = fieldsChanged.includes('batchId');
+ if (itemChanged && batchChanged) {
+ await updateBatchOptions(values.itemId as number | undefined);
+ await refreshAvailableQuantity(
+ values.itemId as number | undefined,
+ values.batchId as number | undefined,
+ );
+ return;
+ }
+ if (itemChanged) {
+ await formApi.setFieldValue('batchId', undefined);
+ await updateBatchOptions(values.itemId as number | undefined);
+ await refreshAvailableQuantity(values.itemId as number | undefined);
+ return;
+ }
+ if (batchChanged) {
+ await updateBatchOptions(values.itemId as number | undefined);
+ await refreshAvailableQuantity(
+ values.itemId as number | undefined,
+ values.batchId as number | undefined,
+ );
+ }
+ },
wrapperClass: 'grid-cols-3',
});
@@ -48,9 +99,12 @@
return;
}
modalApi.lock();
- // 鎻愪氦琛ㄥ崟
- const data =
- (await formApi.getValues()) as MesWmSalesNoticeLineApi.SalesNoticeLine;
+ // 鎻愪氦琛ㄥ崟锛堝彲鍙戣揣鏁伴噺浠呬綔鎻愮ず锛屼笉鎻愪氦鍒板悗绔級
+ const values = (await formApi.getValues()) as MesWmSalesNoticeLineApi.SalesNoticeLine & {
+ availableQuantity?: unknown;
+ };
+ delete values.availableQuantity;
+ const data = values;
data.noticeId = noticeId.value;
try {
await (formData.value?.id
@@ -60,6 +114,15 @@
await modalApi.close();
emit('success');
message.success($t('ui.actionMessage.operationSuccess'));
+ } catch (error) {
+ const response = error as {
+ response?: { data?: { message?: string; msg?: string } };
+ };
+ message.error(
+ response.response?.data?.message ??
+ response.response?.data?.msg ??
+ '淇濆瓨澶辫触锛岃妫�鏌ユ寮忓簱搴撳瓨鏄惁鍏呰冻',
+ );
} finally {
modalApi.unlock();
}
@@ -72,14 +135,27 @@
// 鍔犺浇鏁版嵁
const data = modalApi.getData<{ id?: number; noticeId: number }>();
noticeId.value = data.noticeId;
- if (!data.id) {
- return;
- }
modalApi.lock();
try {
+ // 鐗╂枡閫夐」锛氫粎灞曠ず姝e紡搴撴湁搴撳瓨鐨勭墿鏂�
+ const itemOptions = await loadQualifiedStockItemOptions();
+ formApi.updateSchema([
+ {
+ fieldName: 'itemId',
+ componentProps: { options: itemOptions },
+ },
+ ]);
+ if (!data.id) {
+ return;
+ }
formData.value = await getSalesNoticeLine(data.id);
- // 璁剧疆鍒� values
+ // 璁剧疆鍒� values锛岃仈鍔ㄥ姞杞芥壒娆¢�夐」
await formApi.setValues(formData.value);
+ await updateBatchOptions(formData.value?.itemId);
+ await refreshAvailableQuantity(
+ formData.value?.itemId,
+ formData.value?.batchId,
+ );
} finally {
modalApi.unlock();
}
--
Gitblit v1.9.3