This commit is contained in:
Saufi
2026-06-26 19:10:31 +08:00
parent 1de6355e70
commit a4873b8e90
10 changed files with 478 additions and 4 deletions

View File

@@ -0,0 +1,37 @@
@extends('layouts.app')
@section('title', 'Pengguna Baru')
@section('content')
<div class="row justify-content-center"><div class="col-lg-7">
<div class="card"><div class="card-body">
<form method="POST" action="{{ route('admin.users.store') }}">
@csrf
<div class="row g-3">
<div class="col-md-6"><label class="form-label">Nama *</label>
<input name="name" class="form-control @error('name') is-invalid @enderror" value="{{ old('name') }}" required>
@error('name')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Emel *</label>
<input type="email" name="email" class="form-control @error('email') is-invalid @enderror" value="{{ old('email') }}" required>
@error('email')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Peranan *</label>
<select name="role" class="form-select @error('role') is-invalid @enderror" required>
<option value=""> Pilih peranan </option>
@foreach($roles as $value => $label)
<option value="{{ $value }}" @selected(old('role') === $value)>{{ $label }}</option>
@endforeach
</select>
@error('role')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Kata Laluan *</label>
<input type="password" name="password" class="form-control @error('password') is-invalid @enderror" required>
@error('password')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Sahkan Kata Laluan *</label>
<input type="password" name="password_confirmation" class="form-control" required></div>
</div>
<div class="mt-4 d-flex gap-2">
<button class="btn btn-teal"><i class="bi bi-save"></i> Simpan</button>
<a href="{{ route('admin.users.index') }}" class="btn btn-light">Kembali</a>
</div>
</form>
</div></div>
</div></div>
@endsection

View File

@@ -0,0 +1,42 @@
@extends('layouts.app')
@section('title', 'Kemaskini Pengguna')
@section('content')
<div class="row justify-content-center"><div class="col-lg-7">
<div class="card"><div class="card-body">
<form method="POST" action="{{ route('admin.users.update', $user) }}">
@csrf @method('PUT')
<div class="row g-3">
<div class="col-md-6"><label class="form-label">Nama *</label>
<input name="name" class="form-control @error('name') is-invalid @enderror" value="{{ old('name', $user->name) }}" required>
@error('name')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Emel *</label>
<input type="email" name="email" class="form-control @error('email') is-invalid @enderror" value="{{ old('email', $user->email) }}" required>
@error('email')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Peranan *</label>
<select name="role" class="form-select @error('role') is-invalid @enderror" required>
@foreach($roles as $value => $label)
<option value="{{ $value }}" @selected(old('role', $user->getRoleNames()->first()) === $value)>{{ $label }}</option>
@endforeach
</select>
@error('role')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
</div>
<hr class="my-4">
<p class="text-muted small mb-3"><i class="bi bi-key"></i> Biarkan kosong jika tidak mahu menukar kata laluan.</p>
<div class="row g-3">
<div class="col-md-6"><label class="form-label">Kata Laluan Baru</label>
<input type="password" name="password" class="form-control @error('password') is-invalid @enderror">
@error('password')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Sahkan Kata Laluan</label>
<input type="password" name="password_confirmation" class="form-control"></div>
</div>
<div class="mt-4 d-flex gap-2">
<button class="btn btn-teal"><i class="bi bi-save"></i> Simpan</button>
<a href="{{ route('admin.users.index') }}" class="btn btn-light">Kembali</a>
</div>
</form>
</div></div>
</div></div>
@endsection

View File

@@ -0,0 +1,37 @@
@extends('layouts.app')
@section('title', 'Urus Pengguna')
@section('content')
<div class="d-flex justify-content-between align-items-center mb-3">
<div class="text-muted">Pengguna sistem mengikut peranan: Admin, Kaunter, Cabutan.</div>
<a href="{{ route('admin.users.create') }}" class="btn btn-teal"><i class="bi bi-person-plus"></i> Pengguna Baru</a>
</div>
<div class="card"><div class="card-body">
<div class="table-responsive">
<table class="table table-koipb table-hover align-middle">
<thead><tr><th>Nama</th><th>Emel</th><th>Peranan</th><th></th></tr></thead>
<tbody>
@forelse($users as $user)
<tr>
<td class="fw-semibold">{{ $user->name }}
@if($user->id === auth()->id())<span class="badge bg-teal ms-1">Anda</span>@endif</td>
<td>{{ $user->email }}</td>
<td><span class="badge bg-dark2">{{ $user->roleLabel() }}</span></td>
<td class="text-end">
<a href="{{ route('admin.users.edit', $user) }}" class="btn btn-sm btn-outline-secondary"><i class="bi bi-pencil"></i></a>
<form action="{{ route('admin.users.destroy', $user) }}" method="POST" class="d-inline" onsubmit="return confirm('Padam pengguna ini?')">
@csrf @method('DELETE')
<button class="btn btn-sm btn-outline-danger" @disabled($user->id === auth()->id())><i class="bi bi-trash"></i></button>
</form>
</td>
</tr>
@empty
<tr><td colspan="4" class="text-center text-muted py-4">Tiada pengguna.</td></tr>
@endforelse
</tbody>
</table>
</div>
{{ $users->links() }}
</div></div>
@endsection

View File

@@ -59,6 +59,9 @@
<a href="{{ route('admin.prizes.index') }}" class="{{ request()->routeIs('admin.prizes.*') ? 'active' : '' }}">
<span class="ico"><i class="bi bi-gift"></i></span> Hadiah
</a>
<a href="{{ route('admin.users.index') }}" class="{{ request()->routeIs('admin.users.*') ? 'active' : '' }}">
<span class="ico"><i class="bi bi-person-gear"></i></span> Pengguna
</a>
<a href="{{ route('admin.audit.index') }}" class="{{ request()->routeIs('admin.audit.*') ? 'active' : '' }}">
<span class="ico"><i class="bi bi-shield-check"></i></span> Audit Trail
</a>
@@ -68,10 +71,10 @@
@endif
</nav>
<div class="sb-foot">
<div class="text-white-50 small">{{ $u?->name }}</div>
<div class="small mb-2" style="color:var(--koipb-teal-light)">
@foreach($u?->getRoleNames() ?? [] as $r){{ \Illuminate\Support\Str::headline($r) }}@endforeach
</div>
<a href="{{ route('profile.edit') }}" class="text-decoration-none d-block mb-2">
<div class="text-white small"><i class="bi bi-person-circle"></i> {{ $u?->name }}</div>
<div class="small" style="color:var(--koipb-teal-light)">{{ $u?->roleLabel() }}</div>
</a>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button class="btn btn-sm btn-outline-light w-100"><i class="bi bi-box-arrow-right"></i> Log Keluar</button>

View File

@@ -0,0 +1,44 @@
@extends('layouts.app')
@section('title', 'Profil Saya')
@section('content')
<div class="row justify-content-center g-3"><div class="col-lg-7">
<div class="card mb-3"><div class="card-body">
<h5 class="fw-bold"><i class="bi bi-person-circle text-teal"></i> Maklumat Profil</h5>
<form method="POST" action="{{ route('profile.update') }}">
@csrf @method('PUT')
<div class="row g-3">
<div class="col-md-6"><label class="form-label">Nama *</label>
<input name="name" class="form-control @error('name') is-invalid @enderror" value="{{ old('name', $user->name) }}" required>
@error('name')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Emel *</label>
<input type="email" name="email" class="form-control @error('email') is-invalid @enderror" value="{{ old('email', $user->email) }}" required>
@error('email')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Peranan</label>
<input class="form-control" value="{{ $user->roleLabel() }}" disabled></div>
</div>
<div class="mt-4"><button class="btn btn-teal"><i class="bi bi-save"></i> Simpan Profil</button></div>
</form>
</div></div>
<div class="card"><div class="card-body">
<h5 class="fw-bold"><i class="bi bi-key text-teal"></i> Tukar Kata Laluan</h5>
<form method="POST" action="{{ route('profile.password') }}">
@csrf @method('PUT')
<div class="row g-3">
<div class="col-12"><label class="form-label">Kata Laluan Semasa *</label>
<input type="password" name="current_password" class="form-control @error('current_password') is-invalid @enderror" required>
@error('current_password')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Kata Laluan Baru *</label>
<input type="password" name="password" class="form-control @error('password') is-invalid @enderror" required>
@error('password')<div class="invalid-feedback">{{ $message }}</div>@enderror</div>
<div class="col-md-6"><label class="form-label">Sahkan Kata Laluan Baru *</label>
<input type="password" name="password_confirmation" class="form-control" required></div>
</div>
<div class="mt-4"><button class="btn btn-teal"><i class="bi bi-shield-lock"></i> Tukar Kata Laluan</button></div>
</form>
</div></div>
</div></div>
@endsection