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>
</div>
<div class="form-item">
<a-form-item label="重量">
<a-form-item label="重量(g)">
<a-input v-model="formData.unitWeight" placeholder="Kg" disabled />
</a-form-item>
</div>
@@ -58,8 +58,9 @@
<a-form-item label="物料编码">
<a-input
v-model="formData.inputMaterialCode"
placeholder="请使用扫码枪扫描物料编码"
@change="handleMaterialCodeChange"
placeholder="请点击此处确保光标闪烁,并使用扫码枪扫描物料编码"
@keydown="handleKeyDown"
@input="handleMaterialCodeChange"
/>
</a-form-item>
</div>
@@ -128,13 +129,13 @@
</div>
<div class="form-row">
<div class="form-item">
<label>计算重量:</label>
<label>计算重量(g):</label>
<a-input v-model="calculatedWeight" placeholder="-" disabled />
</div>
</div>
<div class="form-row">
<div class="form-item">
<label>对应重量:</label>
<label>对应重量(g):</label>
<a-input v-model="ahDeviceWeight" placeholder="-" disabled/>
</div>
</div>
@@ -172,8 +173,8 @@
<div class="completion-icon">
<a-icon type="check-circle" :size="64" style="color: #52c41a;" />
</div>
<h2>{{ workOrderResp.matchResult === '1' ? '创建成功' : '创建失败' }}</h2>
<p>{{ workOrderResp.matchResult === '1' ? '任务已成功创建' : '任务创建失败' }}以下是任务详情</p>
<h2>{{ workOrderResp.matchResult === 'success' ? '创建成功' : '创建失败' }}</h2>
<p>{{ workOrderResp.matchResult === 'success' ? '任务创建成功' : '任务创建失败' }}以下是任务详情</p>
<div class="completion-info">
<div class="info-item">
<span class="label">任务工单号:</span>
@@ -181,19 +182,23 @@
</div>
<div class="info-item">
<span class="label">物料名称:</span>
<span class="value">{{ workOrderResp.materialName }}</span>
<span class="value">{{ formData.materialName }}</span>
</div>
<div class="info-item">
<span class="label">物料编码:</span>
<span class="value">{{ workOrderResp.encoding }}</span>
<span class="value">{{ formData.encoding }}</span>
</div>
<div class="info-item">
<span class="label">物料规格:</span>
<span class="value">{{ workOrderResp.materialSpec }}</span>
<span class="value">{{ formData.materialSpec }}</span>
</div>
<div class="info-item">
<span class="label">重量:</span>
<span class="value">{{ workOrderResp.unitWeight }}</span>
<span class="label">物料总个数:</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 class="completion-actions">
@@ -260,7 +265,7 @@ const workOrderResp = ref<WorkOrderResp>({
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 = <T extends (...args: any[]) => any>(func: T, delay: number): ((...args: Parameters<T>) => void) => {
let timer: ReturnType<typeof setTimeout> | null = null;
return function(...args: Parameters<T>) {
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连接已关闭')
}
}