Add student achievements module and improve student admin workflows

This commit is contained in:
2026-04-13 06:50:37 +00:00
parent b29c591285
commit fb904f9389
21 changed files with 1111 additions and 180 deletions
+50 -1
View File
@@ -92,7 +92,7 @@
</x-master-card>
</div>
<div class="mt-6">
<div class="mt-6 grid grid-cols-1 gap-6 xl:grid-cols-2">
<x-master-card title="Histori Akademik Siswa" subtitle="Riwayat penempatan siswa per tahun angkatan, jurusan, dan kelas.">
@if ($student->academicHistories->isEmpty())
<div class="text-sm text-slate-500">Belum ada histori akademik untuk siswa ini.</div>
@@ -129,6 +129,55 @@
</div>
@endif
</x-master-card>
<x-master-card title="Riwayat Prestasi Siswa" subtitle="Catatan prestasi akademik maupun non-akademik siswa.">
<div class="mb-4">
<a href="{{ route('student-achievements.create', ['student_id' => $student->id]) }}" class="inline-flex items-center rounded-2xl bg-amber-500 px-4 py-2.5 text-sm font-semibold text-white shadow-lg shadow-amber-200 transition hover:bg-amber-600">
Tambah Prestasi
</a>
</div>
@if ($student->achievements->isEmpty())
<div class="text-sm text-slate-500">Belum ada data prestasi untuk siswa ini.</div>
@else
<div class="space-y-4">
@foreach ($student->achievements as $achievement)
<div class="rounded-3xl border border-slate-200 bg-slate-50 p-5 text-sm text-slate-600 shadow-sm shadow-slate-200/40">
<div class="flex flex-col gap-3 md:flex-row md:items-start md:justify-between">
<div>
<div class="flex flex-wrap items-center gap-2">
<div class="font-semibold text-slate-800">{{ $achievement->achievement_name }}</div>
@if ($achievement->level)
<span class="rounded-full bg-amber-100 px-3 py-1 text-xs font-semibold text-amber-700">{{ $achievement->level }}</span>
@endif
@if ($achievement->rank)
<span class="rounded-full bg-indigo-100 px-3 py-1 text-xs font-semibold text-indigo-700">{{ $achievement->rank }}</span>
@endif
</div>
<div class="mt-2">Kategori: {{ $achievement->category ?: '-' }}</div>
<div>Penyelenggara: {{ $achievement->organizer ?: '-' }}</div>
<div>Tahun/Tanggal: {{ $achievement->achievement_year ?: '-' }} · {{ $achievement->achievement_date?->format('d-m-Y') ?: '-' }}</div>
@if ($achievement->description)
<div class="mt-2 rounded-xl bg-white px-3 py-2 text-xs text-slate-500">
{{ $achievement->description }}
</div>
@endif
</div>
<div class="flex flex-wrap gap-2">
@if ($achievement->certificate_file)
<a href="{{ asset('storage/' . $achievement->certificate_file) }}" target="_blank" class="rounded-xl border border-indigo-200 px-3 py-2 text-xs font-semibold text-indigo-700 transition hover:bg-indigo-50">Piagam</a>
@endif
@if ($achievement->activity_photo)
<button type="button" data-lightbox-trigger data-lightbox-src="{{ asset('storage/' . $achievement->activity_photo) }}" data-lightbox-title="Foto Kegiatan — {{ $achievement->achievement_name }}" class="rounded-xl border border-emerald-200 px-3 py-2 text-xs font-semibold text-emerald-700 transition hover:bg-emerald-50">Foto</button>
@endif
<a href="{{ route('student-achievements.edit', $achievement) }}" class="rounded-xl border border-slate-200 px-3 py-2 text-xs font-semibold text-slate-700 transition hover:bg-slate-100">Edit</a>
</div>
</div>
</div>
@endforeach
</div>
@endif
</x-master-card>
</div>
<div class="mt-6 grid grid-cols-1 gap-6 xl:grid-cols-2">