1 禁止键盘输入
<el-table-column label="商品编码" prop="skuNo" align="center" :min-width="150">
<template #default="scope">
<el-input v-model.trim="scope.row.skuNo"
@keypress="handleProductCodeKeypress"
style="width: 100%;" type="textarea" :maxlength="30" show-word-limit :rows="1" />
</template>
</el-table-column>
function handleProductCodeKeypress(event) {
if (event.key === '.') {
event.preventDefault();
}
}
2 子组件快捷键
onMounted(() => {
document.addEventListener('keydown', handleKeydown);
});
onUnmounted(() => {
document.removeEventListener('keydown', handleKeydown);
});
const handleKeydown = (event) => {
if (!holdOrderDialog.value || !isKeyboardListenerActive.value) return;
event.stopPropagation();
switch(event.key) {
case 'ArrowUp':
event.preventDefault();
navigateUp();
break;
case 'ArrowDown':
event.preventDefault();
navigateDown();
break;
case 'Enter':
event.preventDefault();
confirmSelection();
break;
}
};
const holdOrderDialog = ref(false)
const isKeyboardListenerActive = ref(false)
const openHoldOrderDialog = () => {
console.log("打开挂单对话框.....");
holdOrderDialog.value = true;
fetchHoldOrders();
};
watch(holdOrderDialog, (newVal) => {
if (newVal) {
nextTick(() => {
isKeyboardListenerActive.value = true;
});
} else {
isKeyboardListenerActive.value = false;
}
});
defineExpose({ openHoldOrderDialog });