Turnero: mejoras UI, historial detallado, kiosko scanner, firma por turno
- Kiosko: detector scanner (gap < 80ms), iconos 90px, fa-person-pregnant, ticket Arial - Recepción: vincular_paciente.php para persistir paciente_id antes de firmar consentimiento - Historial y dashboard: recepción desk, empleado recepción/muestras, exámenes y comentarios - display_global: turno más pequeño, lugar-nombre más grande - lab_pacientes: modal compacta con form-sm - Configuración: icono embarazada fa-person-pregnant en prioridades - ver_formulario_enviado: firma por campo (fix doble firma) - docker-compose.local.yml: override BD producción para dev local Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
ebbf4ac6cf
commit
f363631b32
@@ -207,10 +207,10 @@ unset($p);
|
||||
.btn-prioridad:active { transform: scale(.95); filter: brightness(.93); }
|
||||
.btn-prioridad:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0,0,0,.13); }
|
||||
.btn-prioridad .icon-wrap {
|
||||
width: 62px; height: 62px;
|
||||
border-radius: 14px;
|
||||
width: 90px; height: 90px;
|
||||
border-radius: 16px;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
font-size: 2.04rem;
|
||||
font-size: 3rem;
|
||||
color: #fff;
|
||||
margin-bottom: .2rem;
|
||||
}
|
||||
@@ -265,7 +265,7 @@ unset($p);
|
||||
/* ── Print: ticket para impresora térmica SRP-B300 ── */
|
||||
@media print {
|
||||
@page { margin: 1mm 2mm; size: 80mm auto; }
|
||||
body { background: #fff !important; font-family: 'Courier New', Courier, 'Lucida Console', monospace !important; -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; }
|
||||
body { background: #fff !important; font-family: Arial, Helvetica, sans-serif !important; -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; -webkit-font-smoothing: antialiased !important; }
|
||||
.kiosko-topbar, .kiosko-footer, .spinner-overlay, .toast-error,
|
||||
.btn-nuevo, #screen-prio, #screen-datos { display: none !important; }
|
||||
#screen-ticket { display: block !important; opacity: 1 !important; position: static !important; }
|
||||
@@ -278,13 +278,13 @@ unset($p);
|
||||
border-top: none !important; border-radius: 0 !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
.ticket-label { font-size: 8pt !important; letter-spacing: 0.03em !important; margin-bottom: 0 !important; padding-top: 2pt !important; }
|
||||
.ticket-label { font-size: 10pt !important; font-weight: 600 !important; letter-spacing: 0.03em !important; margin-bottom: 0 !important; padding-top: 2pt !important; }
|
||||
.ticket-codigo { font-size: 22pt !important; font-weight: 700 !important; letter-spacing: 0 !important; line-height: 1 !important; padding: 0 !important; }
|
||||
.ticket-prio-badge { font-size: 8pt !important; padding: 0 !important; margin: 0 !important; background: transparent !important; color: #000 !important; }
|
||||
.ticket-prio-badge { font-size: 10pt !important; font-weight: 600 !important; padding: 0 !important; margin: 0 !important; background: transparent !important; color: #000 !important; }
|
||||
.ticket-pos { margin: 2pt 0 !important; padding: 0 !important; border-radius: 0 !important; background: transparent !important; }
|
||||
.ticket-pos .lbl { font-size: 7pt !important; letter-spacing: 0.03em !important; }
|
||||
.ticket-pos .num { font-size: 11pt !important; font-weight: 700 !important; color: #000 !important; }
|
||||
.ticket-instruc { font-size: 7pt !important; margin: 2pt 0 !important; line-height: 1.15 !important; padding-bottom: 2pt !important; }
|
||||
.ticket-pos .lbl { font-size: 9pt !important; font-weight: 600 !important; letter-spacing: 0.03em !important; }
|
||||
.ticket-pos .num { font-size: 12pt !important; font-weight: 700 !important; color: #000 !important; }
|
||||
.ticket-instruc { font-size: 9pt !important; font-weight: 500 !important; margin: 2pt 0 !important; line-height: 1.3 !important; padding-bottom: 2pt !important; }
|
||||
.ticket-codigo, .ticket-label, .ticket-prio-badge,
|
||||
.ticket-pos, .ticket-pos .lbl, .ticket-pos .num,
|
||||
.ticket-instruc { color: #000 !important; }
|
||||
@@ -517,16 +517,20 @@ unset($p);
|
||||
inpCedula.focus();
|
||||
inpCedula.value = '';
|
||||
|
||||
// Detector de scanner: cuando se pega/escribe rápido una cédula válida
|
||||
// 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();
|
||||
if (/^\d{5,15}$/.test(val)) {
|
||||
// Cédula válida: auto-submit en 300ms (tiempo para que termine el scanner)
|
||||
// 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);
|
||||
}
|
||||
}, { once: false });
|
||||
});
|
||||
}
|
||||
|
||||
function volverPrioridades() { mostrar('screen-prio'); }
|
||||
|
||||
Reference in New Issue
Block a user