Files
Saufi dfd22ff2af Aplikasi kehadiran KTM ambil peti undi (SPR 2026)
Sistem untuk admin DUN merekod waktu KTM (Ketua Tempat Mengundi) hadir
mengambil peti undi. Data KTM dibaca daripada DB sppm (spr2026) melalui
connection kedua — hanya penempatan berjawatan KTM yang dipaparkan.

- Dashboard: senarai KTM ikut pusat mengundi (asc) & saluran (asc),
  status BELUM HADIR (merah) / HADIR (hijau) + tarikh & masa
- Carian nama/no. KP, tapisan pusat mengundi & status
- Tanda hadir / batal dengan kawalan DUN (admin terhad ke DUN sendiri)
- Eksport Excel (worksheet Hadir & Belum Hadir) guna SimpleXlsx
- Peranan: superadmin (urus pengguna, semua DUN) & admin DUN
- Docker: nginx + php-fpm + queue + scheduler + webhook deploy,
  port 127.0.0.1:8009, TZ Asia/Kuala_Lumpur di semua container
- Zon waktu aplikasi: Asia/Kuala_Lumpur (APP_TIMEZONE)

Berasaskan scaffold spr2026_taklimat.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 02:40:00 +08:00

76 lines
2.9 KiB
PHP

@extends('layouts.app')
@section('tajuk', 'Daftar Pengguna Baharu')
@section('saiz-container', 'container-kecil')
@section('kandungan')
<div class="kad">
<h1>Daftar Pengguna Baharu</h1>
<p class="teks-kecil">Admin DUN perlu ditetapkan kepada satu DUN. Superadmin boleh urus pengguna dan lihat semua DUN.</p>
@if ($errors->any())
<div class="makluman makluman-ralat">{{ $errors->first() }}</div>
@endif
<form method="POST" action="{{ route('pengguna.store') }}">
@csrf
<label for="name">Nama</label>
<input type="text" id="name" name="name" value="{{ old('name') }}" required autofocus>
<label for="email">E-mel</label>
<input type="email" id="email" name="email" value="{{ old('email') }}" required>
<label for="role">Peranan</label>
<select id="role" name="role" required>
<option value=""> Pilih Peranan </option>
@foreach ($peranan as $kod)
<option value="{{ $kod }}" @selected(old('role') === $kod)>
{{ match ($kod) {
'superadmin' => 'Superadmin',
'admin' => 'Admin DUN',
default => $kod,
} }}
</option>
@endforeach
</select>
<div id="baris-dun">
<label for="dun_id">DUN</label>
<select id="dun_id" name="dun_id">
<option value=""> Pilih DUN </option>
@foreach ($senaraiDun as $dun)
<option value="{{ $dun->id }}" @selected(old('dun_id') == $dun->id)>
{{ $dun->code }} {{ $dun->nama }}
</option>
@endforeach
</select>
</div>
<label for="password">Kata Laluan</label>
<input type="password" id="password" name="password" required minlength="8">
<label for="password_confirmation">Sahkan Kata Laluan</label>
<input type="password" id="password_confirmation" name="password_confirmation" required minlength="8">
<button type="submit" class="btn btn-penuh">Daftar Pengguna</button>
</form>
</div>
<script>
(function () {
var role = document.getElementById('role');
var barisDun = document.getElementById('baris-dun');
var dunSelect = document.getElementById('dun_id');
function kemaskini() {
var perluDun = role.value === 'admin';
barisDun.style.display = perluDun ? '' : 'none';
dunSelect.required = perluDun;
}
role.addEventListener('change', kemaskini);
kemaskini();
})();
</script>
@endsection