up
This commit is contained in:
@@ -145,7 +145,6 @@ try {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sets[] = 'actualizado_at = NOW()';
|
|
||||||
$sql = 'UPDATE turnero_turnos SET ' . implode(', ', $sets) . ' WHERE id = ?';
|
$sql = 'UPDATE turnero_turnos SET ' . implode(', ', $sets) . ' WHERE id = ?';
|
||||||
$binds[] = $turnoId;
|
$binds[] = $turnoId;
|
||||||
|
|
||||||
|
|||||||
@@ -425,23 +425,32 @@ function escHtml(str) {
|
|||||||
return d.innerHTML;
|
return d.innerHTML;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Carga inicial ─────────────────────────────────────────────
|
// ── Carga/polling ─────────────────────────────────────────────
|
||||||
async function cargarInicial() {
|
let pollTimer = null;
|
||||||
|
|
||||||
|
async function cargarSnapshot() {
|
||||||
const url = new URL(BASE_API + 'get_cola.php', location.href);
|
const url = new URL(BASE_API + 'get_cola.php', location.href);
|
||||||
url.searchParams.set('area', area);
|
url.searchParams.set('area', area);
|
||||||
if (lugarId) url.searchParams.set('lugar_id', lugarId);
|
if (lugarId) url.searchParams.set('lugar_id', lugarId);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await fetch(url.toString());
|
const res = await fetch(url.toString(), { cache: 'no-store' });
|
||||||
const json = await res.json();
|
const json = await res.json();
|
||||||
if (json.ok) renderSnapshot(json);
|
if (json.ok) renderSnapshot(json);
|
||||||
} catch (_) { /* SSE tomará el relevo */ }
|
} catch (_) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Arrancar polling cada 4 s (funciona aunque SSE falle por proxy)
|
||||||
|
function iniciarPolling() {
|
||||||
|
cargarSnapshot();
|
||||||
|
pollTimer = setInterval(cargarSnapshot, 4000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── SSE ───────────────────────────────────────────────────────
|
// ── SSE ───────────────────────────────────────────────────────
|
||||||
const chipEstado = document.getElementById('chip-estado');
|
const chipEstado = document.getElementById('chip-estado');
|
||||||
let esSource = null;
|
let esSource = null;
|
||||||
let reconnectDelay = 2000;
|
let reconnectDelay = 2000;
|
||||||
|
let sseViva = false;
|
||||||
|
|
||||||
function conectarSSE() {
|
function conectarSSE() {
|
||||||
const sseUrl = new URL(BASE_API + 'sse_turno.php', location.href);
|
const sseUrl = new URL(BASE_API + 'sse_turno.php', location.href);
|
||||||
@@ -452,6 +461,7 @@ function conectarSSE() {
|
|||||||
|
|
||||||
esSource.addEventListener('open', () => {
|
esSource.addEventListener('open', () => {
|
||||||
reconnectDelay = 2000;
|
reconnectDelay = 2000;
|
||||||
|
sseViva = true;
|
||||||
chipEstado.className = 'estado-chip conectado';
|
chipEstado.className = 'estado-chip conectado';
|
||||||
chipEstado.innerHTML = '<i class="fas fa-circle me-1" style="font-size:.5rem"></i>En vivo';
|
chipEstado.innerHTML = '<i class="fas fa-circle me-1" style="font-size:.5rem"></i>En vivo';
|
||||||
});
|
});
|
||||||
@@ -464,6 +474,7 @@ function conectarSSE() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
esSource.addEventListener('error', () => {
|
esSource.addEventListener('error', () => {
|
||||||
|
sseViva = false;
|
||||||
chipEstado.className = 'estado-chip error';
|
chipEstado.className = 'estado-chip error';
|
||||||
chipEstado.innerHTML = '<i class="fas fa-exclamation-circle me-1"></i>Reconectando…';
|
chipEstado.innerHTML = '<i class="fas fa-exclamation-circle me-1"></i>Reconectando…';
|
||||||
esSource.close();
|
esSource.close();
|
||||||
@@ -473,7 +484,7 @@ function conectarSSE() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ── Inicio ────────────────────────────────────────────────────
|
// ── Inicio ────────────────────────────────────────────────────
|
||||||
cargarInicial();
|
iniciarPolling();
|
||||||
conectarSSE();
|
conectarSSE();
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
Reference in New Issue
Block a user