205 lines
11 KiB
PHP
205 lines
11 KiB
PHP
<?php
|
|
// dashboard-pemerintah.php
|
|
require_once 'koneksi.php';
|
|
cekLogin(); // Memastikan user sudah login
|
|
|
|
// Proteksi: Hanya Role Pemerintah yang Boleh Mengakses Halaman Ini
|
|
if (!isset($_SESSION['role']) || $_SESSION['role'] !== 'pemerintah') {
|
|
header('Location: login.php');
|
|
exit;
|
|
}
|
|
|
|
$page = 'beranda'; // Penanda agar menu "Beranda" di sidebar menyala biru
|
|
$pageTitle = 'Dashboard Pemerintah';
|
|
|
|
// Mengambil Data Statistik Utama untuk Instansi Pemerintah
|
|
$totalIbadah = $conn->query("SELECT COUNT(*) AS c FROM rumah_ibadah")->fetch_assoc()['c'] ?? 0;
|
|
$totalKpm = $conn->query("SELECT COUNT(*) AS c FROM rumah_miskin")->fetch_assoc()['c'] ?? 0;
|
|
$terjangkau = $conn->query("SELECT COUNT(*) AS c FROM rumah_miskin WHERE status_bantuan='Terjangkau'")->fetch_assoc()['c'] ?? 0;
|
|
$blankSpot = $conn->query("SELECT COUNT(*) AS c FROM rumah_miskin WHERE status_bantuan='Belum Terbantu'")->fetch_assoc()['c'] ?? 0;
|
|
$bencanaAktif = $conn->query("SELECT COUNT(*) AS c FROM bencana WHERE status='Aktif'")->fetch_assoc()['c'] ?? 0;
|
|
$totalBantuan = $conn->query("SELECT COUNT(*) AS c FROM bantuan_tersalur")->fetch_assoc()['c'] ?? 0;
|
|
|
|
$pct = $totalKpm > 0 ? round($terjangkau / $totalKpm * 100) : 0;
|
|
|
|
// Preview Log Data Lapangan Terkini (Limit 5)
|
|
$kpmBaru = $conn->query("SELECT nama_kepala_keluarga, nik, kelurahan, kondisi_rumah FROM rumah_miskin ORDER BY created_at DESC LIMIT 5");
|
|
$bantuanBaru = $conn->query("SELECT bt.jenis_bantuan, bt.jumlah, bt.tanggal, rm.nama_kepala_keluarga FROM bantuan_tersalur bt LEFT JOIN rumah_miskin rm ON bt.warga_id=rm.id ORDER BY bt.created_at DESC LIMIT 5");
|
|
|
|
// MEMANGGIL SIDEBAR PREMIUM
|
|
include 'includes/sidebar.php';
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="id">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Panel Monitoring Pemerintah - Poverty Mapping</title>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css"/>
|
|
|
|
<style>
|
|
.db-wrap { max-width: 1200px; font-family: 'Inter', sans-serif; }
|
|
|
|
/* Welcome Banner Pemerintah (Gradasi Royal Blue - Indigo yang Formal) */
|
|
.db-welcome {
|
|
background: linear-gradient(135deg, #1e3a8a 0%, #4338ca 100%);
|
|
color: white;
|
|
border-radius: 16px;
|
|
padding: 26px 28px;
|
|
margin-bottom: 24px;
|
|
box-shadow: 0 10px 25px -5px rgba(30, 58, 138, 0.2);
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
.db-welcome h1 { font-size: 22px; font-weight: 700; margin-bottom: 6px; }
|
|
.db-welcome p { font-size: 13px; opacity: 0.9; max-width: 750px; line-height: 1.5; }
|
|
|
|
/* Grid Kartu Statistik */
|
|
.stat-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 24px; }
|
|
.scard {
|
|
background: #fff; border: 1px solid #e2e8f0; border-radius: 14px; padding: 20px;
|
|
display: flex; align-items: center; justify-content: space-between;
|
|
transition: box-shadow .2s, transform .2s; box-shadow: 0 4px 6px -1px rgba(15,23,42,0.02);
|
|
}
|
|
.scard:hover { box-shadow: 0 12px 20px -5px rgba(15, 23, 42, 0.05); transform: translateY(-4px); }
|
|
.scard-label { font-size: 11px; font-weight: 700; color: #64748b; text-transform: uppercase; letter-spacing: .5px; margin-bottom: 6px; }
|
|
.scard-num { font-size: 26px; font-weight: 800; line-height: 1; color: #0f172a; }
|
|
.scard-sub { font-size: 11px; color: #64748b; margin-top: 5px; }
|
|
.scard-icon { width: 44px; height: 44px; border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: 16px; }
|
|
|
|
/* Progress Box */
|
|
.coverage-box {
|
|
background: #fff; border: 1px solid #e2e8f0; border-radius: 14px; padding: 24px;
|
|
margin-bottom: 24px; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
|
|
}
|
|
.cov-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
|
|
.cov-pct { font-size: 24px; font-weight: 800; color: #1e3a8a; }
|
|
.cov-track { height: 12px; background: #e2e8f0; border-radius: 99px; overflow: hidden; }
|
|
.cov-fill { height: 100%; background: linear-gradient(90deg, #1e3a8a, #3b82f6); border-radius: 99px; }
|
|
.cov-meta { display: flex; gap: 20px; font-size: 12px; color: #475569; margin-top: 14px; flex-wrap: wrap; }
|
|
|
|
/* Grid Tabel */
|
|
.db-tables { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
|
|
.dbt-card { background: #fff; border: 1px solid #e2e8f0; border-radius: 14px; overflow: hidden; }
|
|
.dbt-head { padding: 16px 20px; border-bottom: 1px solid #f1f5f9; display: flex; justify-content: space-between; align-items: center; background: #fafbfc; }
|
|
.dbt-head h3 { font-size: 13px; font-weight: 700; color: #0f172a; display: flex; align-items: center; gap: 8px; }
|
|
.dbt-head a { font-size: 12px; color: #1e3a8a; text-decoration: none; font-weight: 600; background: #f1f5f9; padding: 4px 10px; border-radius: 6px; }
|
|
|
|
table.dbt { width: 100%; border-collapse: collapse; font-size: 13px; }
|
|
table.dbt th { background: #f8fafc; padding: 12px 16px; text-align: left; font-size: 11px; font-weight: 700; color: #64748b; text-transform: uppercase; border-bottom: 1px solid #e2e8f0; }
|
|
table.dbt td { padding: 14px 16px; border-bottom: 1px solid #f1f5f9; color: #334155; }
|
|
|
|
.badge-modern { padding: 4px 10px; border-radius: 99px; font-size: 11px; font-weight: 600; display: inline-block; }
|
|
.badge-danger { background: #fee2e2; color: #dc2626; }
|
|
.badge-success { background: #d1fae5; color: #059669; }
|
|
|
|
@media (max-width: 992px) {
|
|
.stat-row { grid-template-columns: repeat(2, 1fr); }
|
|
.db-tables { grid-template-columns: 1fr; }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<div class="db-wrap">
|
|
<div class="db-welcome">
|
|
<h1>Selamat Datang di Panel Eksekutif Monitoring Pemerintah 🏛️</h1>
|
|
<p>Hak akses pejabat pemerintah aktif. Gunakan panel ini untuk meninjau status kemiskinan makro secara wilayah, mengawasi pergerakan distribusi bantuan logistik, dan mengukur efisiensi pos rumah ibadah.</p>
|
|
</div>
|
|
|
|
<div class="stat-row">
|
|
<div class="scard">
|
|
<div>
|
|
<div class="scard-label">Total Sasaran KPM</div>
|
|
<div class="scard-num"><?= $totalKpm ?></div>
|
|
<div class="scard-sub">Keluarga Terdaftar</div>
|
|
</div>
|
|
<div class="scard-icon" style="background: #e0e7ff; color: #4f46e5;"><i class="fa fa-users"></i></div>
|
|
</div>
|
|
<div class="scard">
|
|
<div>
|
|
<div class="scard-label">Pos Ibadah Aktif</div>
|
|
<div class="scard-num"><?= $totalIbadah ?></div>
|
|
<div class="scard-sub">Mitra Distribusi</div>
|
|
</div>
|
|
<div class="scard-icon" style="background: #e0f2fe; color: #0369a1;"><i class="fa fa-mosque"></i></div>
|
|
</div>
|
|
<div class="scard">
|
|
<div>
|
|
<div class="scard-label">Wilayah Blank Spot</div>
|
|
<div class="scard-num" style="color:#dc2626"><?= $blankSpot ?></div>
|
|
<div class="scard-sub">Belum Tersentuh</div>
|
|
</div>
|
|
<div class="scard-icon" style="background: #fee2e2; color: #dc2626;"><i class="fa fa-street-view"></i></div>
|
|
</div>
|
|
<div class="scard">
|
|
<div>
|
|
<div class="scard-label">Bencana Daerah</div>
|
|
<div class="scard-num" style="color:<?= $bencanaAktif > 0 ? '#dc2626' : '#0f172a' ?>"><?= $bencanaAktif ?></div>
|
|
<div class="scard-sub">Status Darurat Aktif</div>
|
|
</div>
|
|
<div class="scard-icon" style="background: #fff1f2; color: #e11d48;"><i class="fa fa-triangle-exclamation"></i></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="coverage-box">
|
|
<div class="cov-top">
|
|
<div>
|
|
<h3 style="font-size: 14px; font-weight: 700;">Indeks Efektivitas Jangkauan Bantuan Daerah</h3>
|
|
<p style="font-size: 12px; color: #64748b; margin-top:2px;">Rasio keberhasilan penyerapan bantuan sosial yang dikoordinasikan melalui jajaran Rumah Ibadah.</p>
|
|
</div>
|
|
<div class="cov-pct"><?= $pct ?>%</div>
|
|
</div>
|
|
<div class="cov-track"><div class="cov-fill" style="width:<?= $pct ?>%"></div></div>
|
|
<div class="cov-meta">
|
|
<span>Terbantu: <strong><?= $terjangkau ?> KPM</strong></span>
|
|
<span>Blank Spot: <strong><?= $blankSpot ?> KPM</strong></span>
|
|
<span>Total Transaksi Bantuan: <strong><?= $totalBantuan ?> Kali</strong></span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="db-tables">
|
|
<div class="dbt-card">
|
|
<div class="dbt-head">
|
|
<h3><i class="fa fa-file-invoice"></i> Catatan Survei Rumah Warga (Melihat)</h3>
|
|
<a href="data-warga.php">Buka Halaman</a>
|
|
</div>
|
|
<table class="dbt">
|
|
<thead><tr><th>Kepala Keluarga</th><th>Kelurahan</th><th>Kondisi</th></tr></thead>
|
|
<tbody>
|
|
<?php while ($k = $kpmBaru->fetch_assoc()): ?>
|
|
<tr>
|
|
<td><strong><?= htmlspecialchars($k['nama_kepala_keluarga']) ?></strong><div style="font-size:11px;color:#94a3b8;">NIK: <?= $k['nik']?:'-' ?></div></td>
|
|
<td><?= htmlspecialchars($k['kelurahan'] ?: '-') ?></td>
|
|
<td><span class="badge-modern badge-danger"><?= $k['kondisi_rumah'] ?></span></td>
|
|
</tr>
|
|
<?php endwhile; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="dbt-card">
|
|
<div class="dbt-head">
|
|
<h3><i class="fa fa-hand-holding-heart"></i> Alokasi Logistik Terakhir</h3>
|
|
<a href="bantuan.php">Kelola Logistik</a>
|
|
</div>
|
|
<table class="dbt">
|
|
<thead><tr><th>Penerima KPM</th><th>Paket Bantuan</th><th>Tanggal</th></tr></thead>
|
|
<tbody>
|
|
<?php while ($b = $bantuanBaru->fetch_assoc()): ?>
|
|
<tr>
|
|
<td><strong><?= htmlspecialchars($b['nama_kepala_keluarga'] ?? '-') ?></strong></td>
|
|
<td><span class="badge-modern badge-success"><?= htmlspecialchars($b['jenis_bantuan']) ?></span></td>
|
|
<td style="color:#64748b"><?= date('d M Y', strtotime($b['tanggal'])) ?></td>
|
|
</tr>
|
|
<?php endwhile; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div> <?php include 'includes/footer.php'; ?>
|
|
</body>
|
|
</html>
|