Fleet Management Dashboard

Fleet Status

Vehicle Details

Select a vehicle on the map.

Fuel Efficiency (km/L)

Driver Leaderboard

DriverScore

Maintenance Schedule

Vehicle IDNext Service DueStatus

Manage Vehicles

Fleet Roster

IDDriverAction

Log a Trip

Master Trip Log

Vehicle IDDistanceFuelAction

Avg. Fuel Efficiency: ${fuelEff} km/L

`; }; renderPerformanceAnalytics = () => { const fuelData = vehicles.map(v => { const vTrips = tripLogs.filter(t => t.vehicleId === v.id); const totalDist = vTrips.reduce((s,t)=>s+t.dist, 0); const totalFuel = vTrips.reduce((s,t)=>s+t.fuel, 0); return totalFuel > 0 ? totalDist / totalFuel : 0; }); renderChart('fleet-fuel-chart', 'bar', { labels: vehicles.map(v => v.id), datasets: [{ label: 'km/L', data: fuelData, backgroundColor: 'rgba(8, 145, 178, 0.7)' }] }, { responsive: true, maintainAspectRatio: false, indexAxis: 'y' }); const driverScores = vehicles.map(v => ({ name: v.driver, score: (100 - (tripLogs.filter(t=>t.vehicleId===v.id).reduce((s,t)=>s+(t.braking || 0),0) * 5)).toFixed(0) })).sort((a,b) => b.score - a.score); document.getElementById('fleet-driver-tbody').innerHTML = driverScores.map(d => `${d.name}${d.score}`).join(''); const today = new Date('2025-06-30'); document.getElementById('fleet-maint-tbody').innerHTML = vehicles.sort((a,b) => new Date(a.nextMaint) - new Date(b.nextMaint)).map(v => { const isOverdue = new Date(v.nextMaint) < today; return `${v.id}${new Date(v.nextMaint).toLocaleDateString()}${isOverdue ? 'OVERDUE' : 'Upcoming'}`; }).join(''); }; renderManagementUI = () => { elements.vehicleTbody.innerHTML = vehicles.map(v => `${v.id}${v.driver}`).join(''); elements.tripTbody.innerHTML = tripLogs.map(t => `${t.vehicleId}${t.dist} km${t.fuel} L`).join(''); document.getElementById('add-trip-vehicle').innerHTML = vehicles.map(v => ``).join(''); }; window.fleetDownloadPDF = (contentId) => { html2canvas(document.getElementById(contentId), { scale: 2 }).then(canvas => { const pdf = new jspdf.jsPDF({ orientation: 'landscape', unit: 'pt', format: 'a4' }); pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 40, 40, pdf.internal.pageSize.getWidth() - 80, 0); pdf.save(`Fleet_${contentId.split('-')[0]}_Report.pdf`); }); }; initialize(); });
Scroll to Top