Update lugar.php

This commit is contained in:
Lizandro Guarnizo
2026-06-16 13:55:20 -05:00
parent fc14360e2e
commit 8b64b77c0e
+68 -6
View File
@@ -78,6 +78,7 @@ $adminNombre = $_SESSION['admin_user']['full_name'] ?? $_SESSION['admin_user']['
.cola-card.activo { border-color: #6366f1; box-shadow: 0 0 0 2px #c7d2fe; }
.cola-card.en-servicio-card { border-color: #16a34a; background: #f0fdf4; }
.cola-card.en-servicio-card.activo { border-color: #16a34a; box-shadow: 0 0 0 2px #bbf7d0; }
.cola-card.nav-selected { border-color: #3b82f6; background: #eff6ff; box-shadow: 0 0 0 2px #bfdbfe; }
.prio-dot {
width: 34px; height: 34px; border-radius: 50%; flex-shrink: 0;
display: flex; align-items: center; justify-content: center;
@@ -220,12 +221,9 @@ require_once __DIR__ . '/../../../shared/components/sidebar.php';
<span id="badge-turno-activo" class="badge bg-primary ms-1 d-none" id="badge-cod-activo"></span>
</div>
<div class="d-flex align-items-center gap-2">
<span class="text-muted small d-none d-md-inline"><?= htmlspecialchars($adminNombre) ?></span>
<button class="btn btn-sm btn-outline-secondary" onclick="cambiarLugar()">
<i class="fas fa-exchange-alt me-1"></i>Cambiar lugar
</button>
<span class="text-muted small"><?= htmlspecialchars($adminNombre) ?></span>
<button class="btn btn-primary btn-sm" id="btn-llamar" onclick="llamarSiguiente()">
<i class="fas fa-bell me-1"></i>Llamar siguiente
<i class="fas fa-exchange-alt me-1"></i>Cambiar
</button>
</div>
</div>
@@ -235,12 +233,29 @@ require_once __DIR__ . '/../../../shared/components/sidebar.php';
<!-- ══ Cola ═══════════════════════════════════════════ -->
<div class="lugar-cola">
<div class="lugar-cola-hdr">
<div class="d-flex align-items-center justify-content-between">
<div class="d-flex align-items-center justify-content-between mb-2">
<span class="fw-semibold text-secondary" style="font-size:.78rem;text-transform:uppercase;letter-spacing:.05em">
<i class="fas fa-list-ol me-1"></i>EN ESPERA
</span>
<span class="badge bg-primary rounded-pill" id="badge-count">0</span>
</div>
<button class="btn btn-primary w-100 py-2" id="btn-llamar" onclick="llamarSiguiente()">
<i class="fas fa-bell me-2"></i>Llamar siguiente
</button>
<!-- Navegación entre turnos en espera -->
<div class="d-flex align-items-center gap-1 mt-2" id="nav-cola" style="display:none!important">
<button class="btn btn-outline-secondary btn-sm flex-shrink-0" onclick="navCola(-1)" title="Anterior">
<i class="fas fa-chevron-up"></i>
</button>
<div class="flex-grow-1 text-center py-1 px-2 rounded" id="nav-preview"
style="background:#f1f5f9;font-size:.82rem;font-weight:600;min-height:32px;cursor:pointer"
onclick="llamarNavActual()" title="Clic para llamar este turno">
<span class="text-muted" style="font-weight:400">— ninguno seleccionado —</span>
</div>
<button class="btn btn-outline-secondary btn-sm flex-shrink-0" onclick="navCola(1)" title="Siguiente">
<i class="fas fa-chevron-down"></i>
</button>
</div>
</div>
<div class="cola-items" id="cola-items">
<div class="cola-vacia">
@@ -474,6 +489,7 @@ function renderCola(snap) {
const items = snap.cola || [];
const espera = items.filter(t => t.estado === 'en_espera_lugar');
document.getElementById('badge-count').textContent = espera.length;
_actualizarNavCola(items);
const lista = document.getElementById('cola-items');
if (!items.length) {
@@ -508,6 +524,52 @@ function enfocarFicha() {
document.getElementById('ficha-turno')?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}
// ── Navegación entre turnos en espera ─────────────────────────
let _navItems = []; // lista de turnos en_espera_lugar actual
let _navIdx = -1; // índice seleccionado
function _actualizarNavCola(items) {
_navItems = items.filter(t => t.estado === 'en_espera_lugar');
// Mantener idx si el turno seleccionado sigue en lista
if (_navIdx >= _navItems.length) _navIdx = _navItems.length - 1;
const nav = document.getElementById('nav-cola');
if (_navItems.length > 0) {
nav.style.removeProperty('display');
if (_navIdx < 0) _navIdx = 0;
_renderNavPreview();
} else {
nav.style.display = 'none';
_navIdx = -1;
document.getElementById('nav-preview').innerHTML =
`<span class="text-muted" style="font-weight:400">— ninguno seleccionado —</span>`;
}
}
function _renderNavPreview() {
const t = _navItems[_navIdx];
if (!t) return;
document.getElementById('nav-preview').innerHTML =
`<span style="color:${t.prioridad_color};font-size:.75rem">${t.prioridad_codigo}</span>
<strong class="ms-1">${escHtml(t.codigo)}</strong>
<span class="text-muted ms-1" style="font-size:.75rem">${escHtml(t.paciente_nombre || '')}</span>
<i class="fas fa-bell ms-1 text-primary" style="font-size:.7rem"></i>`;
// Resaltar la card en la lista
document.querySelectorAll('.cola-card').forEach(el => el.classList.remove('nav-selected'));
const cards = document.querySelectorAll('#cola-items .cola-card');
if (cards[_navIdx]) cards[_navIdx].classList.add('nav-selected');
}
function navCola(dir) {
if (!_navItems.length) return;
_navIdx = (_navIdx + dir + _navItems.length) % _navItems.length;
_renderNavPreview();
}
async function llamarNavActual() {
if (_navIdx < 0 || !_navItems[_navIdx]) return;
await llamarTurnoEspecifico(_navItems[_navIdx].id);
}
// ── Llamar siguiente ──────────────────────────────────────────
async function llamarSiguiente() {
await _llamar({});