MIF_E31222307/resources/views/admin/admindash.blade.php

436 lines
16 KiB
PHP

@extends('layout.app')
@section('title', 'Admin Dashboard')
@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">
<h3 class="mb-2 text-white">
<i class="fas fa-tachometer-alt me-2"></i>Dashboard
</h3>
<nav aria-label="breadcrumb">
<ol class="breadcrumb mb-0">
<li class="breadcrumb-item active text-white" aria-current="page">Dashboard</li>
</ol>
</nav>
</div>
</div>
</div>
<!-- Statistics Overview -->
<div class="row mb-4">
<div class="col-xl-3 col-md-6 mb-4">
<div class="admin-card animate-fade-in">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="feature-icon bg-primary bg-gradient">
<i class="fas fa-users"></i>
</div>
<div class="ms-3">
<h6 class="mb-1">Total Users</h6>
<h4 class="mb-0">{{ $userCount ?? 0 }}</h4>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="admin-card animate-fade-in">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="feature-icon bg-success bg-gradient">
<i class="fas fa-utensils"></i>
</div>
<div class="ms-3">
<h6 class="mb-1">Total Foods</h6>
<h4 class="mb-0">{{ $makananCount ?? 0 }}</h4>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="admin-card animate-fade-in">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="feature-icon bg-warning bg-gradient">
<i class="fas fa-clock"></i>
</div>
<div class="ms-3">
<h6 class="mb-1">Meal Times</h6>
<h4 class="mb-0">{{ $waktuMakanCount ?? 0 }}</h4>
</div>
</div>
</div>
</div>
</div>
<div class="col-xl-3 col-md-6 mb-4">
<div class="admin-card animate-fade-in">
<div class="card-body">
<div class="d-flex align-items-center">
<div class="feature-icon bg-info bg-gradient">
<i class="fas fa-chart-pie"></i>
</div>
<div class="ms-3">
<h6 class="mb-1">Components</h6>
<h4 class="mb-0">{{ $komponenCount ?? 0 }}</h4>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Features Overview -->
<div class="row mb-4">
<div class="col-12">
<div class="admin-card animate-fade-in">
<div class="card-body">
<h5 class="card-title mb-4">
<i class="fas fa-th-large me-2"></i>Daftar Rekomendasi AHP
</h5>
<div class="row g-4">
@foreach($waktuMakans as $waktuMakan)
@php
$isNewlyCalculated = $waktuMakan->latest_calculation &&
\Carbon\Carbon::parse($waktuMakan->latest_calculation)->isToday();
@endphp
<div class="col-md-6 col-lg-4">
<div class="meal-card {{ $isNewlyCalculated ? 'newly-calculated' : '' }}">
<div class="meal-header {{ $isNewlyCalculated ? 'bg-gradient-success' : 'bg-gradient-primary' }}">
<div class="d-flex justify-content-between align-items-center">
<h6 class="mb-0">
<i class="fas fa-clock me-2"></i>{{ $waktuMakan->nama }}
</h6>
@if($waktuMakan->has_recommendation)
<span class="status-badge bg-light text-dark">
<i class="fas fa-check me-1"></i>Terhitung
</span>
@else
<span class="status-badge bg-warning">
<i class="fas fa-hourglass-half me-1"></i>Pending
</span>
@endif
</div>
</div>
<div class="meal-content">
@if($waktuMakan->latest_calculation)
<div class="info-row">
<i class="fas fa-calendar me-2"></i>
<span>{{ \Carbon\Carbon::parse($waktuMakan->latest_calculation)->format('d M Y H:i') }}</span>
</div>
@endif
</div>
<div class="meal-actions">
@if($waktuMakan->has_recommendation)
<a href="{{ route('rekomendasi.detail', $waktuMakan->id) }}"
class="btn btn-sm btn-primary">
<i class="fas fa-eye me-1"></i>Detail
</a>
@endif
<a href="{{ route('alternatif.pilih', ['waktu_makan' => $waktuMakan->id]) }}"
class="btn btn-sm {{ $waktuMakan->has_recommendation ? 'btn-outline-primary' : 'btn-primary' }}">
<i class="fas fa-calculator me-1"></i>
{{ $waktuMakan->has_recommendation ? 'Hitung Ulang' : 'Hitung' }}
</a>
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
</div>
</div>
<!-- AHP Guide -->
<div class="row mb-4">
<div class="col-lg-6">
<div class="admin-card animate-fade-in">
<div class="card-body">
<h5 class="card-title mb-4">
<i class="fas fa-scale-balanced me-2"></i>AHP Scale Guide
</h5>
<div class="row g-3">
<div class="col-sm-6">
<div class="d-flex align-items-center p-3 bg-light rounded">
<span class="admin-badge bg-success me-3">1</span>
<div>
<strong>Equal Importance</strong><br>
<small class="text-muted">Kedua elemen sama pentingnya</small>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="d-flex align-items-center p-3 bg-light rounded">
<span class="admin-badge bg-primary me-3">3</span>
<div>
<strong>Moderate</strong><br>
<small class="text-muted">Sedikit lebih penting</small>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="d-flex align-items-center p-3 bg-light rounded">
<span class="admin-badge bg-warning me-3">5</span>
<div>
<strong>Strong</strong><br>
<small class="text-muted">Lebih penting</small>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="d-flex align-items-center p-3 bg-light rounded">
<span class="admin-badge bg-danger me-3">7</span>
<div>
<strong>Very Strong</strong><br>
<small class="text-muted">Sangat penting</small>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="admin-card animate-fade-in">
<div class="card-body">
<h5 class="card-title mb-4">
<i class="fas fa-list-check me-2"></i>Quick Guide
</h5>
<div class="steps">
<div class="step d-flex align-items-start mb-4">
<span class="admin-badge bg-primary me-3">1</span>
<div>
<h6 class="mb-2">Data Master</h6>
<p class="text-muted mb-0">Input kriteria, komponen, dan waktu makan</p>
</div>
</div>
<div class="step d-flex align-items-start mb-4">
<span class="admin-badge bg-primary me-3">2</span>
<div>
<h6 class="mb-2">Pengaturan</h6>
<p class="text-muted mb-0">Atur relasi antar komponen</p>
</div>
</div>
<div class="step d-flex align-items-start">
<span class="admin-badge bg-primary me-3">3</span>
<div>
<h6 class="mb-2">Analisis</h6>
<p class="text-muted mb-0">Lakukan perhitungan dan review hasil</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Recent Activity -->
<div class="row">
<div class="col-12">
<div class="admin-card animate-fade-in">
<div class="card-body">
<h5 class="card-title mb-4">
<i class="fas fa-history me-2"></i>Recent Activity
</h5>
<div class="table-responsive">
<table class="admin-table">
<thead>
<tr>
<th>Time</th>
<th>User</th>
<th>Activity</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>10:30</td>
<td>Admin</td>
<td>Updated food database</td>
<td><span class="admin-badge bg-success">Completed</span></td>
</tr>
<tr>
<td>11:15</td>
<td>User</td>
<td>Generated recommendations</td>
<td><span class="admin-badge bg-warning">Processing</span></td>
</tr>
<tr>
<td>12:00</td>
<td>System</td>
<td>Backup completed</td>
<td><span class="admin-badge bg-info">Info</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
@push('styles')
<style>
/* Status Cards */
.status-card {
padding: 1.5rem;
border-radius: 1rem;
color: white;
height: 100%;
position: relative;
overflow: hidden;
transition: all 0.3s ease;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.status-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 15px rgba(0, 0, 0, 0.15);
}
.status-icon {
font-size: 2rem;
opacity: 0.9;
margin-bottom: 1rem;
}
.status-content {
position: relative;
z-index: 1;
}
.status-title {
font-size: 1rem;
font-weight: 500;
margin-bottom: 0.5rem;
opacity: 0.9;
}
.status-value {
font-size: 2rem;
font-weight: 600;
margin-bottom: 0.5rem;
}
.status-footer {
margin-top: 1rem;
}
.status-label {
font-size: 0.875rem;
opacity: 0.8;
}
/* Gradients */
.bg-gradient-primary {
background: linear-gradient(135deg, #2196f3, #1976d2);
}
.bg-gradient-success {
background: linear-gradient(135deg, #4caf50, #388e3c);
}
.bg-gradient-warning {
background: linear-gradient(135deg, #ff9800, #f57c00);
}
/* Responsive Adjustments */
@media (max-width: 768px) {
.status-card {
padding: 1rem;
}
.status-icon {
font-size: 1.5rem;
margin-bottom: 0.75rem;
}
.status-value {
font-size: 1.5rem;
}
}
.meal-card {
background: white;
border-radius: 0.75rem;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
overflow: hidden;
transition: all 0.3s ease;
}
.meal-card:hover {
transform: translateY(-3px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
}
.meal-header {
padding: 1rem;
color: white;
}
.meal-header h6 {
font-size: 1rem;
font-weight: 500;
}
.status-badge {
font-size: 0.75rem;
padding: 0.25rem 0.5rem;
border-radius: 0.5rem;
}
.meal-content {
padding: 1rem;
background: #f8f9fa;
}
.info-row {
display: flex;
align-items: center;
font-size: 0.875rem;
color: #6c757d;
margin-bottom: 0.5rem;
}
.info-row:last-child {
margin-bottom: 0;
}
.meal-actions {
padding: 1rem;
display: flex;
gap: 0.5rem;
justify-content: flex-end;
background: white;
border-top: 1px solid #e9ecef;
}
.newly-calculated {
border: 2px solid #4caf50;
}
/* Responsive Adjustments */
@media (max-width: 768px) {
.meal-header {
padding: 0.75rem;
}
.meal-content, .meal-actions {
padding: 0.75rem;
}
.info-row {
font-size: 0.8125rem;
}
}
</style>
@endpush
@endsection