From a908d623e1c58fad203dba5726ec6bd1d10ec40d Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Tue, 23 Jun 2026 09:01:06 -0500 Subject: [PATCH] =?UTF-8?q?Kiosko:=20fix=20listener=20acumulado,=20a=C3=B1?= =?UTF-8?q?adir=20reset=20por=20inactividad=2090s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- modules/turnero/views/kiosko.php | 45 ++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/modules/turnero/views/kiosko.php b/modules/turnero/views/kiosko.php index 143ae71..fbb9d7d 100644 --- a/modules/turnero/views/kiosko.php +++ b/modules/turnero/views/kiosko.php @@ -503,6 +503,30 @@ unset($p); }); } + // ── Scanner detector (un solo listener, fuera de seleccionarPrioridad) ── + let _timerAutoSubmit = null; + let _lastKeyAt = 0; + let _timerInactividad = null; + + document.getElementById('inp-cedula').addEventListener('input', () => { + clearTimeout(_timerAutoSubmit); + resetInactividad(); + const now = Date.now(); + const gap = now - _lastKeyAt; + _lastKeyAt = now; + const val = document.getElementById('inp-cedula').value.trim(); + if (/^\d{5,15}$/.test(val) && gap < 80) { + _timerAutoSubmit = setTimeout(() => confirmarTurno(), 300); + } + }); + + function resetInactividad() { + clearTimeout(_timerInactividad); + _timerInactividad = setTimeout(() => { + seleccionarOtraPrioridad(); + }, 90000); // 90 s sin actividad → vuelve al inicio + } + function seleccionarPrioridad(btn) { prioCodigo = btn.dataset.codigo; prioNombre = btn.dataset.nombre; @@ -516,24 +540,12 @@ unset($p); const inpCedula = document.getElementById('inp-cedula'); inpCedula.focus(); inpCedula.value = ''; - - // Detector de scanner: auto-submit solo si los dígitos llegan rápido (< 80ms entre cada uno) - let _timerAutoSubmit = null; - let _lastKeyAt = 0; - inpCedula.addEventListener('input', () => { - clearTimeout(_timerAutoSubmit); - const now = Date.now(); - const gap = now - _lastKeyAt; - _lastKeyAt = now; - const val = inpCedula.value.trim(); - // Scanner envía dígitos en ráfaga; teclado humano siempre > 80ms entre teclas - if (/^\d{5,15}$/.test(val) && gap < 80) { - _timerAutoSubmit = setTimeout(() => confirmarTurno(), 300); - } - }); + _lastKeyAt = 0; + clearTimeout(_timerAutoSubmit); + resetInactividad(); } - function volverPrioridades() { mostrar('screen-prio'); } + function volverPrioridades() { clearTimeout(_timerInactividad); mostrar('screen-prio'); } async function confirmarTurno() { const cedula = document.getElementById('inp-cedula').value.trim(); @@ -577,6 +589,7 @@ unset($p); function seleccionarOtraPrioridad() { clearTimeout(window._timer); + clearTimeout(_timerInactividad); document.getElementById('inp-cedula').value = ''; document.getElementById('inp-cel').value = ''; prioCodigo = prioNombre = prioColor = '';