From b4ebebe2a893fb8b5363714c2fe5b8b5256d1f94 Mon Sep 17 00:00:00 2001 From: zc Date: Fri, 6 Mar 2026 15:54:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/weightManage/index.vue | 132 +++++++++++++++++++++---------- 1 file changed, 92 insertions(+), 40 deletions(-) diff --git a/src/views/weightManage/index.vue b/src/views/weightManage/index.vue index 728a355..358f520 100644 --- a/src/views/weightManage/index.vue +++ b/src/views/weightManage/index.vue @@ -48,7 +48,7 @@
- +
@@ -58,8 +58,9 @@ @@ -128,13 +129,13 @@
- +
- +
@@ -172,8 +173,8 @@
-

{{ workOrderResp.matchResult === '1' ? '创建成功' : '创建失败' }}

-

{{ workOrderResp.matchResult === '1' ? '任务已成功创建' : '任务创建失败' }},以下是任务详情:

+

{{ workOrderResp.matchResult === 'success' ? '创建成功' : '创建失败' }}

+

{{ workOrderResp.matchResult === 'success' ? '任务创建成功' : '任务创建失败' }},以下是任务详情:

任务工单号: @@ -181,19 +182,23 @@
物料名称: - {{ workOrderResp.materialName }} + {{ formData.materialName }}
物料编码: - {{ workOrderResp.encoding }} + {{ formData.encoding }}
物料规格: - {{ workOrderResp.materialSpec }} + {{ formData.materialSpec }}
- 重量: - {{ workOrderResp.unitWeight }} + 物料总个数: + {{ workOrderResp.totalCount }} +
+
+ 物料总重量(g): + {{ workOrderResp.totalWeight }}
@@ -260,7 +265,7 @@ const workOrderResp = ref({ totalCount: '', createUserString: '', updateUserString: '', - matchResult: '' + matchResult: 'failed' }) @@ -293,13 +298,13 @@ const columns = [ className: 'green-bg' }, { - title: '重量', + title: '重量(g)', dataIndex: 'weight', key: 'weight', className: 'green-bg' }, { - title: '计算重量', + title: '计算重量(g)', dataIndex: 'calculatedWeight', key: 'calculatedWeight', className: 'green-bg' @@ -320,24 +325,67 @@ const columns = [ -// 处理物料编码变化 -const handleMaterialCodeChange = async () => { - if (formData.inputMaterialCode) { +// 防抖函数 +const debounce = any>(func: T, delay: number): ((...args: Parameters) => void) => { + let timer: ReturnType | null = null; + return function(...args: Parameters) { + if (timer) clearTimeout(timer); + timer = setTimeout(() => { + func(...args); + }, delay); + }; +}; + +// 原始的物料编码变化处理函数 +const originalHandleMaterialCodeChange = async () => { + // 确保输入框内容是完整的物料编码 + const materialCode = formData.inputMaterialCode?.trim(); + + // 无论是否有输入,先重置所有物料相关字段,确保新数据能完全覆盖旧数据 + formData.encoding = ""; + formData.materialName = ""; + formData.materialSpec = ""; + formData.unitWeight = 0; + formData.photoUrl = ""; + formData.matchResult = ""; + + // 如果有物料编码输入,获取物料数据 + if (materialCode) { try { - await fetchMaterialData(formData.inputMaterialCode) + await fetchMaterialData(materialCode) } catch (error) { console.error('获取物料数据失败:', error) + // 即使获取失败,也保持字段为空,避免显示旧数据 } - } else { - formData.encoding = ""; - formData.materialName = ""; - formData.materialSpec = ""; - formData.unitWeight = 0; - formData.photoUrl = ""; - formData.matchResult = ""; } }; +// 记录上次输入时间,用于判断是否是扫码枪输入 +let lastInputTime = 0; +// 记录输入内容,用于判断是否是新的扫码 +let previousInput = ''; + +// 处理键盘按下事件 +const handleKeyDown = (event: KeyboardEvent) => { + // 获取当前时间 + const currentTime = Date.now(); + + // 如果输入速度非常快(小于100ms),认为是扫码枪输入 + if (currentTime - lastInputTime < 100 && formData.inputMaterialCode) { + // 扫码枪通常会以回车键结束,这里不做处理 + } else if (event.key.length === 1 && !event.ctrlKey && !event.altKey) { + // 如果是新的输入(不是快速连续输入),清空输入框 + // 这样可以确保每次扫码都从空输入框开始 + formData.inputMaterialCode = ''; + } + + // 更新上次输入时间 + lastInputTime = currentTime; +}; + +// 带防抖的物料编码变化处理函数 +const handleMaterialCodeChange = debounce(originalHandleMaterialCodeChange, 500); // 500ms防抖延迟 + // 扫码核验获取物料信息 const fetchMaterialData = async (code: string) => { getMaterialDetail(code).then(res => { @@ -351,7 +399,7 @@ const fetchMaterialData = async (code: string) => { formData.photoUrl = res.data?.photoUrl || ""; // 假设后端返回比对结果 // formData.matchResult = res.data.matchResult || 'failed' // 这里根据实际接口返回调整 - formData.matchResult = res.data.matchResult || 'success' // 这里根据实际接口返回调整 + formData.matchResult = res.data?.matchResult || 'success' // 这里根据实际接口返回调整 return true } }); @@ -373,26 +421,26 @@ const handleNext = async () => { materialName: formData.materialName, workOrderInfos: weighingList.value } - // 调用后端接口 addWorkOrder(workOrderData).then(res => { if (res.code == '0') { Notification.success({ title: '操作成功', - content: `操作成功!` + content: `工单创建成功!` }) - workOrderResp.value = res.data || {} + workOrderResp.value.matchResult = 'success'; + workOrderResp.value.title = res.data?.title || ""; + workOrderResp.value.orderNo = res.data?.orderNo || ""; + workOrderResp.value.totalWeight = res.data?.totalWeight || ""; + workOrderResp.value.totalCount = res.data?.totalCount || ""; + + // 关闭WebSocket连接 + closeWebSocket() + // 跳转到完成页面 + activeStep.value++ return true } }); - - // 关闭WebSocket连接 - closeWebSocket() - - // 跳转到完成页面 - activeStep.value++ - - Message.success('工作订单创建成功') } catch (error) { console.error('创建工作订单失败:', error) Message.error('创建工作订单失败') @@ -444,6 +492,12 @@ const calculateWeight = () => { // 处理确定 const handleConfirm = () => { + // 校验输入数量是否为空 + if (!inputQuantity.value || inputQuantity.value.trim() === '') { + Message.error('请输入数量') + return + } + // 生成新的列表数据 const newItem = { key: (weighingList.value.length + 1).toString(), @@ -505,7 +559,6 @@ const establishWebSocket = () => { } ws.value.onclose = () => { - Message.success('已和电子秤断开连接') wsConnected.value = false } @@ -526,7 +579,6 @@ const closeWebSocket = () => { ws.value.close() ws.value = null wsConnected.value = false - console.log('WebSocket连接已关闭') } }