204 lines
7.7 KiB
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 |