Files
App/js/layout.js
2026-03-24 20:49:35 +00:00

47 lines
2.1 KiB
JavaScript

/* ...
AQUÍ ARRIBA ESTÁ TODO TU CÓDIGO ORIGINAL DEL LAYOUT
(El que dibuja el sidebar, el header, el menú, etc.)
... */
// ==========================================
// RASTREADOR FANTASMA GPS (MODO DE CAMINO)
// ==========================================
setInterval(async () => {
if (!localStorage.getItem("token") || localStorage.getItem("role") !== "operario") return;
const TRACK_API = window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1'
? 'http://localhost:3000'
: 'https://integrarepara-api.integrarepara.es';
try {
const resSt = await fetch(`${TRACK_API}/statuses`, { headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } });
const dataSt = await resSt.json();
if (!dataSt.ok) return;
const caminoSt = dataSt.statuses.find(s => s.name.toLowerCase().includes('camino'));
if (!caminoSt) return;
const resSvc = await fetch(`${TRACK_API}/services/active`, { headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } });
const dataSvc = await resSvc.json();
if (!dataSvc.ok) return;
const enRuta = dataSvc.services.filter(s => String(s.raw_data?.status_operativo) === String(caminoSt.id));
if (enRuta.length > 0) {
// Alta velocidad activada (enableHighAccuracy: false)
navigator.geolocation.getCurrentPosition(async (pos) => {
const lat = pos.coords.latitude;
const lng = pos.coords.longitude;
for (let s of enRuta) {
await fetch(`${TRACK_API}/services/${s.id}/location`, {
method: 'POST',
headers: { "Content-Type": "application/json", "Authorization": `Bearer ${localStorage.getItem("token")}` },
body: JSON.stringify({ lat, lng })
});
}
}, () => {}, { enableHighAccuracy: false, timeout: 10000, maximumAge: 30000 });
}
} catch (e) { }
}, 15000); // Se ejecuta cada 15 segundos