60 lines
3.6 KiB
JavaScript
60 lines
3.6 KiB
JavaScript
const PrioritasPanel = (() => {
|
|
let all = [];
|
|
|
|
const DEMO = [
|
|
{ nik:'6171010101010006', nama_lengkap:'Maria Magdalena', umur:54, status_ekonomi:'miskin', kondisi_kesehatan:'sakit_berat', kecamatan:'Pontianak Selatan', nama_ri:'Katedral', jumlah_dibantu:1, level_prioritas:'SANGAT TINGGI' },
|
|
{ nik:'6171010101010014', nama_lengkap:'Tan Eng Huat', umur:65, status_ekonomi:'miskin', kondisi_kesehatan:'disabilitas', kecamatan:'Pontianak Kota', nama_ri:'Klenteng', jumlah_dibantu:1, level_prioritas:'SANGAT TINGGI' },
|
|
{ nik:'6171010101010010', nama_lengkap:'Lim Ah Kow', umur:59, status_ekonomi:'miskin', kondisi_kesehatan:'sakit_berat', kecamatan:'Pontianak Kota', nama_ri:'Vihara', jumlah_dibantu:1, level_prioritas:'SANGAT TINGGI' },
|
|
{ nik:'6171010101010002', nama_lengkap:'Siti Rahma', umur:39, status_ekonomi:'miskin', kondisi_kesehatan:'sakit_ringan',kecamatan:'Pontianak Timur', nama_ri:"Masjid Jami'", jumlah_dibantu:2, level_prioritas:'TINGGI' },
|
|
{ nik:'6171010101010001', nama_lengkap:'Ahmad Suryana', umur:44, status_ekonomi:'miskin', kondisi_kesehatan:'sehat', kecamatan:'Pontianak Timur', nama_ri:"Masjid Jami'", jumlah_dibantu:2, level_prioritas:'SEDANG' },
|
|
{ nik:'6171010101010005', nama_lengkap:'Dewi Kartika', umur:46, status_ekonomi:'rentan', kondisi_kesehatan:'sehat', kecamatan:'Pontianak Kota', nama_ri:"Masjid Jami'", jumlah_dibantu:0, level_prioritas:'SEDANG' },
|
|
];
|
|
|
|
const PRIO_CLS = { 'SANGAT TINGGI':'pb-sangat-tinggi', 'TINGGI':'pb-tinggi', 'SEDANG':'pb-sedang', 'RENDAH':'pb-rendah' };
|
|
|
|
async function load() {
|
|
try { all = await Api.get('/prioritas'); } catch { all = DEMO; }
|
|
render(all);
|
|
}
|
|
|
|
function render(data) {
|
|
const tb = ge('tbody-prioritas');
|
|
if (!data.length) { tb.innerHTML = '<tr><td colspan="10"><div class="empty-state"><div class="es-icon">✅</div><h3>Tidak ada warga prioritas</h3></div></td></tr>'; return; }
|
|
tb.innerHTML = data.map(p => `
|
|
<tr>
|
|
<td class="mono">${p.nik}</td>
|
|
<td><strong>${p.nama_lengkap}</strong></td>
|
|
<td>${p.umur} th</td>
|
|
<td>${bdg(p.status_ekonomi,'')}</td>
|
|
<td>${bdg(p.kondisi_kesehatan,'')}</td>
|
|
<td>${p.kecamatan||'—'}</td>
|
|
<td style="font-size:11px">${p.nama_ri||'—'}</td>
|
|
<td style="text-align:center">
|
|
${p.jumlah_dibantu > 0
|
|
? `<span style="font-weight:700;color:var(--green)">${p.jumlah_dibantu}x</span>`
|
|
: `<span style="font-weight:700;color:var(--red)">Belum</span>`}
|
|
</td>
|
|
<td><span class="prio-badge ${PRIO_CLS[p.level_prioritas]||''}">${p.level_prioritas}</span></td>
|
|
<td>
|
|
${App.canEdit() ? `
|
|
<button class="btn btn-primary btn-xs" onclick="Bantuan.quickSalur('${p.nik}','${p.nama_lengkap}')">📦 Bantu</button>
|
|
` : '—'}
|
|
</td>
|
|
</tr>`).join('');
|
|
}
|
|
|
|
function exportCSV() {
|
|
if (!all.length) { App.toast('Tidak ada data untuk diekspor','warning'); return; }
|
|
const hdr = ['NIK','Nama','Umur','Ekonomi','Kesehatan','Kecamatan','Rumah Ibadah','Dibantu','Prioritas'];
|
|
const rows = all.map(p => [p.nik,p.nama_lengkap,p.umur,p.status_ekonomi,p.kondisi_kesehatan,p.kecamatan,p.nama_ri,p.jumlah_dibantu,p.level_prioritas]);
|
|
const csv = '\uFEFF' + [hdr,...rows].map(r => r.map(v => `"${v||''}"`).join(',')).join('\n');
|
|
const a = document.createElement('a');
|
|
a.href = URL.createObjectURL(new Blob([csv],{type:'text/csv;charset=utf-8'}));
|
|
a.download = `prioritas-bantuan-${new Date().toISOString().substring(0,10)}.csv`;
|
|
a.click();
|
|
App.toast('File CSV berhasil diunduh ✅','success');
|
|
}
|
|
|
|
return { load, exportCSV };
|
|
})();
|