185 lines
6.8 KiB
PHP
185 lines
6.8 KiB
PHP
@extends('publik.layouts.app')
|
|
@section('title', 'Daftar Penerima BLT')
|
|
|
|
@push('styles')
|
|
<style>
|
|
.periode-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 5px 14px;
|
|
border-radius: 20px;
|
|
font-size: 0.82rem;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
text-decoration: none;
|
|
border: 2px solid transparent;
|
|
transition: all 0.18s;
|
|
}
|
|
.periode-pill.active {
|
|
background: #2d7a4f;
|
|
color: #fff;
|
|
border-color: #2d7a4f;
|
|
}
|
|
.periode-pill:not(.active) {
|
|
background: #fff;
|
|
color: #374151;
|
|
border-color: #e5e7eb;
|
|
}
|
|
.periode-pill:not(.active):hover {
|
|
border-color: #2d7a4f;
|
|
color: #2d7a4f;
|
|
}
|
|
.penerima-card {
|
|
background: #fff;
|
|
border-radius: 12px;
|
|
padding: 16px 18px;
|
|
box-shadow: 0 2px 8px rgba(0,0,0,0.06);
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 14px;
|
|
transition: transform 0.18s, box-shadow 0.18s;
|
|
}
|
|
.penerima-card:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 6px 20px rgba(0,0,0,0.1);
|
|
}
|
|
.rank-badge {
|
|
width: 42px; height: 42px;
|
|
border-radius: 10px;
|
|
background: #e0f2e9;
|
|
color: #2d7a4f;
|
|
font-weight: 800;
|
|
font-size: 1rem;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex-shrink: 0;
|
|
}
|
|
.rank-badge.top1 { background: #fef3c7; color: #d97706; }
|
|
.rank-badge.top2 { background: #f1f5f9; color: #64748b; }
|
|
.rank-badge.top3 { background: #fce7f3; color: #be185d; }
|
|
.filter-bar {
|
|
background: #fff;
|
|
border-radius: 14px;
|
|
padding: 20px 24px;
|
|
box-shadow: 0 2px 8px rgba(0,0,0,0.06);
|
|
margin-bottom: 28px;
|
|
}
|
|
</style>
|
|
@endpush
|
|
|
|
@section('content')
|
|
<div class="container py-5">
|
|
|
|
{{-- Header --}}
|
|
<div class="text-center mb-4">
|
|
<h2 style="font-weight:800;color:#1a3c2e;">Daftar Penerima BLT Dana Desa</h2>
|
|
<p class="text-muted">Hasil seleksi resmi berdasarkan metode Simple Additive Weighting (SAW)</p>
|
|
</div>
|
|
|
|
{{-- Filter Periode --}}
|
|
@if($periodeList->isNotEmpty())
|
|
<div class="filter-bar">
|
|
<div class="d-flex align-items-center gap-2 flex-wrap">
|
|
<span style="font-size:0.85rem;font-weight:600;color:#374151;white-space:nowrap;">
|
|
<i class="bi bi-funnel me-1 text-success"></i>Pilih Periode:
|
|
</span>
|
|
@foreach($periodeList as $p)
|
|
<a href="{{ route('publik.penerima', ['periode_id' => $p->id]) }}"
|
|
class="periode-pill {{ $periode && $periode->id == $p->id ? 'active' : '' }}">
|
|
@if($p->status === 'aktif')
|
|
<span style="width:6px;height:6px;border-radius:50%;background:currentColor;display:inline-block;"></span>
|
|
@endif
|
|
{{ $p->nama }}
|
|
</a>
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
@if(!$periode)
|
|
{{-- Tidak ada periode selesai --}}
|
|
<div class="text-center py-5">
|
|
<i class="bi bi-calendar-x" style="font-size:3rem;color:#d1d5db;"></i>
|
|
<div class="mt-3 text-muted">Belum ada periode seleksi yang selesai.</div>
|
|
</div>
|
|
|
|
@else
|
|
{{-- Info Periode Aktif --}}
|
|
<div class="d-flex align-items-center justify-content-between mb-4 flex-wrap gap-2">
|
|
<div>
|
|
<h5 class="fw-bold mb-1" style="color:#1a3c2e;">
|
|
<i class="bi bi-calendar-check me-2 text-success"></i>{{ $periode->nama }}
|
|
</h5>
|
|
<div class="text-muted" style="font-size:0.85rem;">
|
|
<i class="bi bi-calendar3 me-1"></i>
|
|
{{ \Carbon\Carbon::parse($periode->tanggal_mulai)->isoFormat('D MMM Y') }}
|
|
—
|
|
{{ \Carbon\Carbon::parse($periode->tanggal_selesai)->isoFormat('D MMM Y') }}
|
|
•
|
|
Kuota: <strong>{{ $periode->kuota_penerima }} orang</strong>
|
|
</div>
|
|
</div>
|
|
<span class="badge bg-success px-3 py-2" style="font-size:0.82rem;">
|
|
<i class="bi bi-people-fill me-1"></i>{{ $hasil->count() }} Penerima
|
|
</span>
|
|
</div>
|
|
|
|
@if($hasil->isEmpty())
|
|
<div class="text-center py-5">
|
|
<i class="bi bi-inbox" style="font-size:3rem;color:#d1d5db;"></i>
|
|
<div class="mt-3 text-muted">Belum ada data penerima untuk periode ini.</div>
|
|
</div>
|
|
@else
|
|
|
|
{{-- Grid Penerima --}}
|
|
<div class="row g-3">
|
|
@foreach($hasil as $h)
|
|
<div class="col-md-6 col-lg-4">
|
|
<div class="penerima-card">
|
|
<div class="rank-badge {{ $h->ranking == 1 ? 'top1' : ($h->ranking == 2 ? 'top2' : ($h->ranking == 3 ? 'top3' : '')) }}">
|
|
@if($h->ranking == 1) 🥇
|
|
@elseif($h->ranking == 2) 🥈
|
|
@elseif($h->ranking == 3) 🥉
|
|
@else #{{ $h->ranking }}
|
|
@endif
|
|
</div>
|
|
<div style="flex:1;min-width:0;">
|
|
<div style="font-weight:700;color:#1a3c2e;font-size:0.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
|
|
{{ $h->warga->nama ?? '-' }}
|
|
</div>
|
|
<div style="font-size:0.78rem;color:#6b7280;margin-top:2px;">
|
|
<i class="bi bi-geo-alt me-1"></i>
|
|
Dusun {{ $h->warga->wilayah->dusun ?? '-' }} / RW {{ $h->warga->wilayah->rw ?? '-' }}
|
|
</div>
|
|
<div style="font-size:0.75rem;color:#9ca3af;margin-top:2px;">
|
|
Skor SAW: <span style="font-weight:600;color:#2d7a4f;">{{ number_format($h->skor_akhir, 4) }}</span>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<span class="badge" style="background:#e0f2e9;color:#065f46;font-size:0.7rem;">Penerima</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
|
|
{{-- Catatan transparansi --}}
|
|
<div class="mt-5 p-4 rounded-3 text-center" style="background:#f0f7f3;border:1px solid #d1fae5;">
|
|
<i class="bi bi-shield-check text-success" style="font-size:1.5rem;"></i>
|
|
<div class="fw-semibold mt-2" style="color:#1a3c2e;">Hasil Seleksi Objektif & Transparan</div>
|
|
<div class="text-muted mt-1" style="font-size:0.85rem;">
|
|
Penetapan penerima berdasarkan skor SAW dari 7 kriteria penilaian. Data dapat diverifikasi oleh masyarakat.
|
|
</div>
|
|
<a href="{{ route('publik.peta', ['periode_id' => $periode->id]) }}" class="btn btn-sm mt-3" style="background:#2d7a4f;color:#fff;border-radius:8px;">
|
|
<i class="bi bi-geo-alt-fill me-1"></i>Lihat Peta Distribusi
|
|
</a>
|
|
</div>
|
|
|
|
@endif
|
|
@endif
|
|
|
|
</div>
|
|
@endsection
|