MIF_E31221247/resources/views/admin/dashboard.blade.php

204 lines
7.7 KiB
PHP

@extends('admin.layout.main')
@section('main')
@php
use App\Models\Penyakit;
use App\Models\DataPengguna;
use App\Models\Indikator;
use App\Models\User;
// Mengambil data statistik penyakit berdasarkan konsultasi
$statistik = DataPengguna::selectRaw('kode_penyakit, COUNT(*) as jumlah')
->groupBy('kode_penyakit')
->get();
$labels = $statistik->pluck('kode_penyakit')->toArray();
$data = $statistik->pluck('jumlah')->toArray();
$warna = ['#FF6384', '#36A2EB', '#FFCE56', '#4CAF50', '#FF9800', '#9C27B0'];
@endphp
<div class="page-heading text-center mb-4">
<h1 class="display-4 text-primary fw-bold">Dashboard Sistem Pakar</h1>
<p class="lead text-muted">Selamat datang di dashboard admin. Pantau statistik dan aktivitas sistem pakar di sini.</p>
</div>
<div class="page-content">
<!-- Statistik Utama -->
<section class="row mb-4">
<div class="col-md-4">
<div class="card shadow-sm border-0 hover-scale">
<div class="card-body p-4">
<div class="d-flex align-items-center">
<div class="stats-icon purple me-3">
<i class="bi bi-heart-pulse fs-2"></i>
</div>
<div>
<h6 class="text-muted mb-1">Jumlah Penyakit</h6>
<h3 class="fw-bold mb-0">{{ number_format(Penyakit::all()->count()) }}</h3>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card shadow-sm border-0 hover-scale">
<div class="card-body p-4">
<div class="d-flex align-items-center">
<div class="stats-icon blue me-3">
<i class="bi bi-clipboard-data fs-2"></i>
</div>
<div>
<h6 class="text-muted mb-1">Jumlah Indikator</h6>
<h3 class="fw-bold mb-0">{{ number_format(Indikator::all()->count()) }}</h3>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card shadow-sm border-0 hover-scale">
<div class="card-body p-4">
<div class="d-flex align-items-center">
<div class="stats-icon green me-3">
<i class="bi bi-people fs-2"></i>
</div>
<div>
<h6 class="text-muted mb-1">Riwayat Konsultasi</h6>
<h3 class="fw-bold mb-0">{{ number_format(DataPengguna::all()->count()) }}</h3>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Grafik Distribusi Penyakit -->
<div class="card shadow-sm border-0 mb-4">
<div class="card-header bg-primary text-white">
<h4 class="mb-0 text-white"><i class="bi bi-pie-chart me-2"></i>Distribusi Penyakit Berdasarkan Konsultasi</h4>
</div>
<div class="card-body">
<div class="row mt-3"> <!-- Tambahkan margin-top untuk memberi jarak -->
<div class="col-md-6 d-flex align-items-center justify-content-center">
<div style="width: 100%; max-width: 300px;"> <!-- Ukuran pie chart diperkecil -->
<canvas id="penyakitChart"></canvas>
</div>
</div>
<div class="col-md-6">
<h5 class="mb-3">Keterangan:</h5>
<ul class="list-unstyled">
@foreach ($labels as $index => $kode)
<li class="mb-2">
<span style="display: inline-block; width: 15px; height: 15px; background-color: {{ $warna[$index] }}; margin-right: 10px;"></span>
<strong>{{ $kode }}</strong> - {{ Penyakit::where('kode', $kode)->first()->penyakit ?? 'Tidak Diketahui' }}
<span class="text-muted">({{ $data[$index] }} kasus)</span>
</li>
@endforeach
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Script Chart.js & ChartDataLabels -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels"></script>
<script>
Chart.register(ChartDataLabels);
var ctx = document.getElementById('penyakitChart').getContext('2d');
var penyakitChart = new Chart(ctx, {
type: 'pie',
data: {
labels: {!! json_encode($labels) !!},
datasets: [{
data: {!! json_encode($data) !!},
backgroundColor: {!! json_encode($warna) !!},
hoverOffset: 4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
display: false // Legenda manual sudah dibuat di samping chart
},
datalabels: {
color: '#fff',
font: {
weight: 'bold',
size: 12 // Ukuran font diperkecil
},
formatter: (value) => value + ' kasus'
}
}
}
});
</script>
<style>
/* Animasi hover pada card */
.hover-scale {
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.hover-scale:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.15);
}
/* Warna ikon statistik */
.stats-icon.purple {
color: #6f42c1;
}
.stats-icon.blue {
color: #0d6efd;
}
.stats-icon.green {
color: #198754;
}
/* Efek hover pada ikon */
.stats-icon i {
transition: transform 0.3s ease;
}
.stats-icon:hover i {
transform: scale(1.1);
}
/* Jarak antar card */
.card {
margin-bottom: 15px; /* Jarak antar card diperkecil */
}
/* Header card yang lebih menarik */
.card-header {
padding: 0.75rem 1.25rem; /* Padding header diperkecil */
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
/* Padding dan margin yang lebih baik */
.card-body {
padding: 1rem; /* Padding body card diperkecil */
}
/* Teks keterangan yang lebih rapi */
.list-unstyled li {
padding: 0.5rem 0;
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
}
.list-unstyled li:last-child {
border-bottom: none;
}
/* Mengurangi ukuran font pada judul dashboard */
.page-heading h1 {
font-size: 2.5rem;
}
.page-heading p {
font-size: 1rem;
}
</style>
@endsection