191 lines
6.9 KiB
PHP
191 lines
6.9 KiB
PHP
@extends('layout.app')
|
|
|
|
@section('title', 'Daftar Rekomendasi Ahli')
|
|
|
|
@include('admin.shared.admin-styles')
|
|
|
|
@section('content')
|
|
<div class="admin-container container-fluid">
|
|
<!-- Page Header -->
|
|
<div class="page-header animate-fade-in">
|
|
<div class="row align-items-center">
|
|
<div class="col-12">
|
|
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-3">
|
|
<div>
|
|
<h3 class="mb-1 text-white d-flex align-items-center">
|
|
<i class="fas fa-user-md me-2"></i>Daftar Rekomendasi Ahli
|
|
</h3>
|
|
<nav aria-label="breadcrumb">
|
|
<ol class="breadcrumb mb-0">
|
|
<li class="breadcrumb-item"><a href="{{ route('admindash') }}" class="text-white-50">Dashboard</a></li>
|
|
<li class="breadcrumb-item active text-white" aria-current="page">Rekomendasi Ahli</li>
|
|
</ol>
|
|
</nav>
|
|
</div>
|
|
<div class="d-flex gap-2">
|
|
<button class="admin-btn btn-primary" onclick="window.location.reload()">
|
|
<i class="fas fa-sync-alt me-1"></i>Refresh
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Card per Hari -->
|
|
<div class="d-flex overflow-auto gap-4 flex-nowrap px-2" id="cardsContainer">
|
|
@foreach($daftarHari as $hari)
|
|
<div class="recommendation-card flex-shrink-0" style="min-width: 360px;">
|
|
<div class="card-header bg-gradient-primary d-flex justify-content-between align-items-center">
|
|
<h5 class="mb-0 text-truncate">
|
|
<i class="fas fa-calendar-day me-2"></i>{{ $hari }}
|
|
</h5>
|
|
<a href="{{ route('rekomendasi_ahli.create', ['hari' => $hari]) }}" class="btn btn-sm btn-light" title="Tambah Rekomendasi">
|
|
<i class="fas fa-plus"></i>
|
|
</a>
|
|
</div>
|
|
<div class="card-body">
|
|
@if(isset($rekomendasiByHari[$hari]) && $rekomendasiByHari[$hari]->count())
|
|
@foreach(
|
|
$rekomendasiByHari[$hari]
|
|
->sortBy('waktuMakan.urutan') // pastikan ada kolom 'urutan' di waktu_makan
|
|
->groupBy('waktu_makan_id') as $waktuMakanId => $groupByWaktu
|
|
)
|
|
<div class="mb-3">
|
|
<span class="badge bg-info mb-1">
|
|
{{ $groupByWaktu->first()->waktuMakan->nama ?? '-' }}
|
|
</span>
|
|
<div class="components-container">
|
|
@foreach(
|
|
collect($groupByWaktu->groupBy('komponen_id'))
|
|
->sortBy(function ($item, $key) {
|
|
$order = ['Karbohidrat', 'Protein', 'Sayur', 'Buah', 'Susu', 'Snack'];
|
|
return array_search(optional($item->first()->komponen)->nama, $order);
|
|
}) as $komponenId => $groupByKomponen
|
|
)
|
|
<div class="mb-2">
|
|
<span class="component-badge">
|
|
{{ $groupByKomponen->first()->komponen->nama ?? '-' }}
|
|
</span>
|
|
<ul class="mb-0 ps-3">
|
|
@foreach($groupByKomponen as $rekomendasi)
|
|
<li class="d-flex align-items-center justify-content-between">
|
|
<span>{{ $rekomendasi->makanan->nama ?? '-' }}</span>
|
|
<form action="{{ route('rekomendasi_ahli.destroy', $rekomendasi->id) }}" method="POST" class="ms-2 d-inline-block" onsubmit="return confirm('Yakin ingin menghapus rekomendasi ini?')">
|
|
@csrf
|
|
@method('DELETE')
|
|
<button type="submit" class="btn btn-sm btn-danger" title="Hapus">
|
|
<i class="fas fa-trash"></i>
|
|
</button>
|
|
</form>
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
@else
|
|
<div class="text-muted">Tidak ada rekomendasi untuk hari ini.</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<style>
|
|
@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;700&display=swap');
|
|
|
|
#cardsContainer {
|
|
scroll-snap-type: x mandatory;
|
|
padding-bottom: 1rem;
|
|
}
|
|
.recommendation-card {
|
|
scroll-snap-align: start;
|
|
width: 360px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.stats-overview {
|
|
margin-bottom: 2rem;
|
|
}
|
|
.stat-card {
|
|
padding: 1.5rem;
|
|
border-radius: 1rem;
|
|
color: white;
|
|
height: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 1.5rem;
|
|
transition: transform 0.3s ease;
|
|
}
|
|
.stat-card:hover {
|
|
transform: translateY(-5px);
|
|
}
|
|
.stat-icon {
|
|
font-size: 2.5rem;
|
|
opacity: 0.9;
|
|
}
|
|
.stat-details {
|
|
flex-grow: 1;
|
|
}
|
|
.stat-value {
|
|
font-size: 1.75rem;
|
|
font-weight: 600;
|
|
margin-bottom: 0.25rem;
|
|
}
|
|
.stat-label {
|
|
margin-bottom: 0;
|
|
opacity: 0.9;
|
|
font-size: 0.9rem;
|
|
}
|
|
.recommendation-card {
|
|
background: white;
|
|
border-radius: 1rem;
|
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
|
transition: all 0.3s ease;
|
|
height: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
.recommendation-card:hover {
|
|
transform: translateY(-5px);
|
|
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.15);
|
|
}
|
|
.card-header {
|
|
padding: 1.25rem;
|
|
color: white;
|
|
}
|
|
.bg-gradient-primary {
|
|
background: linear-gradient(45deg, #2196f3, #64b5f6);
|
|
}
|
|
.card-body {
|
|
padding: 1.25rem;
|
|
flex-grow: 1;
|
|
}
|
|
.section-title {
|
|
font-size: 1rem;
|
|
font-weight: 600;
|
|
margin-bottom: 1rem;
|
|
color: #333;
|
|
}
|
|
.components-container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.5rem;
|
|
}
|
|
.component-badge {
|
|
background: #e3f2fd;
|
|
color: #1976d2;
|
|
padding: 0.35rem 0.75rem;
|
|
border-radius: 2rem;
|
|
font-size: 0.875rem;
|
|
margin-bottom: 0.25rem;
|
|
display: inline-block;
|
|
}
|
|
</style>
|
|
@endsection
|