Auto refresh and static history json

This commit is contained in:
cerenX9
2026-07-24 14:52:11 +03:00
parent bf1bdfee04
commit 31a704280f

View File

@@ -6,6 +6,21 @@ document.addEventListener("DOMContentLoaded", function() {
var logsData = JSON.parse(telemetryEl.getAttribute('data-logs') || '[]');
var googleMapsApiKey = telemetryEl.getAttribute('data-gmaps-key') || '';
// Arka planda sunucudan JSON rotasını çek
fetch('/mymach_fleet_intelligence/static/src/data/history.json?t=' + new Date().getTime())
.then(function(res) {
if (!res.ok) throw new Error('History not found');
return res.json();
})
.then(function(historyData) {
initDashboard(historyData);
})
.catch(function(e) {
// Dosya yoksa veya hata varsa boş rotayla başlat
initDashboard([]);
});
function initDashboard(serverHistory) {
var map;
var activePolylines = [];
var activeMarkers = [];
@@ -43,32 +58,6 @@ document.addEventListener("DOMContentLoaded", function() {
}).addTo(map);
}
// Mavi Başlangıç İğnesi (Google Maps Stilinde)
function createBlueStartIcon() {
return L.divIcon({
className: 'custom-blue-start-marker',
html: '<div style="position: relative;">' +
'<div style="background: #2563eb; border: 2px solid white; width: 26px; height: 26px; border-radius: 50% 50% 50% 0; transform: rotate(-45deg); box-shadow: 0 4px 14px rgba(0,0,0,0.8); display: flex; align-items: center; justify-content: center;">' +
'<div style="background: white; width: 9px; height: 9px; border-radius: 50%; transform: rotate(45deg);"></div>' +
'</div></div>',
iconSize: [26, 26],
iconAnchor: [13, 26]
});
}
// Kırmızı Bitiş Hedef İğnesi (Google Maps Stilinde)
function createRedEndIcon() {
return L.divIcon({
className: 'custom-red-end-marker',
html: '<div style="position: relative;">' +
'<div style="background: #ef4444; border: 2px solid white; width: 26px; height: 26px; border-radius: 50% 50% 50% 0; transform: rotate(-45deg); box-shadow: 0 4px 14px rgba(0,0,0,0.8); display: flex; align-items: center; justify-content: center;">' +
'<div style="background: white; width: 9px; height: 9px; border-radius: 50%; transform: rotate(45deg);"></div>' +
'</div></div>',
iconSize: [26, 26],
iconAnchor: [13, 26]
});
}
// Yol Üzeri Türkçe Çağrı Kutucuğu (Callout Badge)
function createCalloutIcon(text, bgHex) {
var bg = bgHex || '#2563eb';
@@ -181,9 +170,6 @@ document.addEventListener("DOMContentLoaded", function() {
if (allPts.length > 0) {
var startPt = greenPts[0] || allPts[0];
var endPt = redPts.length > 0 ? redPts[redPts.length - 1] : (greenPts[greenPts.length - 1] || allPts[allPts.length - 1]);
var mStart = new google.maps.Marker({ position: {lat: startPt[0], lng: startPt[1]}, map: map, title: "Başlangıç Noktası" });
var mEnd = new google.maps.Marker({ position: {lat: endPt[0], lng: endPt[1]}, map: map, title: vehicle.destination });
activeMarkers.push(mStart, mEnd);
var bounds = new google.maps.LatLngBounds();
allPts.forEach(function(p) { bounds.extend({lat: p[0], lng: p[1]}); });
@@ -211,6 +197,10 @@ document.addEventListener("DOMContentLoaded", function() {
}
var allPts = greenPts.concat(redPts);
if (allPts.length > 0) {
var startPt = greenPts[0] || allPts[0];
var endPt = redPts.length > 0 ? redPts[redPts.length - 1] : (greenPts[greenPts.length - 1] || allPts[allPts.length - 1]);
// Başlangıç ve Bitiş İğnelerini (Mavi/Kırmızı) Canlı Radarda Gizliyoruz (Sadece araba ve çizgi görünecek)
// Kırmızı Yol Üzerindeki "1.5 km Sapma" Çağrı Kutucuğu
if (redPts.length > 0) {
@@ -288,31 +278,9 @@ document.addEventListener("DOMContentLoaded", function() {
var offlineCount = 0;
vehiclesData.forEach(function(v, idx) {
// === Tarayıcı Tabanlı Rota Çizgisi Geçmişi (Frontend History) ===
var historyKey = 'mymach_route_' + v.id;
var history = [];
try {
history = JSON.parse(localStorage.getItem(historyKey) || '[]');
} catch(e) {}
if (v.green_route && v.green_route.length > 0) {
var currentLat = v.green_route[0][0];
var currentLon = v.green_route[0][1];
var addPoint = true;
if (history.length > 0) {
var lastPt = history[history.length - 1];
// Sadece BİREBİR aynı koordinatsa ekleme. (Hafif bir GPS oynamasını bile kaydetmek için)
if (lastPt[0] === currentLat && lastPt[1] === currentLon) {
addPoint = false;
}
}
if (addPoint) {
history.push([currentLat, currentLon]);
if (history.length > 300) history = history.slice(-300); // 300 noktayı hafızada tut
localStorage.setItem(historyKey, JSON.stringify(history));
}
v.green_route = history;
// Sunucudan (Odoo JSON dosyası) gelen rotayı ezici olarak kullan
if (serverHistory && serverHistory.length > 0) {
v.green_route = serverHistory;
}
// Basit bir kural: Hızı 0'dan büyük olanlar HAREKETLİ, 0 olanlar PARK, veri olmayanlar ÇEVRİMDIŞI.
@@ -415,4 +383,10 @@ document.addEventListener("DOMContentLoaded", function() {
}
});
}
// --- 10 Saniyede Bir Sayfayı Tam Ekran Yenileyerek Görüntüyü Güncelleyen Kod ---
setInterval(function() {
window.location.reload();
}, 15000);
}
});