function renderSpbuPanel(pb) { return callAPI('spbu.php').then(res => { const data = res.data || []; const d24 = data.filter(s => s.buka_24jam); const dn24 = data.filter(s => !s.buka_24jam); pb.innerHTML = `
Filter Layer
${mkLayerItem('spbu24', '#16a34a', 'SPBU Buka 24 Jam', d24.length)} ${mkLayerItem('spbuNon24', '#94a3b8', 'SPBU Tidak 24 Jam', dn24.length)}
Tambah Data
Daftar SPBU (${data.length})
${data.length ? data.map(s => `
${esc(s.nama)}
${s.no_wa || '—'}
${s.buka_24jam ? '24 JAM' : 'TERBATAS'}
`).join('') : '
Belum ada data
'}
`; loadSPBULayer(data); registerSearchEntries('spbu', data.map(s => ({ key: `spbu:${s.id}`, label: s.nama, subtitle: `SPBU · ${s.buka_24jam ? '24 Jam' : 'Tidak 24 Jam'}${s.alamat ? ` · ${s.alamat}` : ''}`, typeLabel: 'SPBU', icon: '⛽', searchText: normalizeSearchText(`${s.nama} ${s.no_wa || ''} spbu`), focus: () => focusMarkerById(s.buka_24jam ? 'spbu24' : 'spbuNon24', s.id) }))); updateStatusCount(); }); } function loadSPBULayer(data) { layers.spbu24.clearLayers(); layers.spbuNon24.clearLayers(); data.forEach(s => { const is24 = s.buka_24jam; const color = is24 ? '#16a34a' : '#64748b'; const icon = L.divIcon({ className: '', html: `
`, iconSize: [30, 30], iconAnchor: [15, 15] }); const marker = L.marker([s.latitude, s.longitude], { icon, draggable: true }).bindPopup(`

⛽ ${esc(s.nama)}

Status: ${is24 ? '✅ Buka 24 Jam' : '⏰ Tidak 24 Jam'}

${s.no_wa ? `

WA: ${s.no_wa}

` : ''} ${s.alamat ? `

Alamat: ${esc(s.alamat)}

` : ''} `); marker._dataId = s.id; marker.on('dragend', async function (ev) { const { lat, lng } = ev.target.getLatLng(); const res = await callAPI(`spbu.php?id=${s.id}`, 'PUT', { nama: s.nama, no_wa: s.no_wa, alamat: s.alamat, buka_24jam: s.buka_24jam, latitude: lat, longitude: lng }); if (res.status === 'success') { s.latitude = lat; s.longitude = lng; toast(`📍 ${s.nama} dipindahkan`, 'success'); } else { toast('Gagal update: ' + res.message, 'error'); marker.setLatLng([s.latitude, s.longitude]); } }); is24 ? layers.spbu24.addLayer(marker) : layers.spbuNon24.addLayer(marker); }); } function startAddSPBU() { cancelMapClick(); document.getElementById('btn-add-spbu').classList.add('active'); showInstruction('Klik di peta untuk menentukan lokasi SPBU'); onceMapClick((lat, lng) => { document.getElementById('btn-add-spbu').classList.remove('active'); hideInstruction(); openSPBUForm(null, lat, lng); }); } function openSPBUForm(data, lat, lng) { const isEdit = !!data; const fLat = isEdit ? data.latitude : lat; const fLng = isEdit ? data.longitude : lng; openModal(isEdit ? 'Edit SPBU' : 'Tambah SPBU', `
📍 Koordinat: ${fLat.toFixed(7)}, ${fLng.toFixed(7)}
`, ` `); } async function saveSPBU(id, lat, lng) { const body = { nama: document.getElementById('spbu-nama').value.trim(), no_wa: document.getElementById('spbu-nowa').value.trim(), alamat: document.getElementById('spbu-alamat').value.trim(), buka_24jam: document.getElementById('spbu-24').value === '1', latitude: lat, longitude: lng }; if (!body.nama) return toast('Nama wajib diisi', 'error'); const res = await callAPI(id ? `spbu.php?id=${id}` : 'spbu.php', id ? 'PUT' : 'POST', body); if (res.status === 'success') { toast(res.message, 'success'); closeModal(); switchTab('spbu'); } else { toast(res.message, 'error'); } } async function editSPBU(id) { map.closePopup(); const r = await callAPI(`spbu.php?id=${id}`); if (r.data) openSPBUForm(r.data, r.data.latitude, r.data.longitude); } async function deleteSPBU(id) { if (!confirm('Hapus SPBU?')) return; const r = await callAPI(`spbu.php?id=${id}`, 'DELETE'); if (r.status === 'success') { toast('Dihapus', 'success'); map.closePopup(); switchTab('spbu'); } }