202 lines
11 KiB
PHP
202 lines
11 KiB
PHP
@extends('layoutuser.app')
|
|
@section('content')
|
|
|
|
<div style="background: linear-gradient(to bottom, #e3f2fd, #bbdefb); min-height: 100vh; padding-top: 5rem; padding-bottom: 5rem;">
|
|
<div class="container">
|
|
<div class="text-center mb-5">
|
|
<p class="d-inline-block border rounded-pill bg-primary text-light py-1 px-4">Hasil Simulasi</p>
|
|
<h1 class="text-dark mb-4">Hasil Simulasi Rekomendasi Menu</h1>
|
|
<p class="text-dark mb-4 pb-2">
|
|
Berikut adalah hasil simulasi pemilihan menu berdasarkan metode AHP
|
|
</p>
|
|
</div>
|
|
|
|
<div class="row justify-content-center">
|
|
<div class="col-lg-10">
|
|
<!-- Informasi Simulasi -->
|
|
<div class="card shadow-sm mb-4">
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<h6 class="mb-3">Informasi Simulasi</h6>
|
|
<table class="table table-sm">
|
|
<tr>
|
|
<td>Waktu Makan</td>
|
|
<td>{{ $waktuMakan->nama }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Komponen</td>
|
|
<td>{{ $komponen->nama }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Jumlah Makanan</td>
|
|
<td>{{ count($hasilSimulasi['makanan_ids']) }} makanan</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<h6 class="mb-3">Kriteria yang Dipertimbangkan</h6>
|
|
<ul class="list-unstyled">
|
|
@foreach($kriterias as $kriteria)
|
|
@php
|
|
$bobot = $hasilSimulasi['bobot_kriteria'][$kriteria->id] ?? 0;
|
|
@endphp
|
|
<li>
|
|
<i class="fas fa-check-circle text-success me-2"></i>
|
|
{{ $kriteria->nama }}
|
|
<span class="badge bg-primary ms-2">{{ number_format($bobot, 4) }}</span>
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
@if($crCriteria)
|
|
<div class="mt-2">
|
|
<span class="badge bg-info">CR Kriteria: {{ number_format($crCriteria->cr, 4) }}</span>
|
|
<span class="ms-2">({{ $crCriteria->cr <= 0.1 ? 'Konsisten' : 'Tidak Konsisten' }})</span>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Hasil Ranking -->
|
|
<div class="card shadow-sm mb-4">
|
|
<div class="card-header bg-white">
|
|
<h5 class="mb-0">Hasil Ranking Makanan</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
@php
|
|
// Ambil makanan dengan skor tertinggi
|
|
$topMakananId = array_key_first($hasilSimulasi['hasil']);
|
|
$topSkor = $hasilSimulasi['hasil'][$topMakananId] ?? 0;
|
|
$topMakanan = $makanans->keyBy('id')[$topMakananId] ?? null;
|
|
@endphp
|
|
@if($topMakanan)
|
|
<div class="alert alert-success mb-4">
|
|
<strong>Kesimpulan:</strong> Berdasarkan hasil simulasi AHP, <b>{{ $topMakanan->nama }}</b> memperoleh skor tertinggi ({{ number_format($topSkor, 4) }}), sehingga <b>paling direkomendasikan</b> untuk dikonsumsi pada waktu makan <b>{{ $waktuMakan->nama }}</b> dengan komponen <b>{{ $komponen->nama }}</b>.<br>
|
|
<br>
|
|
<u>Pendekatan Analisis Gizi:</u><br>
|
|
<span class="text-dark">Pilihan ini didasarkan pada analisis nilai gizi utama, yaitu:
|
|
<ul class="mb-1">
|
|
<li>Energi: <b>{{ $topMakanan->energi }}</b> kkal</li>
|
|
<li>Protein: <b>{{ $topMakanan->protein }}</b> g</li>
|
|
<li>Lemak: <b>{{ $topMakanan->lemak }}</b> g</li>
|
|
<li>Karbohidrat: <b>{{ $topMakanan->karbohidrat }}</b> g</li>
|
|
<li>Natrium: <b>{{ $topMakanan->natrium }}</b> mg</li>
|
|
</ul>
|
|
Dengan mempertimbangkan bobot kriteria yang telah ditentukan, makanan ini dinilai paling sesuai dengan kebutuhan gizi dan prinsip pemilihan menu oleh ahli gizi.<br>
|
|
<span class="text-primary">Pilihlah makanan ini untuk hasil yang optimal bagi kesehatan Anda.</span>
|
|
</span>
|
|
</div>
|
|
@endif
|
|
<div class="table-responsive">
|
|
<table class="table table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>Ranking</th>
|
|
<th>Nama Makanan</th>
|
|
<th>Skor Akhir</th>
|
|
<th>Detail Nutrisi</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@php
|
|
$rank = 1;
|
|
$makananMap = $makanans->keyBy('id');
|
|
@endphp
|
|
@foreach($hasilSimulasi['hasil'] as $makananId => $skor)
|
|
@php
|
|
$makanan = $makananMap[$makananId] ?? null;
|
|
@endphp
|
|
@if($makanan)
|
|
<tr>
|
|
<td>{{ $rank++ }}</td>
|
|
<td>{{ $makanan->nama }}</td>
|
|
<td>{{ number_format($skor, 4) }}</td>
|
|
<td>
|
|
<button type="button" class="btn btn-link btn-sm p-0"
|
|
onclick="showDetailMakanan(this)"
|
|
data-lemak="{{ $makanan->lemak }}"
|
|
data-natrium="{{ $makanan->natrium }}"
|
|
data-energi="{{ $makanan->energi }}"
|
|
data-karbohidrat="{{ $makanan->karbohidrat }}">
|
|
<i class="fas fa-info-circle"></i> Lihat Detail
|
|
</button>
|
|
</td>
|
|
</tr>
|
|
@endif
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Tombol Kembali -->
|
|
<div class="text-center">
|
|
<a href="{{ route('user.simulasi.index') }}" class="btn btn-primary rounded-pill px-5 py-2 me-2">
|
|
<i class="fas fa-arrow-left me-2"></i>Kembali ke Simulasi
|
|
</a>
|
|
<a href="{{ route('user.simulasi.history') }}" class="btn btn-info rounded-pill px-5 py-2">
|
|
<i class="fas fa-history me-2"></i>Lihat History
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Modal Detail Makanan -->
|
|
<div class="modal fade" id="modalDetailMakanan" tabindex="-1">
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title">Detail Makanan</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div class="row">
|
|
<!-- <div class="col-md-6">
|
|
<img id="makananImage" src="" class="img-fluid rounded" alt="Gambar Makanan">
|
|
</div> -->
|
|
<div class="col-md-6">
|
|
<h6 class="mb-3">Informasi Nutrisi</h6>
|
|
<table class="table table-sm">
|
|
<tr>
|
|
<td>Lemak</td>
|
|
<td id="makananLemak">-</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Natrium</td>
|
|
<td id="makananNatrium">-</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Energi</td>
|
|
<td id="makananEnergi">-</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Karbohidrat</td>
|
|
<td id="makananKarbohidrat">-</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@push('scripts')
|
|
<script>
|
|
function showDetailMakanan(btn) {
|
|
document.getElementById('makananLemak').textContent = btn.getAttribute('data-lemak') + ' g';
|
|
document.getElementById('makananNatrium').textContent = btn.getAttribute('data-natrium') + ' mg';
|
|
document.getElementById('makananEnergi').textContent = btn.getAttribute('data-energi') + ' kkal';
|
|
document.getElementById('makananKarbohidrat').textContent = btn.getAttribute('data-karbohidrat') + ' g';
|
|
var modal = new bootstrap.Modal(document.getElementById('modalDetailMakanan'));
|
|
modal.show();
|
|
}
|
|
</script>
|
|
@endpush
|
|
|
|
@endsection
|