优化
This commit is contained in:
@@ -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连接已关闭')
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user