This commit is contained in:
zc
2026-03-06 15:54:36 +08:00
parent 60933ee1a6
commit b4ebebe2a8

View File

@@ -48,7 +48,7 @@
</a-form-item> </a-form-item>
</div> </div>
<div class="form-item"> <div class="form-item">
<a-form-item label="重量"> <a-form-item label="重量(g)">
<a-input v-model="formData.unitWeight" placeholder="Kg" disabled /> <a-input v-model="formData.unitWeight" placeholder="Kg" disabled />
</a-form-item> </a-form-item>
</div> </div>
@@ -58,8 +58,9 @@
<a-form-item label="物料编码"> <a-form-item label="物料编码">
<a-input <a-input
v-model="formData.inputMaterialCode" v-model="formData.inputMaterialCode"
placeholder="请使用扫码枪扫描物料编码" placeholder="请点击此处确保光标闪烁,并使用扫码枪扫描物料编码"
@change="handleMaterialCodeChange" @keydown="handleKeyDown"
@input="handleMaterialCodeChange"
/> />
</a-form-item> </a-form-item>
</div> </div>
@@ -128,13 +129,13 @@
</div> </div>
<div class="form-row"> <div class="form-row">
<div class="form-item"> <div class="form-item">
<label>计算重量:</label> <label>计算重量(g):</label>
<a-input v-model="calculatedWeight" placeholder="-" disabled /> <a-input v-model="calculatedWeight" placeholder="-" disabled />
</div> </div>
</div> </div>
<div class="form-row"> <div class="form-row">
<div class="form-item"> <div class="form-item">
<label>对应重量:</label> <label>对应重量(g):</label>
<a-input v-model="ahDeviceWeight" placeholder="-" disabled/> <a-input v-model="ahDeviceWeight" placeholder="-" disabled/>
</div> </div>
</div> </div>
@@ -172,8 +173,8 @@
<div class="completion-icon"> <div class="completion-icon">
<a-icon type="check-circle" :size="64" style="color: #52c41a;" /> <a-icon type="check-circle" :size="64" style="color: #52c41a;" />
</div> </div>
<h2>{{ workOrderResp.matchResult === '1' ? '创建成功' : '创建失败' }}</h2> <h2>{{ workOrderResp.matchResult === 'success' ? '创建成功' : '创建失败' }}</h2>
<p>{{ workOrderResp.matchResult === '1' ? '任务已成功创建' : '任务创建失败' }}以下是任务详情</p> <p>{{ workOrderResp.matchResult === 'success' ? '任务创建成功' : '任务创建失败' }}以下是任务详情</p>
<div class="completion-info"> <div class="completion-info">
<div class="info-item"> <div class="info-item">
<span class="label">任务工单号:</span> <span class="label">任务工单号:</span>
@@ -181,19 +182,23 @@
</div> </div>
<div class="info-item"> <div class="info-item">
<span class="label">物料名称:</span> <span class="label">物料名称:</span>
<span class="value">{{ workOrderResp.materialName }}</span> <span class="value">{{ formData.materialName }}</span>
</div> </div>
<div class="info-item"> <div class="info-item">
<span class="label">物料编码:</span> <span class="label">物料编码:</span>
<span class="value">{{ workOrderResp.encoding }}</span> <span class="value">{{ formData.encoding }}</span>
</div> </div>
<div class="info-item"> <div class="info-item">
<span class="label">物料规格:</span> <span class="label">物料规格:</span>
<span class="value">{{ workOrderResp.materialSpec }}</span> <span class="value">{{ formData.materialSpec }}</span>
</div> </div>
<div class="info-item"> <div class="info-item">
<span class="label">重量:</span> <span class="label">物料总个数:</span>
<span class="value">{{ workOrderResp.unitWeight }}</span> <span class="value">{{ workOrderResp.totalCount }}</span>
</div>
<div class="info-item">
<span class="label">物料总重量(g):</span>
<span class="value">{{ workOrderResp.totalWeight }}</span>
</div> </div>
</div> </div>
<div class="completion-actions"> <div class="completion-actions">
@@ -260,7 +265,7 @@ const workOrderResp = ref<WorkOrderResp>({
totalCount: '', totalCount: '',
createUserString: '', createUserString: '',
updateUserString: '', updateUserString: '',
matchResult: '' matchResult: 'failed'
}) })
@@ -293,13 +298,13 @@ const columns = [
className: 'green-bg' className: 'green-bg'
}, },
{ {
title: '重量', title: '重量(g)',
dataIndex: 'weight', dataIndex: 'weight',
key: 'weight', key: 'weight',
className: 'green-bg' className: 'green-bg'
}, },
{ {
title: '计算重量', title: '计算重量(g)',
dataIndex: 'calculatedWeight', dataIndex: 'calculatedWeight',
key: 'calculatedWeight', key: 'calculatedWeight',
className: 'green-bg' className: 'green-bg'
@@ -320,24 +325,67 @@ const columns = [
// 处理物料编码变化 // 防抖函数
const handleMaterialCodeChange = async () => { const debounce = <T extends (...args: any[]) => any>(func: T, delay: number): ((...args: Parameters<T>) => void) => {
if (formData.inputMaterialCode) { let timer: ReturnType<typeof setTimeout> | null = null;
try { return function(...args: Parameters<T>) {
await fetchMaterialData(formData.inputMaterialCode) if (timer) clearTimeout(timer);
} catch (error) { timer = setTimeout(() => {
console.error('获取物料数据失败:', error) func(...args);
} }, delay);
} else { };
};
// 原始的物料编码变化处理函数
const originalHandleMaterialCodeChange = async () => {
// 确保输入框内容是完整的物料编码
const materialCode = formData.inputMaterialCode?.trim();
// 无论是否有输入,先重置所有物料相关字段,确保新数据能完全覆盖旧数据
formData.encoding = ""; formData.encoding = "";
formData.materialName = ""; formData.materialName = "";
formData.materialSpec = ""; formData.materialSpec = "";
formData.unitWeight = 0; formData.unitWeight = 0;
formData.photoUrl = ""; formData.photoUrl = "";
formData.matchResult = ""; formData.matchResult = "";
// 如果有物料编码输入,获取物料数据
if (materialCode) {
try {
await fetchMaterialData(materialCode)
} catch (error) {
console.error('获取物料数据失败:', error)
// 即使获取失败,也保持字段为空,避免显示旧数据
}
} }
}; };
// 记录上次输入时间,用于判断是否是扫码枪输入
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) => { const fetchMaterialData = async (code: string) => {
getMaterialDetail(code).then(res => { getMaterialDetail(code).then(res => {
@@ -351,7 +399,7 @@ const fetchMaterialData = async (code: string) => {
formData.photoUrl = res.data?.photoUrl || ""; formData.photoUrl = res.data?.photoUrl || "";
// 假设后端返回比对结果 // 假设后端返回比对结果
// formData.matchResult = res.data.matchResult || 'failed' // 这里根据实际接口返回调整 // formData.matchResult = res.data.matchResult || 'failed' // 这里根据实际接口返回调整
formData.matchResult = res.data.matchResult || 'success' // 这里根据实际接口返回调整 formData.matchResult = res.data?.matchResult || 'success' // 这里根据实际接口返回调整
return true return true
} }
}); });
@@ -373,26 +421,26 @@ const handleNext = async () => {
materialName: formData.materialName, materialName: formData.materialName,
workOrderInfos: weighingList.value workOrderInfos: weighingList.value
} }
// 调用后端接口 // 调用后端接口
addWorkOrder(workOrderData).then(res => { addWorkOrder(workOrderData).then(res => {
if (res.code == '0') { if (res.code == '0') {
Notification.success({ Notification.success({
title: '操作成功', title: '操作成功',
content: `操作成功!` content: `工单创建成功!`
}) })
workOrderResp.value = res.data || {} workOrderResp.value.matchResult = 'success';
return true 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连接 // 关闭WebSocket连接
closeWebSocket() closeWebSocket()
// 跳转到完成页面 // 跳转到完成页面
activeStep.value++ activeStep.value++
return true
Message.success('工作订单创建成功') }
});
} catch (error) { } catch (error) {
console.error('创建工作订单失败:', error) console.error('创建工作订单失败:', error)
Message.error('创建工作订单失败') Message.error('创建工作订单失败')
@@ -444,6 +492,12 @@ const calculateWeight = () => {
// 处理确定 // 处理确定
const handleConfirm = () => { const handleConfirm = () => {
// 校验输入数量是否为空
if (!inputQuantity.value || inputQuantity.value.trim() === '') {
Message.error('请输入数量')
return
}
// 生成新的列表数据 // 生成新的列表数据
const newItem = { const newItem = {
key: (weighingList.value.length + 1).toString(), key: (weighingList.value.length + 1).toString(),
@@ -505,7 +559,6 @@ const establishWebSocket = () => {
} }
ws.value.onclose = () => { ws.value.onclose = () => {
Message.success('已和电子秤断开连接')
wsConnected.value = false wsConnected.value = false
} }
@@ -526,7 +579,6 @@ const closeWebSocket = () => {
ws.value.close() ws.value.close()
ws.value = null ws.value = null
wsConnected.value = false wsConnected.value = false
console.log('WebSocket连接已关闭')
} }
} }