From 8b7c6bb480070a5ee92af42178a5fe7dad2163cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=B8=E7=86=9F=E5=90=B4=E5=BD=A6=E7=A5=96?= Date: Mon, 8 Dec 2025 17:24:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=87=E7=AD=BE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/warehouse/pallet.js | 6 + src/views/modules/warehouse/pallet.vue | 210 ++++++++++++++++++++++++- 2 files changed, 210 insertions(+), 6 deletions(-) diff --git a/src/api/warehouse/pallet.js b/src/api/warehouse/pallet.js index da73dcc..d0044c8 100644 --- a/src/api/warehouse/pallet.js +++ b/src/api/warehouse/pallet.js @@ -32,3 +32,9 @@ export const getPalletFamilyList = data => createAPI('warehouse/pallet/getPallet // 获取托盘类型列表 - rqrq export const getPalletTypeList = data => createAPI('warehouse/pallet/getPalletTypeList', 'POST', data) + +// 获取各类托盘的最大编号信息(用于批量生成) - rqrq +export const getMaxPalletNoByFamily = data => createAPI('warehouse/pallet/getMaxPalletNoByFamily', 'POST', data) + +// 批量生成托盘 - rqrq +export const batchGeneratePallet = data => createAPI('warehouse/pallet/batchGeneratePallet', 'POST', data) \ No newline at end of file diff --git a/src/views/modules/warehouse/pallet.vue b/src/views/modules/warehouse/pallet.vue index 4585c5d..8939ed2 100644 --- a/src/views/modules/warehouse/pallet.vue +++ b/src/views/modules/warehouse/pallet.vue @@ -61,10 +61,12 @@ - 新增 - {{ buttons.deleteList}} - + + + + + + 批量新增托盘 @@ -100,7 +102,7 @@ label="操作"> @@ -259,6 +261,54 @@ + + + +
+ +
+ 托盘类型 + 当前数量 + 需要新增 +
+ + +
+ + {{ item.palletFamilyDesc }} + ({{ item.prefix }}) + + + {{ item.totalCount || 0 }} + +
+ + +
+
+ + +
+ 单次每种类型最多新增1000个 +
+
+ + +
+ @@ -277,7 +327,9 @@ import { getPalletStatusOptions, getUserAuthorizedSites, getPalletFamilyList, - getPalletTypeList + getPalletTypeList, + getMaxPalletNoByFamily, + batchGeneratePallet } from '@/api/warehouse/pallet.js' export default { @@ -493,6 +545,14 @@ export default { status: [ { required: true, message: '托盘状态不能为空', trigger: 'change' } ] + }, + // 批量新增弹窗状态 - rqrq + batchGenerateDialog: { + visible: false, + loading: false, + saving: false, + site: '', + palletNoList: [] // 各类托盘编号信息列表 } } }, @@ -881,6 +941,144 @@ export default { json += "}" let s = eval("(" + json + ")") return s + }, + // 打开批量新增弹窗 - rqrq + openBatchGenerateDialog() { + // 从store获取当前工厂 - rqrq + this.batchGenerateDialog.site = this.$store.state.user.site + this.batchGenerateDialog.palletNoList = [] + this.batchGenerateDialog.saving = false + this.batchGenerateDialog.visible = true + // 自动查询托盘数量 - rqrq + this.loadPalletMaxNos() + }, + // 加载托盘最大编号数据 - rqrq + loadPalletMaxNos() { + this.batchGenerateDialog.loading = true + getMaxPalletNoByFamily({ site: this.batchGenerateDialog.site }).then(({data}) => { + this.batchGenerateDialog.loading = false + if (data && data.code === 0) { + this.batchGenerateDialog.palletNoList = (data.rows || []).map(item => ({ + ...item, + generateCount: null + })) + } else { + this.$message.error(data.msg || '获取托盘编号信息失败') + this.batchGenerateDialog.palletNoList = [] + } + }).catch(() => { + this.batchGenerateDialog.loading = false + this.$message.error('获取托盘编号信息失败') + this.batchGenerateDialog.palletNoList = [] + }) + }, + // 校验新增数量 - rqrq + validateCount(item) { + if (item.generateCount !== null && item.generateCount !== '') { + let val = parseInt(item.generateCount) + if (isNaN(val) || val < 0) { + item.generateCount = null + } else if (val > 1000) { + item.generateCount = 1000 + this.$message.warning('单次最多新增1000个') + } else { + item.generateCount = val + } + } + }, + // 执行批量生成 - rqrq + doBatchGenerate() { + // 1. 校验工厂 - rqrq + if (!this.batchGenerateDialog.site) { + this.$message.warning('请先选择工厂') + return + } + + // 2. 校验是否有需要生成的数量 - rqrq + const generateItems = this.batchGenerateDialog.palletNoList.filter(item => + item.generateCount !== null && item.generateCount !== '' && parseInt(item.generateCount) > 0 + ) + if (generateItems.length === 0) { + this.$message.warning('请至少输入一种托盘的新增数量') + return + } + + // 3. 校验数量不超过1000 - rqrq + for (let item of generateItems) { + if (parseInt(item.generateCount) > 1000) { + this.$message.error(`${item.palletFamilyDesc}新增数量不能超过1000`) + return + } + } + + // 4. 确认提示 - rqrq + let confirmMsg = '确定要生成以下托盘吗?\n\n' + generateItems.forEach(item => { + confirmMsg += `${item.palletFamilyDesc}(${item.prefix}): ${item.generateCount}个\n` + }) + + this.$confirm(confirmMsg, '确认批量生成', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.executeBatchGenerate(generateItems) + }).catch(() => {}) + }, + // 执行批量生成请求 - rqrq + async executeBatchGenerate(generateItems) { + this.batchGenerateDialog.saving = true + + let successCount = 0 + let failedCount = 0 + let resultMsg = '' + + // 依次生成每种类型的托盘 - rqrq + for (let item of generateItems) { + try { + const { data } = await batchGeneratePallet({ + site: this.batchGenerateDialog.site, + palletFamily: item.palletFamily, + count: item.generateCount, + username: this.$store.state.user.name + }) + + if (data && data.code === 0) { + successCount++ + resultMsg += `✓ ${item.palletFamilyDesc}: 生成${data.count}个 (${data.startPalletId} ~ ${data.endPalletId})\n` + } else { + failedCount++ + resultMsg += `✗ ${item.palletFamilyDesc}: ${data.msg || '生成失败'}\n` + } + } catch (e) { + failedCount++ + resultMsg += `✗ ${item.palletFamilyDesc}: 请求异常\n` + } + } + + this.batchGenerateDialog.saving = false + + // 显示结果 - rqrq + if (failedCount === 0) { + this.$alert(resultMsg, '生成成功', { + confirmButtonText: '确定', + type: 'success', + callback: () => { + this.batchGenerateDialog.visible = false + this.getDataList() + } + }) + } else { + this.$alert(resultMsg, `生成结果(成功${successCount},失败${failedCount})`, { + confirmButtonText: '确定', + type: failedCount === generateItems.length ? 'error' : 'warning', + callback: () => { + // 刷新编号信息 - rqrq + this.onBatchSiteChange(this.batchGenerateDialog.site) + this.getDataList() + } + }) + } } }, created() {