Files

100 lines
7.0 KiB
PHP

<x-master-page title="Manajemen Pengguna" description="Kelola akun administrator dan staff yang dapat mengakses panel Database Kesiswaan." action-label="Tambah Pengguna" :action-url="route('settings.users.create')">
<div class="mb-6 grid grid-cols-1 gap-4 md:grid-cols-3">
<div class="rounded-3xl border border-slate-200 bg-slate-50 px-5 py-4">
<div class="text-xs font-semibold uppercase tracking-[0.18em] text-slate-500">Total Pengguna</div>
<div class="mt-2 text-3xl font-bold text-slate-800">{{ $stats['total'] }}</div>
</div>
<div class="rounded-3xl border border-indigo-200 bg-indigo-50 px-5 py-4">
<div class="text-xs font-semibold uppercase tracking-[0.18em] text-indigo-600">Administrator</div>
<div class="mt-2 text-3xl font-bold text-indigo-700">{{ $stats['admins'] }}</div>
</div>
<div class="rounded-3xl border border-slate-200 bg-white px-5 py-4">
<div class="text-xs font-semibold uppercase tracking-[0.18em] text-slate-500">Staff</div>
<div class="mt-2 text-3xl font-bold text-slate-700">{{ $stats['staff'] }}</div>
</div>
</div>
<x-master-card title="Daftar Pengguna" subtitle="Gunakan halaman ini untuk menambah, mengubah, dan menghapus akun admin internal.">
<form method="GET" class="mb-5">
<div class="rounded-3xl border border-slate-200 bg-slate-50/80 p-4">
<div class="grid grid-cols-1 gap-3 md:grid-cols-[minmax(0,1fr)_auto] md:items-end">
<x-form-input name="search" label="Cari Pengguna" :value="$search" placeholder="Cari nama atau email..." />
<div class="flex flex-col gap-2 sm:flex-row md:justify-end">
<button type="submit" class="inline-flex h-12 items-center justify-center rounded-2xl bg-indigo-600 px-5 text-sm font-semibold text-white shadow-lg shadow-indigo-200 transition hover:bg-indigo-700">
<i class="fa-solid fa-magnifying-glass mr-2 text-xs"></i>
Cari
</button>
<a href="{{ route('settings.users.index') }}" class="inline-flex h-12 items-center justify-center rounded-2xl border border-slate-200 bg-white px-5 text-sm font-semibold text-slate-700 transition hover:bg-slate-100">
<i class="fa-solid fa-rotate-left mr-2 text-xs"></i>
Reset
</a>
</div>
</div>
</div>
</form>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-slate-200 text-sm">
<thead class="bg-slate-50">
<tr>
<th class="px-4 py-3 text-left font-semibold text-slate-600">Nama</th>
<th class="px-4 py-3 text-left font-semibold text-slate-600">Email</th>
<th class="px-4 py-3 text-left font-semibold text-slate-600">Role</th>
<th class="px-4 py-3 text-left font-semibold text-slate-600">Status</th>
<th class="px-4 py-3 text-right font-semibold text-slate-600">Aksi</th>
</tr>
</thead>
<tbody class="divide-y divide-slate-100 bg-white">
@forelse ($users as $user)
<tr>
<td class="px-4 py-4">
<div class="font-medium text-slate-800">{{ $user->name }}</div>
@if (auth()->id() === $user->id)
<div class="mt-1 text-xs font-semibold text-emerald-600">Akun yang sedang dipakai</div>
@endif
</td>
<td class="px-4 py-4 text-slate-600">{{ $user->email }}</td>
<td class="px-4 py-4">
<span class="rounded-full px-3 py-1 text-xs font-semibold {{ $user->role === 'admin' ? 'bg-indigo-100 text-indigo-700' : 'bg-slate-100 text-slate-700' }}">
{{ $roleOptions[$user->role] ?? ucfirst($user->role) }}
</span>
</td>
<td class="px-4 py-4">
@if (auth()->id() === $user->id)
<span class="rounded-full bg-emerald-100 px-3 py-1 text-xs font-semibold text-emerald-700">Login saat ini</span>
@else
<span class="rounded-full bg-slate-100 px-3 py-1 text-xs font-semibold text-slate-600">Aktif</span>
@endif
</td>
<td class="px-4 py-4">
<div class="flex justify-end gap-2">
<a href="{{ route('settings.users.edit', $user) }}" class="inline-flex items-center rounded-xl border border-slate-200 px-3 py-2 text-xs font-semibold text-slate-700 transition hover:bg-slate-50">Edit</a>
@php($isCurrentUser = auth()->id() === $user->id)
@php($isLastAdmin = $user->role === 'admin' && ($stats['admins'] ?? 0) <= 1)
@if ($isCurrentUser || $isLastAdmin)
<button type="button" disabled class="cursor-not-allowed rounded-xl border border-slate-200 bg-slate-100 px-3 py-2 text-xs font-semibold text-slate-400" title="{{ $isCurrentUser ? 'Akun yang sedang dipakai login tidak bisa dihapus' : 'Minimal harus ada satu akun admin aktif' }}">Hapus</button>
@else
<form method="POST" action="{{ route('settings.users.destroy', $user) }}" class="delete-form" data-entity="akun pengguna {{ $user->name }}" data-confirm-title="Hapus akun pengguna?" data-confirm-text="Akun {{ $user->name }} akan dihapus dari sistem. Tindakan ini tidak bisa dibatalkan.">
@csrf
@method('DELETE')
<button type="submit" class="inline-flex items-center rounded-xl border border-rose-200 px-3 py-2 text-xs font-semibold text-rose-600 transition hover:bg-rose-50">Hapus</button>
</form>
@endif
</div>
</td>
</tr>
@empty
<tr>
<td colspan="5" class="px-4 py-8 text-center text-slate-500">Belum ada data pengguna.</td>
</tr>
@endforelse
</tbody>
</table>
</div>
<div class="mt-5">
{{ $users->links() }}
</div>
</x-master-card>
</x-master-page>