This commit is contained in:
Lizandro Guarnizo
2026-04-21 18:13:53 -05:00
parent 957e264a64
commit 63da89c31a
5 changed files with 309 additions and 135 deletions
+47 -39
View File
@@ -258,19 +258,13 @@ $_labColor = preg_match('/^#[0-9a-fA-F]{3,8}$/', $_dispCfg['doc_color'] ?? '')
<!-- Cuerpo: Recepción | Muestras -->
<div class="pg-body" id="pg-body">
<!-- Panel Recepción -->
<!-- Panel Recepción (dinámico: N escritorios) -->
<div class="area-panel" id="panel-recepcion">
<div class="area-header recepcion">
<i class="fas fa-door-open"></i> Recepción
</div>
<div class="area-turno" id="turno-recepcion">
<div class="ring" id="ring-recepcion"></div>
<div class="lbl-destino">Pase a Recepción</div>
<div class="codigo-num" id="cod-recepcion">—</div>
<div class="pac-nombre" id="pac-recepcion"></div>
<div class="prio-chip" id="chip-recepcion">
<i class="fas fa-hourglass-half"></i> En espera
</div>
<div class="lugares-grid" id="rec-grid">
<!-- Se genera en JS según escritorios configurados -->
</div>
</div>
@@ -389,8 +383,8 @@ function anunciarTurno(codigo, destino) {
}
// ── Estado previo ──────────────────────────────────────────────
let lastCodRecepcion = null;
const lastCodLugar = {}; // { lugar_id: codigo }
const lastCodRecepcion = {}; // { desk_id: codigo }
const lastCodLugar = {}; // { lugar_id: codigo }
// ── Escape HTML ────────────────────────────────────────────────
function esc(str) {
@@ -417,36 +411,50 @@ function limpiarColor(panelEl, ringEl, chipEl) {
// ── Render snapshot global ─────────────────────────────────────
function renderSnapshot(snap) {
// ── Recepción ───────────────────────────────────────────
const rec = snap.activo_recepcion;
const panelRec = document.getElementById('turno-recepcion');
const ringRec = document.getElementById('ring-recepcion');
const codRec = document.getElementById('cod-recepcion');
const pacRec = document.getElementById('pac-recepcion');
const chipRec = document.getElementById('chip-recepcion');
// ── Recepción (múltiples escritorios) ───────────────────
const recList = snap.activos_recepcion || [];
const recGrid = document.getElementById('rec-grid');
if (rec) {
const color = rec.prioridad_color || '#1565c0';
if (rec.codigo !== lastCodRecepcion) {
anunciarTurno(rec.codigo, 'Recepción');
ringRec.classList.remove('animar');
void ringRec.offsetWidth;
ringRec.classList.add('animar');
lastCodRecepcion = rec.codigo;
recGrid.innerHTML = recList.map(d => {
const t = d.turno;
const color = t ? (t.prioridad_color || '#1565c0') : null;
const colorStyle = color ? `style="--prio-color:${color};background:${color}12"` : '';
const codStyle = color ? '' : 'style="color:#cbd5e1"';
const chipStyle = color
? `style="background:${color}22;color:${color}"`
: 'style="background:#f1f5f9;color:#94a3b8"';
const chipContent = t
? `<i class='fas fa-ticket-alt'></i> ${esc(t.prioridad_codigo)} — ${esc(t.prioridad_nombre)}`
: `<i class='fas fa-hourglass-half'></i> En espera`;
const codText = t ? esc(t.codigo) : '—';
const pacText = t ? esc(t.paciente_nombre || '') : '';
return `
<div class="lugar-sub" id="sub-rec-${d.desk_id}">
<div class="area-header" style="background:#1e40af;font-size:.7rem;padding:.35rem 1rem">
<i class="fas fa-door-open"></i> ${esc(d.desk_nombre)}
</div>
<div class="area-turno" id="area-rec-${d.desk_id}" ${colorStyle}>
<div class="ring" id="ring-rec-${d.desk_id}"></div>
<div class="lbl-destino">Pase a ${esc(d.desk_nombre)}</div>
<div class="codigo-num" id="cod-rec-${d.desk_id}" ${codStyle}>${codText}</div>
<div class="pac-nombre">${pacText}</div>
<div class="prio-chip" id="chip-rec-${d.desk_id}" ${chipStyle}>${chipContent}</div>
</div>
</div>`;
}).join('');
// Sonido/animación por desk
recList.forEach(d => {
const t = d.turno;
if (!t) { lastCodRecepcion[d.desk_id] = null; return; }
if (t.codigo !== lastCodRecepcion[d.desk_id]) {
anunciarTurno(t.codigo, d.desk_nombre);
const ring = document.getElementById(`ring-rec-${d.desk_id}`);
if (ring) { ring.classList.remove('animar'); void ring.offsetWidth; ring.classList.add('animar'); }
lastCodRecepcion[d.desk_id] = t.codigo;
}
aplicarColor(panelRec, ringRec, chipRec, color);
codRec.textContent = rec.codigo;
codRec.style.color = '';
pacRec.textContent = rec.paciente_nombre || '';
chipRec.innerHTML = `<i class="fas fa-ticket-alt"></i> ${esc(rec.prioridad_codigo)} — ${esc(rec.prioridad_nombre)}`;
} else {
limpiarColor(panelRec, ringRec, chipRec);
codRec.textContent = '—';
codRec.style.color = '#cbd5e1';
pacRec.textContent = '';
chipRec.innerHTML = '<i class="fas fa-hourglass-half"></i> En espera';
lastCodRecepcion = null;
}
});
// ── Lugares (muestras) ──────────────────────────────────
const lugares = snap.lugares || [];