sistem_rekomendasi/resources/views/admin/riwayat.blade.php

166 lines
6.8 KiB
PHP

@extends('admin.layout')
@section('content')
<div class="mb-4">
<h4 class="fw-bold text-dark">Riwayat Prediksi Jurusan</h4>
<p class="text-muted small">Hasil prediksi algoritma Random Forest berdasarkan profil siswa.</p>
</div>
<div class="card border-0 shadow-sm rounded-4">
<div class="card-body p-4">
<div class="table-responsive">
<table class="table table-hover align-middle">
<thead class="table-light">
<tr>
<th class="py-3 px-4">Tanggal</th>
<th class="py-3">Nama Siswa</th>
<th class="py-3">Hasil Rekomendasi</th>
<th class="py-3 text-center">Aksi</th>
</tr>
</thead>
<tbody id="table-riwayat">
<tr>
<td colspan="4" class="text-center py-4 text-muted">
<i class="fas fa-spinner fa-spin me-2"></i> Memuat data riwayat...
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="modal fade" id="detailModal" tabindex="-1" aria-labelledby="detailModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content border-0 shadow">
<div class="modal-header border-bottom-0 pb-0">
<h5 class="modal-title fw-bold" id="detailModalLabel">Detail Prediksi Jurusan</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body p-4" id="modal-body-content">
</div>
<div class="modal-footer border-top-0 pt-0">
<button type="button" class="btn btn-secondary px-4 rounded-pill shadow-none" data-bs-dismiss="modal">Tutup</button>
</div>
</div>
</div>
</div>
@push('scripts')
<script>
document.addEventListener('DOMContentLoaded', async function() {
const token = localStorage.getItem('access_token');
// Cek sesi login
if (!token) {
window.location.href = '/login';
return;
}
const tbody = document.getElementById('table-riwayat');
try {
// Memanggil API riwayat
const response = await fetch('/api/admin/riwayat', {
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json'
}
});
const result = await response.json();
if (result.success) {
const data = result.data;
// Jika data kosong
if (data.length === 0) {
tbody.innerHTML = '<tr><td colspan="4" class="text-center py-4 text-muted">Belum ada riwayat prediksi yang dilakukan siswa.</td></tr>';
return;
}
// Render data riwayat ke dalam tabel
tbody.innerHTML = data.map(item => `
<tr>
<td class="px-4 text-muted">${item.tanggal}</td>
<td class="fw-bold">${item.nama_siswa}</td>
<td><span class="badge bg-success px-3 py-2 rounded-pill shadow-none">${item.hasil}</span></td>
<td class="text-center">
<button class="btn btn-sm btn-light px-3 rounded-pill text-primary fw-medium" onclick="showDetail(${item.id})">
<i class="fas fa-file-alt me-1"></i> Detail
</button>
</td>
</tr>
`).join('');
} else {
tbody.innerHTML = `<tr><td colspan="4" class="text-center py-4 text-danger">Gagal memuat data: ${result.message}</td></tr>`;
}
} catch (error) {
console.error('Error fetching riwayat:', error);
tbody.innerHTML = '<tr><td colspan="4" class="text-center py-4 text-danger">Terjadi kesalahan jaringan atau server.</td></tr>';
}
});
/**
* Mengambil dan menampilkan detail riwayat di dalam Modal
*/
async function showDetail(id) {
const token = localStorage.getItem('access_token');
const modalBody = document.getElementById('modal-body-content');
// Tampilkan modal dengan state loading
const detailModal = new bootstrap.Modal(document.getElementById('detailModal'));
detailModal.show();
modalBody.innerHTML = `
<div class="text-center py-4">
<i class="fas fa-spinner fa-spin text-primary fs-3 mb-2"></i>
<p class="text-muted m-0">Mengambil detail...</p>
</div>
`;
try {
// Memanggil API detail riwayat
const response = await fetch(`/api/admin/riwayat/${id}`, {
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json'
}
});
const result = await response.json();
if (result.success) {
const data = result.data;
// Render detail ke dalam modal
modalBody.innerHTML = `
<div class="mb-3 border-bottom pb-2">
<span class="text-muted d-block small mb-1">Nama Lengkap Siswa</span>
<span class="fw-bold text-dark fs-5">${data.nama_siswa}</span>
</div>
<div class="mb-3 border-bottom pb-2">
<span class="text-muted d-block small mb-1">Email Siswa</span>
<span class="text-dark">${data.email_siswa}</span>
</div>
<div class="mb-3 border-bottom pb-2">
<span class="text-muted d-block small mb-1">Waktu Prediksi Dibuat</span>
<span class="text-dark">${data.tanggal}</span>
</div>
<div class="mb-2">
<span class="text-muted d-block small mb-2">Hasil Rekomendasi Random Forest</span>
<span class="badge bg-success px-3 py-2 rounded-pill fs-6 shadow-none">${data.hasil_rekomendasi}</span>
</div>
`;
} else {
modalBody.innerHTML = `<div class="alert alert-danger m-0">Gagal memuat detail: ${result.message}</div>`;
}
} catch (error) {
console.error('Error fetching detail:', error);
modalBody.innerHTML = `<div class="alert alert-danger m-0">Terjadi kesalahan jaringan saat mengambil detail.</div>`;
}
}
</script>
@endpush
@endsection