199 lines
7.8 KiB
PHP
199 lines
7.8 KiB
PHP
@extends('siswa.layouts.app')
|
|
|
|
@section('title', 'Dashboard Siswa')
|
|
|
|
@section('content')
|
|
<section class="section">
|
|
<div class="section-header">
|
|
<h1>Dashboard Siswa</h1>
|
|
</div>
|
|
|
|
<div class="section-body">
|
|
|
|
{{-- Kartu Mata Pelajaran --}}
|
|
<div class="row">
|
|
<div class="col-lg-4 col-md-6 col-sm-6 col-12">
|
|
<div class="card card-statistic-1">
|
|
<div class="card-icon bg-primary">
|
|
<i class="fas fa-book"></i>
|
|
</div>
|
|
<div class="card-wrap">
|
|
<div class="card-header">
|
|
<h4>Mata Pelajaran</h4>
|
|
</div>
|
|
<div class="card-body">
|
|
{{ $jumlahMapel ?? 0 }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Ujian Hari Ini --}}
|
|
<div class="card mb-4">
|
|
<div class="card-header">
|
|
<h4>Ujian Hari Ini <small class="text-muted">({{ \Carbon\Carbon::now()->translatedFormat('d F Y') }})</small></h4>
|
|
</div>
|
|
<div class="card-body p-0 overflow-auto" style="max-height: 220px;">
|
|
@if ($ujianHariIni->isEmpty())
|
|
<div class="p-3 text-center text-muted">Tidak ada ujian untuk hari ini.</div>
|
|
@else
|
|
<div class="table-responsive">
|
|
<table class="table table-hover mb-0">
|
|
<thead class="thead-light">
|
|
<tr>
|
|
<th>Judul</th>
|
|
<th>Mata Pelajaran</th>
|
|
<th>Waktu Mulai</th>
|
|
<th>Waktu Selesai</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach ($ujianHariIni as $ujian)
|
|
<tr>
|
|
<td>{{ $ujian->judul ?? '-' }}</td>
|
|
<td>{{ optional($ujian->mapel)->nama_mapel ?? '-' }}</td>
|
|
<td>{{ \Carbon\Carbon::parse($ujian->waktu_mulai ?? $ujian->tanggal_ujian)->translatedFormat('H:i') }}</td>
|
|
<td>{{ \Carbon\Carbon::parse($ujian->waktu_selesai ?? $ujian->tanggal_ujian)->translatedFormat('H:i') }}</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Tugas Hari Ini --}}
|
|
<div class="card mb-4">
|
|
<div class="card-header">
|
|
<h4>Tugas Hari Ini <small class="text-muted">({{ \Carbon\Carbon::now()->translatedFormat('d F Y') }})</small></h4>
|
|
</div>
|
|
<div class="card-body p-0 overflow-auto" style="max-height: 220px;">
|
|
@if ($tugasHariIni->isEmpty())
|
|
<div class="p-3 text-center text-muted">Tidak ada tugas untuk hari ini.</div>
|
|
@else
|
|
<div class="table-responsive">
|
|
<table class="table table-hover mb-0">
|
|
<thead class="thead-light">
|
|
<tr>
|
|
<th>Judul</th>
|
|
<th>Materi</th>
|
|
<th>Deadline</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach ($tugasHariIni as $tugas)
|
|
<tr>
|
|
<td>{{ $tugas->judul ?? '-' }}</td>
|
|
<td>{{ optional($tugas->materi)->judul ?? '-' }}</td>
|
|
<td>{{ \Carbon\Carbon::parse($tugas->deadline ?? $tugas->tanggal)->translatedFormat('H:i') }}</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Mata Pelajaran Hari Ini --}}
|
|
<div class="card mb-4">
|
|
<div class="card-header">
|
|
<h4>Mata Pelajaran Hari Ini <small class="text-muted">({{ \Carbon\Carbon::now()->translatedFormat('d F Y') }})</small></h4>
|
|
</div>
|
|
<div class="card-body p-0 overflow-auto" style="max-height: 220px;">
|
|
@if ($jadwalHariIni->isEmpty())
|
|
<div class="p-3 text-center text-muted">Tidak ada mata pelajaran hari ini.</div>
|
|
@else
|
|
<div class="table-responsive">
|
|
<table class="table table-hover mb-0">
|
|
<thead class="thead-light">
|
|
<tr>
|
|
<th>Mata Pelajaran</th>
|
|
<th>Jam Mulai</th>
|
|
<th>Jam Selesai</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach ($jadwalHariIni as $jadwal)
|
|
<tr>
|
|
<td>{{ optional($jadwal->mapel)->nama_mapel ?? '-' }}</td>
|
|
<td>{{ \Carbon\Carbon::parse($jadwal->jam_mulai)->format('H:i') }}</td>
|
|
<td>{{ \Carbon\Carbon::parse($jadwal->jam_selesai)->format('H:i') }}</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
{{-- Kalender Jadwal Pelajaran + Tugas + Ujian --}}
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h4>Kalender Jadwal, Tugas, dan Ujian</h4>
|
|
</div>
|
|
<div class="card-body">
|
|
<div id="calendar"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
@endsection
|
|
|
|
@push('styles')
|
|
<link href="https://cdn.jsdelivr.net/npm/fullcalendar@6.1.8/index.global.min.css" rel="stylesheet" />
|
|
<style>
|
|
#calendar {
|
|
max-width: 100%;
|
|
margin: 0 auto;
|
|
}
|
|
.fc .fc-toolbar-title {
|
|
font-size: 0.9rem;
|
|
}
|
|
.fc .fc-button {
|
|
font-size: 0.75rem !important;
|
|
padding: 0.3rem 0.6rem !important;
|
|
}
|
|
.fc .fc-button-primary {
|
|
background-color: #6f42c1;
|
|
border: none;
|
|
}
|
|
.card-body.overflow-auto {
|
|
overflow-y: auto;
|
|
}
|
|
table.table-hover tbody tr:hover {
|
|
background-color: #f3f4f7;
|
|
}
|
|
thead.thead-light th {
|
|
background-color: #f8f9fa;
|
|
font-weight: 600;
|
|
}
|
|
</style>
|
|
@endpush
|
|
|
|
@push('scripts')
|
|
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@6.1.8/index.global.min.js"></script>
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
var calendarEl = document.getElementById('calendar');
|
|
var calendar = new FullCalendar.Calendar(calendarEl, {
|
|
initialView: 'timeGridWeek',
|
|
headerToolbar: {
|
|
left: 'prev,next today',
|
|
center: 'title',
|
|
right: 'timeGridWeek,timeGridDay,listWeek'
|
|
},
|
|
slotMinTime: "06:00:00",
|
|
slotMaxTime: "18:00:00",
|
|
allDaySlot: false,
|
|
events: @json($events),
|
|
eventColor: '#6f42c1',
|
|
});
|
|
calendar.render();
|
|
});
|
|
</script>
|
|
@endpush
|