/* ============================================================ draw_spbu_point.js - WebGIS SPBU Point Only ============================================================ */ var map = L.map('map', { zoomControl: false }).setView([-0.0263, 109.3425], 13); L.control.zoom({ position: 'bottomright' }).addTo(map); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors', maxZoom: 19 }).addTo(map); var drawnItems = new L.FeatureGroup().addTo(map); var layerGroup24 = L.featureGroup().addTo(map); var layerGroupTidak = L.featureGroup().addTo(map); var show24 = true; var showTidak = true; var isAdmin = window.IS_ADMIN === true; function toggleLayer(type) { if (type === '24jam') { show24 = !show24; show24 ? map.addLayer(layerGroup24) : map.removeLayer(layerGroup24); document.getElementById('btn24').classList.toggle('active', show24); } else if (type === 'tidak') { showTidak = !showTidak; showTidak ? map.addLayer(layerGroupTidak) : map.removeLayer(layerGroupTidak); document.getElementById('btnTidak').classList.toggle('active', showTidak); } } if (isAdmin) { var drawControl = new L.Control.Draw({ position: 'topleft', edit: { featureGroup: drawnItems }, draw: { marker: true, polyline: false, polygon: false, rectangle: false, circle: false, circlemarker: false } }); map.addControl(drawControl); } function makeIcon(status) { var c = status === '24 Jam' ? '#4ade80' : '#f87171'; return L.divIcon({ html: ``, iconSize: [26, 38], iconAnchor: [13, 38], popupAnchor: [0, -40], className: '' }); } function statusBadge(status) { return status === '24 Jam' ? `24 Jam` : `Tidak 24 Jam`; } function buildInfoPopup(d) { var deleteButton = isAdmin ? `` : ''; return `
⛽ SPBU - ${d.nama}
No. SPBU${d.no_spbu}
Status${statusBadge(d.status)}
Koordinat${parseFloat(d.latitude).toFixed(5)}, ${parseFloat(d.longitude).toFixed(5)}
${deleteButton}
`; } fetch('../php/show_spbu.php') .then(res => res.json()) .then(data => { data.forEach(d => { var layer = L.marker([d.latitude, d.longitude], { icon: makeIcon(d.status) }); layer._type = 'spbu'; layer._db_id = d.id; layer.bindPopup(buildInfoPopup(d), { maxWidth: 260 }); d.status === '24 Jam' ? layerGroup24.addLayer(layer) : layerGroupTidak.addLayer(layer); }); }) .catch(err => console.error('Gagal load data SPBU:', err)); function hapusData(id, type) { if (!confirm('Yakin ingin menghapus SPBU ini?')) return; fetch(`../php/delete.php?id=${id}&type=${type}`) .then(r => r.json()) .then(r => { if (r.message && r.message.toLowerCase().includes('berhasil')) location.reload(); else alert('Gagal: ' + (r.error || r.message)); }); } if (isAdmin) { map.on(L.Draw.Event.CREATED, function(e) { if (e.layerType !== 'marker') return; var layer = e.layer; drawnItems.addLayer(layer); handlePoint(layer); }); } function handlePoint(layer) { var ll = layer.getLatLng(); layer.bindPopup(`
⛽ Tambah SPBU
📍 ${ll.lat.toFixed(6)}, ${ll.lng.toFixed(6)}
`, { maxWidth: 280 }).openPopup(); } function savePoint(lat, lng) { var nama = document.getElementById('pNama').value.trim(); var no = document.getElementById('pNo').value.trim(); var status = document.getElementById('pStatus').value; if (!nama || !no) { alert('Nama dan No. SPBU wajib diisi!'); return; } fetch('../php/insert.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ nama, no, status, lat, lng }) }) .then(r => r.json()) .then(r => { if (r.message && r.message.includes('berhasil')) location.reload(); else alert('Gagal: ' + (r.error || r.message)); }); }