100 lines
7.0 KiB
PHP
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>
|