MIF_E31231754/resources/views/publik/penerima.blade.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') }}
&mdash;
{{ \Carbon\Carbon::parse($periode->tanggal_selesai)->isoFormat('D MMM Y') }}
&nbsp;&bull;&nbsp;
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