feat: add graduation archive and public document services

This commit is contained in:
2026-04-14 13:51:39 +00:00
parent d77ad72bcc
commit 58c9b47dc0
30 changed files with 2513 additions and 295 deletions
@@ -0,0 +1,43 @@
<x-master-page :title="'Preview Dokumen ' . $documentLabel" description="Lihat dokumen siswa lulus langsung di browser bila format mendukung.">
<div class="grid grid-cols-1 gap-6 xl:grid-cols-3">
<x-master-card :title="'Informasi ' . $documentLabel" subtitle="Metadata dokumen siswa lulus.">
<div class="space-y-4 text-sm text-slate-600">
<div><span class="font-semibold text-slate-800">Nama Siswa:</span> {{ $graduation->full_name }}</div>
<div><span class="font-semibold text-slate-800">Jenis Dokumen:</span> {{ $documentLabel }}</div>
<div><span class="font-semibold text-slate-800">Nama File:</span> {{ $fileName ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Tipe MIME:</span> {{ $mimeType ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Ukuran:</span> {{ ($documentType === 'skl' ? $graduation->skl_file_size : $graduation->ijazah_file_size) ? number_format((($documentType === 'skl' ? $graduation->skl_file_size : $graduation->ijazah_file_size) / 1024), 1) . ' KB' : '-' }}</div>
<div><span class="font-semibold text-slate-800">Tanggal Lulus:</span> {{ $graduation->graduation_date?->format('d-m-Y') ?: '-' }}</div>
@if ($graduation->graduation_note)
<div class="rounded-2xl bg-slate-50 px-4 py-3 text-xs text-slate-500">
<span class="font-semibold text-slate-700">Catatan Kelulusan:</span> {{ $graduation->graduation_note }}
</div>
@endif
</div>
<div class="mt-6 flex flex-wrap gap-3">
<a href="{{ $fileUrl }}" target="_blank" rel="noopener noreferrer" class="rounded-2xl bg-sky-600 px-4 py-3 text-sm font-semibold text-white transition hover:bg-sky-700">Buka File Asli</a>
<a href="{{ route('graduated-students.index') }}" class="rounded-2xl border border-slate-200 px-4 py-3 text-sm font-semibold text-slate-700 transition hover:bg-slate-50">Kembali ke Arsip</a>
</div>
</x-master-card>
<div class="xl:col-span-2">
<x-master-card :title="'Tampilan ' . $documentLabel" subtitle="Preview langsung untuk gambar dan PDF.">
@if ($isImage)
<div class="overflow-hidden rounded-2xl border border-slate-200 bg-slate-50 p-4">
<img src="{{ $fileUrl }}" alt="{{ $fileName ?: $documentLabel }}" class="mx-auto max-h-[70vh] rounded-xl object-contain shadow-sm">
</div>
@elseif ($isPdf)
<div class="overflow-hidden rounded-2xl border border-slate-200 bg-slate-50">
<iframe src="{{ $fileUrl }}" class="h-[75vh] w-full rounded-2xl" title="Preview {{ $documentLabel }}"></iframe>
</div>
@else
<div class="rounded-2xl border border-dashed border-slate-300 bg-slate-50 p-10 text-center">
<div class="text-lg font-semibold text-slate-800">Preview tidak tersedia</div>
<p class="mt-2 text-sm text-slate-500">Format file ini belum didukung untuk preview langsung di browser. Silakan gunakan tombol buka file asli.</p>
</div>
@endif
</x-master-card>
</div>
</div>
</x-master-page>