fix(kiosko): bloquear campo al primer Tab del escáner + numpad más pequeño
El Tab es la señal de fin de cédula en el barcode. Al recibirlo se activa _scannerLocked y se ignoran todos los caracteres siguientes (apellidos, fecha, sangre) hasta que llegue Enter o se limpie el campo. También se redujo el numpad ~10% para que entre en pantalla. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
5c02a8ea99
commit
960867d785
@@ -391,11 +391,11 @@ unset($p);
|
||||
margin: .6rem 0 1rem;
|
||||
}
|
||||
.np-btn {
|
||||
padding: 1rem;
|
||||
font-size: 1.6rem;
|
||||
padding: .8rem;
|
||||
font-size: 1.4rem;
|
||||
font-weight: 700;
|
||||
border: 1.5px solid #e2e8f0;
|
||||
border-radius: 12px;
|
||||
border-radius: 10px;
|
||||
background: #fff;
|
||||
color: #1e293b;
|
||||
cursor: pointer;
|
||||
@@ -409,7 +409,7 @@ unset($p);
|
||||
.np-clear { color: #ef4444; border-color: #fca5a5; }
|
||||
.np-back { color: #64748b; }
|
||||
.np-ok { background: var(--brand); color: #fff; border-color: var(--brand);
|
||||
font-size: 1.15rem; padding: 1.1rem; }
|
||||
font-size: 1rem; padding: .9rem; }
|
||||
|
||||
/* ── Responsive ── */
|
||||
@media (min-height: 800px) {
|
||||
@@ -621,14 +621,23 @@ unset($p);
|
||||
});
|
||||
|
||||
// El lector casi siempre envía Enter al final → disparar de inmediato.
|
||||
// Tab entre campos del código de barras: prevenir que el browser cambie el foco.
|
||||
// Tab entre campos del código de barras: prevenir foco y BLOQUEAR el campo
|
||||
// (el Tab indica fin de la cédula — todo lo que sigue es apellido/fecha/etc).
|
||||
let _scannerLocked = false;
|
||||
_inpCedula.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Tab') {
|
||||
e.preventDefault();
|
||||
// Si ya tenemos dígitos válidos, bloquear el campo aquí mismo
|
||||
if (/^\d{5,15}$/.test(_inpCedula.value.trim())) _scannerLocked = true;
|
||||
return;
|
||||
}
|
||||
if (_scannerLocked && e.key.length === 1) {
|
||||
e.preventDefault(); // ignorar todo lo que llega después del primer Tab
|
||||
return;
|
||||
}
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault();
|
||||
_scannerLocked = false;
|
||||
const val = _inpCedula.value.trim();
|
||||
if (/^\d{5,15}$/.test(val)) confirmarTurno();
|
||||
}
|
||||
@@ -681,6 +690,7 @@ unset($p);
|
||||
const inpCedula = document.getElementById('inp-cedula');
|
||||
inpCedula.focus();
|
||||
inpCedula.value = '';
|
||||
_scannerLocked = false;
|
||||
_keyTimes = [];
|
||||
clearTimeout(_timerRafaga);
|
||||
resetInactividad();
|
||||
@@ -766,6 +776,7 @@ unset($p);
|
||||
confirmarTurno();
|
||||
return;
|
||||
} else if (k === 'C') {
|
||||
_scannerLocked = false;
|
||||
inp.value = '';
|
||||
} else if (k === '⌫') {
|
||||
inp.value = inp.value.slice(0, -1);
|
||||
|
||||
Reference in New Issue
Block a user