From 5091775bc441fa89d091be071204a76c4e188dfc Mon Sep 17 00:00:00 2001 From: hwj Date: Mon, 6 Jul 2026 18:02:19 +0800 Subject: [PATCH] =?UTF-8?q?style=EF=BC=9A=E5=87=BA=E5=BA=93=E5=8D=95?= =?UTF-8?q?=E6=8D=AE-=E6=B7=BB=E5=8A=A0=E9=94=81=E5=AE=9A=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E6=95=B0=E9=87=8F=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/erp/stock/pallet/index.ts | 1 + src/locales/en.ts | 5 ++- src/locales/zh-CN.ts | 4 +- .../out/components/StockOutItemForm.vue | 33 +++++++++++++++ .../stock/out/components/StockOutItemForm.vue | 40 ++++++++++++++----- src/views/erp/stock/out/index.vue | 29 ++++++++++++-- 6 files changed, 97 insertions(+), 15 deletions(-) diff --git a/src/api/erp/stock/pallet/index.ts b/src/api/erp/stock/pallet/index.ts index 17edb1a0..147fc105 100644 --- a/src/api/erp/stock/pallet/index.ts +++ b/src/api/erp/stock/pallet/index.ts @@ -14,6 +14,7 @@ export interface PalletVO { planCode?: string productId?: number | string productCount?: number | string + lockedPackageCount?: number | string qrcode?: string templateJson?: string | any purchaseDate?: string diff --git a/src/locales/en.ts b/src/locales/en.ts index 1d5e115b..6de60ba6 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -798,6 +798,8 @@ export default { selectedPallets: 'Selected Pallets', packageCount: 'Package Count', outPackageCount: 'Outbound Package Count', + outLockedPackageCount: 'Outbound Locked Package Count', + outPackageCountExceededWarning: 'Outbound package count cannot exceed package count minus outbound locked package count. It has been adjusted to {count}.', inPackageCount: 'Inbound Package Count', inItemCount: 'Inbound Count', inCount: 'Inbound Quantity', @@ -847,8 +849,7 @@ export default { validatorOutboundPurposeRequired: 'Outbound purpose is required', validatorOutModeRequired: 'Outbound mode is required', validatorCountRequired: 'Quantity is required', - stockCountExceededWarning: - 'Quantity cannot exceed stock. It has been adjusted to stock quantity.' + stockCountExceededWarning: 'Quantity cannot exceed available stock. It has been adjusted to available stock quantity.' }, Check: { no: 'Check No', diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index cbc39d7e..b58866e8 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -798,6 +798,8 @@ export default { selectedPallets: '已选托盘', packageCount: '包数', outPackageCount: '出库包数', + outLockedPackageCount: '出库锁定包数', + outPackageCountExceededWarning: '出库包数不能大于包数减出库锁定包数,已自动调整为{count}', inPackageCount: '入库包数', inItemCount: '入库个数', inCount: '入库数量', @@ -847,7 +849,7 @@ export default { validatorOutboundPurposeRequired: '出库用途不能为空', validatorOutModeRequired: '出库方式不能为空', validatorCountRequired: '产品数量不能为空', - stockCountExceededWarning: '数量不能超出库存,已自动调整为库存数量' + stockCountExceededWarning: '数量不能超出可用库存,已自动调整为可用库存数量' }, Check: { no: '盘点单号', diff --git a/src/views/erp/component/out/components/StockOutItemForm.vue b/src/views/erp/component/out/components/StockOutItemForm.vue index 317a1c72..92b34712 100644 --- a/src/views/erp/component/out/components/StockOutItemForm.vue +++ b/src/views/erp/component/out/components/StockOutItemForm.vue @@ -61,6 +61,13 @@ + + + @@ -143,6 +152,7 @@ import { } from '@/utils' const { t } = useI18n() +const message = useMessage() const props = defineProps<{ items: undefined @@ -236,6 +246,7 @@ const handleAdd = () => { productBarCode: undefined, // 产品条码 productPrice: undefined, stockCount: undefined, + lockedStockCount: undefined, count: 1, totalPrice: undefined, remark: undefined @@ -249,6 +260,23 @@ const handleDelete = (index) => { } /** 处理仓库变更 */ +const getAvailableStockCount = (row) => { + const stockCount = Number(row.stockCount) + if (!Number.isFinite(stockCount)) return undefined + const lockedStockCount = Number(row.lockedStockCount) + return Math.max(stockCount - (Number.isFinite(lockedStockCount) ? lockedStockCount : 0), 0) +} + +const handleCountChange = (row, showWarning = true) => { + const availableStockCount = getAvailableStockCount(row) + const count = Number(row.count) + if (availableStockCount === undefined || !Number.isFinite(count) || count <= availableStockCount) return + row.count = availableStockCount + if (showWarning) { + message.warning(t('ErpStock.Item.stockCountExceededWarning')) + } +} + const onChangeWarehouse = (warehouseId, row) => { // 加载库存 setStockCount(row) @@ -269,14 +297,19 @@ const onChangeProduct = (productId, row) => { /** 加载库存 */ const setStockCount = async (row) => { if (!row.productId || !row.warehouseId) { + row.stockCount = 0 + row.lockedStockCount = 0 return } const stock = await StockApi.getStock2(row.productId, row.warehouseId) row.stockCount = stock ? stock.count : 0 + row.lockedStockCount = stock ? stock.lockedStockCount || 0 : 0 + handleCountChange(row, false) } /** 表单校验 */ const validate = () => { + formData.value.forEach((row) => handleCountChange(row, false)) return formRef.value.validate() } defineExpose({ validate }) diff --git a/src/views/erp/stock/out/components/StockOutItemForm.vue b/src/views/erp/stock/out/components/StockOutItemForm.vue index a98f1ffc..34ebd67d 100644 --- a/src/views/erp/stock/out/components/StockOutItemForm.vue +++ b/src/views/erp/stock/out/components/StockOutItemForm.vue @@ -173,7 +173,7 @@ + class="quantity-input !w-100%" @change="handleInputCountBlur(row)" @blur="handleInputCountBlur(row)"> @@ -314,7 +314,8 @@ - +