finishing
This commit is contained in:
parent
217fb8907e
commit
26bbeb897f
|
|
@ -29,7 +29,11 @@ public function show($id)
|
||||||
public function tanggapi(Request $request, $id)
|
public function tanggapi(Request $request, $id)
|
||||||
{
|
{
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'tanggapan_admin' => 'required'
|
'tanggapan_admin' => 'required|string|min:5|max:1000'
|
||||||
|
], [
|
||||||
|
'tanggapan_admin.required' => 'Tanggapan admin wajib diisi.',
|
||||||
|
'tanggapan_admin.min' => 'Tanggapan minimal 5 karakter.',
|
||||||
|
'tanggapan_admin.max' => 'Tanggapan maksimal 1000 karakter.',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$aduan = AduanTps::findOrFail($id);
|
$aduan = AduanTps::findOrFail($id);
|
||||||
|
|
|
||||||
|
|
@ -20,49 +20,46 @@ public function update(Request $request)
|
||||||
{
|
{
|
||||||
$admin = Auth::user();
|
$admin = Auth::user();
|
||||||
|
|
||||||
$request->validate([
|
$request->validate(
|
||||||
|
[
|
||||||
'name' => 'required|string|max:255',
|
'name' => 'required|string|max:255',
|
||||||
'username' => 'required|string|max:100',
|
'username' => 'required|string|max:100|unique:users,username,' . $admin->id_users . ',id_users',
|
||||||
'foto' => 'nullable|image|mimes:jpg,jpeg,png|max:2048',
|
'foto' => 'nullable|image|mimes:jpg,jpeg,png|max:2048',
|
||||||
'password' => 'nullable|min:6|confirmed',
|
'password' => 'nullable|min:6|confirmed',
|
||||||
]);
|
],
|
||||||
|
[
|
||||||
|
'name.required' => 'Nama wajib diisi',
|
||||||
|
'username.required' => 'Username wajib diisi',
|
||||||
|
'username.unique' => 'Username sudah digunakan',
|
||||||
|
'foto.image' => 'File harus berupa gambar',
|
||||||
|
'foto.mimes' => 'Format foto harus JPG atau PNG',
|
||||||
|
'foto.max' => 'Ukuran foto maksimal 2 MB',
|
||||||
|
'password.min' => 'Password minimal 6 karakter',
|
||||||
|
'password.confirmed' => 'Konfirmasi password tidak cocok',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
// ======================
|
// update data dasar
|
||||||
// UPDATE DATA DASAR
|
|
||||||
// ======================
|
|
||||||
$admin->name = $request->name;
|
$admin->name = $request->name;
|
||||||
$admin->username = $request->username;
|
$admin->username = $request->username;
|
||||||
|
|
||||||
// ======================
|
// upload foto
|
||||||
// PROSES FOTO
|
|
||||||
// ======================
|
|
||||||
if ($request->hasFile('foto')) {
|
if ($request->hasFile('foto')) {
|
||||||
|
|
||||||
$path = public_path('assets/admin/foto-admin');
|
|
||||||
|
|
||||||
// buat folder kalau belum ada
|
|
||||||
if (!File::exists($path)) {
|
|
||||||
File::makeDirectory($path, 0755, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// hapus foto lama
|
// hapus foto lama
|
||||||
if ($admin->foto && File::exists($path.'/'.$admin->foto)) {
|
if ($admin->foto && file_exists(public_path('assets/admin/foto-admin/' . $admin->foto))) {
|
||||||
File::delete($path.'/'.$admin->foto);
|
unlink(public_path('assets/admin/foto-admin/' . $admin->foto));
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = $request->file('foto');
|
$file = $request->file('foto');
|
||||||
$namaFoto = time().'_'.uniqid().'.'.$file->getClientOriginalExtension();
|
$namaFoto = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension();
|
||||||
|
|
||||||
// SIMPAN FOTO (INI KUNCI)
|
$file->move(public_path('assets/admin/foto-admin'), $namaFoto);
|
||||||
$file->move($path, $namaFoto);
|
|
||||||
|
|
||||||
// simpan ke DB
|
|
||||||
$admin->foto = $namaFoto;
|
$admin->foto = $namaFoto;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ======================
|
// update password jika diisi
|
||||||
// PASSWORD
|
|
||||||
// ======================
|
|
||||||
if ($request->filled('password')) {
|
if ($request->filled('password')) {
|
||||||
$admin->password = Hash::make($request->password);
|
$admin->password = Hash::make($request->password);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,16 +8,20 @@
|
||||||
|
|
||||||
class AduanController extends Controller
|
class AduanController extends Controller
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Menampilkan halaman form aduan TPS
|
||||||
|
*/
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$title = 'Aduan TPS';
|
$title = 'Aduan TPS';
|
||||||
$tps = null;
|
$tps = null;
|
||||||
|
|
||||||
if ($request->filled('tps_id')) {
|
if ($request->filled('tps_id')) {
|
||||||
$tps = LokasiTps::with('kategori')
|
$tps = LokasiTps::with('kategori')
|
||||||
->where('id_tps', $request->tps_id)
|
->where('id_tps', $request->tps_id)
|
||||||
->first();
|
->first();
|
||||||
}
|
}
|
||||||
|
|
||||||
$listTps = LokasiTps::orderBy('nama_tps')->get();
|
$listTps = LokasiTps::orderBy('nama_tps')->get();
|
||||||
|
|
||||||
return view('user.aduan-tps', compact(
|
return view('user.aduan-tps', compact(
|
||||||
|
|
@ -27,24 +31,42 @@ public function index(Request $request)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menyimpan data aduan TPS
|
||||||
|
*/
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'lokasi_tps_id' => 'required|exists:lokasi_tps,id_tps',
|
'lokasi_tps_id' => 'required|exists:lokasi_tps,id_tps',
|
||||||
'nama_pelapor' => 'required|string|max:100',
|
'nama_pelapor' => 'required|string|max:100',
|
||||||
'alamat_pelapor'=> 'required|string',
|
'alamat_pelapor' => 'required|string',
|
||||||
'no_pelapor' => 'required|string|max:20',
|
'no_pelapor' => 'required|digits_between:1,13|regex:/^[0-9]+$/',
|
||||||
'isi_aduan' => 'required|string',
|
'isi_aduan' => 'required|string',
|
||||||
'bukti_foto' => 'required|image|mimes:jpg,jpeg,png|max:4096',
|
'bukti_foto' => 'required|image|mimes:jpg,jpeg,png|max:4096',
|
||||||
], [
|
], [
|
||||||
'lokasi_tps_id.required' => 'TPS wajib dipilih',
|
'lokasi_tps_id.required' => 'TPS wajib dipilih',
|
||||||
|
'lokasi_tps_id.exists' => 'TPS tidak valid',
|
||||||
|
|
||||||
|
'nama_pelapor.required' => 'Nama pelapor wajib diisi',
|
||||||
|
'alamat_pelapor.required' => 'Alamat pelapor wajib diisi',
|
||||||
|
|
||||||
|
'no_pelapor.required' => 'Nomor HP wajib diisi',
|
||||||
|
'no_pelapor.digits_between'=> 'Nomor HP maksimal 13 angka',
|
||||||
|
'no_pelapor.regex' => 'Nomor HP hanya boleh berisi angka',
|
||||||
|
|
||||||
|
'isi_aduan.required' => 'Isi aduan wajib diisi',
|
||||||
|
|
||||||
'bukti_foto.required' => 'Foto bukti wajib diunggah',
|
'bukti_foto.required' => 'Foto bukti wajib diunggah',
|
||||||
'bukti_foto.image' => 'File harus berupa gambar',
|
'bukti_foto.image' => 'File harus berupa gambar',
|
||||||
|
'bukti_foto.mimes' => 'Format gambar harus jpg, jpeg, atau png',
|
||||||
|
'bukti_foto.max' => 'Ukuran gambar maksimal 4 MB',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Upload foto bukti
|
||||||
$fotoPath = $request->file('bukti_foto')
|
$fotoPath = $request->file('bukti_foto')
|
||||||
->store('aduan', 'public');
|
->store('aduan', 'public');
|
||||||
|
|
||||||
|
// Simpan ke database
|
||||||
AduanTps::create([
|
AduanTps::create([
|
||||||
'lokasi_tps_id' => $request->lokasi_tps_id,
|
'lokasi_tps_id' => $request->lokasi_tps_id,
|
||||||
'nama_pelapor' => $request->nama_pelapor,
|
'nama_pelapor' => $request->nama_pelapor,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
@extends('admin.template')
|
@extends('admin.template')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 grid-margin stretch-card">
|
<div class="col-12 grid-margin stretch-card">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
|
|
@ -12,16 +12,14 @@
|
||||||
Form tanggapan admin terhadap aduan masyarakat
|
Form tanggapan admin terhadap aduan masyarakat
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<form action="{{ route('admin.aduan.tanggapi', $aduan->id_aduan) }}"
|
<form action="{{ route('admin.aduan.tanggapi', $aduan->id_aduan) }}" method="POST"
|
||||||
method="POST"
|
|
||||||
class="forms-sample">
|
class="forms-sample">
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
{{-- TPS --}}
|
{{-- TPS --}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>TPS yang Diadukan</label>
|
<label>TPS yang Diadukan</label>
|
||||||
<input type="text" class="form-control"
|
<input type="text" class="form-control" value="{{ $aduan->lokasiTps->nama_tps ?? '-' }}"
|
||||||
value="{{ $aduan->lokasiTps->nama_tps ?? '-' }}"
|
|
||||||
readonly>
|
readonly>
|
||||||
<small class="text-muted">
|
<small class="text-muted">
|
||||||
{{ $aduan->lokasiTps->alamat_tps ?? '' }}
|
{{ $aduan->lokasiTps->alamat_tps ?? '' }}
|
||||||
|
|
@ -31,56 +29,47 @@ class="forms-sample">
|
||||||
{{-- Nama Pelapor --}}
|
{{-- Nama Pelapor --}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Nama Pelapor</label>
|
<label>Nama Pelapor</label>
|
||||||
<input type="text"
|
<input type="text" class="form-control" value="{{ $aduan->nama_pelapor }}" readonly>
|
||||||
class="form-control"
|
|
||||||
value="{{ $aduan->nama_pelapor }}"
|
|
||||||
readonly>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Alamat Pelapor --}}
|
{{-- Alamat Pelapor --}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Alamat Pelapor</label>
|
<label>Alamat Pelapor</label>
|
||||||
<input type="text"
|
<input type="text" class="form-control" value="{{ $aduan->alamat_pelapor }}" readonly>
|
||||||
class="form-control"
|
|
||||||
value="{{ $aduan->alamat_pelapor }}"
|
|
||||||
readonly>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Isi Aduan --}}
|
{{-- Isi Aduan --}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Isi Aduan</label>
|
<label>Isi Aduan</label>
|
||||||
<textarea class="form-control"
|
<textarea class="form-control" rows="4" readonly>{{ $aduan->isi_aduan }}</textarea>
|
||||||
rows="4"
|
|
||||||
readonly>{{ $aduan->isi_aduan }}</textarea>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- Bukti Foto --}}
|
{{-- Bukti Foto --}}
|
||||||
@if ($aduan->bukti_foto)
|
@if ($aduan->bukti_foto)
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Bukti Foto</label><br>
|
<label>Bukti Foto</label><br>
|
||||||
<img src="{{ asset('storage/' . $aduan->bukti_foto) }}"
|
<img src="{{ asset('storage/' . $aduan->bukti_foto) }}" alt="Bukti Aduan"
|
||||||
alt="Bukti Aduan"
|
class="border rounded img-fluid" style="max-height: 260px;">
|
||||||
class="border rounded img-fluid"
|
|
||||||
style="max-height: 260px;">
|
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
{{-- Tanggapan Admin --}}
|
{{-- Tanggapan Admin --}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Tanggapan Admin</label>
|
<label>Tanggapan Admin</label>
|
||||||
<textarea name="tanggapan_admin"
|
<textarea name="tanggapan_admin" class="form-control @error('tanggapan_admin') is-invalid @enderror" rows="4"
|
||||||
class="form-control"
|
placeholder="Masukkan tanggapan admin...">{{ old('tanggapan_admin', $aduan->tanggapan_admin) }}</textarea>
|
||||||
rows="4"
|
|
||||||
placeholder="Masukkan tanggapan admin..."
|
@error('tanggapan_admin')
|
||||||
required>{{ old('tanggapan_admin', $aduan->tanggapan_admin) }}</textarea>
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
{{-- Tombol --}}
|
{{-- Tombol --}}
|
||||||
<button type="submit" class="mr-2 btn btn-primary">
|
<button type="submit" class="mr-2 btn btn-primary">
|
||||||
Simpan Tanggapan
|
Simpan Tanggapan
|
||||||
</button>
|
</button>
|
||||||
<a href="{{ route('admin.aduan.index') }}"
|
<a href="{{ route('admin.aduan.index') }}" class="btn btn-light">
|
||||||
class="btn btn-light">
|
|
||||||
Kembali
|
Kembali
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
@ -90,5 +79,5 @@ class="btn btn-light">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
<h4 class="mb-4 card-title">Profil Admin</h4>
|
<h4 class="mb-4 card-title">Profil Admin</h4>
|
||||||
|
|
||||||
|
{{-- SUCCESS --}}
|
||||||
@if (session('success'))
|
@if (session('success'))
|
||||||
<div class="alert alert-success">
|
<div class="alert alert-success">
|
||||||
{{ session('success') }}
|
{{ session('success') }}
|
||||||
|
|
@ -20,7 +21,7 @@
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
<!-- KIRI : FOTO -->
|
{{-- KIRI : FOTO --}}
|
||||||
<div class="text-center col-md-4 border-right">
|
<div class="text-center col-md-4 border-right">
|
||||||
|
|
||||||
<img
|
<img
|
||||||
|
|
@ -34,7 +35,16 @@ class="mb-3 rounded-circle"
|
||||||
>
|
>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="file" name="foto" class="form-control-file">
|
<input type="file"
|
||||||
|
name="foto"
|
||||||
|
class="form-control-file @error('foto') is-invalid @enderror">
|
||||||
|
|
||||||
|
@error('foto')
|
||||||
|
<div class="mt-1 text-danger">
|
||||||
|
{{ $message }}
|
||||||
|
</div>
|
||||||
|
@enderror
|
||||||
|
|
||||||
<small class="mt-2 text-muted d-block">
|
<small class="mt-2 text-muted d-block">
|
||||||
JPG / PNG, maksimal 2MB
|
JPG / PNG, maksimal 2MB
|
||||||
</small>
|
</small>
|
||||||
|
|
@ -42,40 +52,66 @@ class="mb-3 rounded-circle"
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- KANAN : FORM -->
|
{{-- KANAN : FORM --}}
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
|
||||||
|
{{-- NAMA --}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Nama</label>
|
<label>Nama</label>
|
||||||
<input type="text" name="name"
|
<input type="text"
|
||||||
class="form-control"
|
name="name"
|
||||||
value="{{ $admin->name }}" required>
|
class="form-control @error('name') is-invalid @enderror"
|
||||||
|
value="{{ old('name', $admin->name) }}">
|
||||||
|
|
||||||
|
@error('name')
|
||||||
|
<div class="invalid-feedback">
|
||||||
|
{{ $message }}
|
||||||
|
</div>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{-- USERNAME --}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Username</label>
|
<label>Username</label>
|
||||||
<input type="text" name="username"
|
<input type="text"
|
||||||
class="form-control"
|
name="username"
|
||||||
value="{{ $admin->username }}" required>
|
class="form-control @error('username') is-invalid @enderror"
|
||||||
|
value="{{ old('username', $admin->username) }}">
|
||||||
|
|
||||||
|
@error('username')
|
||||||
|
<div class="invalid-feedback">
|
||||||
|
{{ $message }}
|
||||||
|
</div>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{-- ROLE --}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Role</label>
|
<label>Role</label>
|
||||||
<input type="text"
|
<input type="text"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
value="{{ $admin->role }}" disabled>
|
value="{{ $admin->role }}"
|
||||||
|
disabled>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
{{-- PASSWORD --}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Password Baru (opsional)</label>
|
<label>Password Baru (opsional)</label>
|
||||||
<input type="password"
|
<input type="password"
|
||||||
name="password"
|
name="password"
|
||||||
class="form-control"
|
class="form-control @error('password') is-invalid @enderror"
|
||||||
placeholder="Kosongkan jika tidak diganti">
|
placeholder="Kosongkan jika tidak diganti">
|
||||||
|
|
||||||
|
@error('password')
|
||||||
|
<div class="invalid-feedback">
|
||||||
|
{{ $message }}
|
||||||
|
</div>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{-- KONFIRMASI PASSWORD --}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Konfirmasi Password</label>
|
<label>Konfirmasi Password</label>
|
||||||
<input type="password"
|
<input type="password"
|
||||||
|
|
@ -83,6 +119,7 @@ class="form-control"
|
||||||
class="form-control">
|
class="form-control">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{-- BUTTON --}}
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<button type="submit" class="btn btn-primary">
|
<button type="submit" class="btn btn-primary">
|
||||||
Simpan
|
Simpan
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
|
|
||||||
<!-- Page Title -->
|
<!-- Page Title -->
|
||||||
<div class="page-title">
|
<div class="page-title">
|
||||||
<div class="container d-lg-flex justify-content-between align-items-center">
|
<div class="container d-lg-flex justify-content-between align-items-center">
|
||||||
<h1 class="mb-2 mb-lg-0">Aduan TPS</h1>
|
<h1 class="mb-2 mb-lg-0">Aduan TPS</h1>
|
||||||
<nav class="breadcrumbs">
|
<nav class="breadcrumbs">
|
||||||
|
|
@ -13,11 +13,10 @@
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- End Page Title -->
|
<!-- End Page Title -->
|
||||||
|
|
||||||
<section id="contact" class="contact section">
|
|
||||||
|
|
||||||
|
<section id="contact" class="contact section">
|
||||||
<div class="container" data-aos="fade">
|
<div class="container" data-aos="fade">
|
||||||
<div class="row gy-5 gx-lg-5">
|
<div class="row gy-5 gx-lg-5">
|
||||||
|
|
||||||
|
|
@ -28,7 +27,8 @@
|
||||||
|
|
||||||
{{-- FOTO TPS --}}
|
{{-- FOTO TPS --}}
|
||||||
<div class="mb-3 d-none" id="foto-wrapper">
|
<div class="mb-3 d-none" id="foto-wrapper">
|
||||||
<img id="foto-tps" class="img-fluid w-100" style="object-fit:cover; max-height:220px;">
|
<img id="foto-tps" class="img-fluid w-100"
|
||||||
|
style="object-fit:cover; max-height:220px;">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- INFO TPS --}}
|
{{-- INFO TPS --}}
|
||||||
|
|
@ -37,20 +37,23 @@
|
||||||
<p class="mb-1"><strong>{{ $tps->nama_tps }}</strong></p>
|
<p class="mb-1"><strong>{{ $tps->nama_tps }}</strong></p>
|
||||||
<p class="mb-1 text-muted">{{ $tps->alamat_tps }}</p>
|
<p class="mb-1 text-muted">{{ $tps->alamat_tps }}</p>
|
||||||
@else
|
@else
|
||||||
<p class="mb-2 text-muted">
|
<p class="mb-2 text-muted">Silakan pilih TPS yang akan diadukan</p>
|
||||||
Silakan pilih TPS yang akan diadukan
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<select id="pilih-tps" class="form-select">
|
<select id="pilih-tps" class="form-select">
|
||||||
<option value="">Pilih TPS</option>
|
<option value="">Pilih TPS</option>
|
||||||
@foreach ($listTps as $item)
|
@foreach ($listTps as $item)
|
||||||
<option value="{{ $item->id_tps }}" data-nama="{{ $item->nama_tps }}"
|
<option value="{{ $item->id_tps }}"
|
||||||
|
data-nama="{{ $item->nama_tps }}"
|
||||||
data-alamat="{{ $item->alamat_tps }}"
|
data-alamat="{{ $item->alamat_tps }}"
|
||||||
data-foto="{{ $item->foto_tps ? asset('storage/' . $item->foto_tps) : asset('assets/user/img/no-image.png') }}">
|
data-foto="{{ $item->foto_tps ? asset('storage/'.$item->foto_tps) : asset('assets/user/img/no-image.png') }}">
|
||||||
{{ $item->nama_tps }}
|
{{ $item->nama_tps }}
|
||||||
</option>
|
</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
@error('lokasi_tps_id')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -58,15 +61,6 @@
|
||||||
|
|
||||||
{{-- KOLOM KANAN --}}
|
{{-- KOLOM KANAN --}}
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
@if ($errors->any())
|
|
||||||
<div class="alert alert-danger">
|
|
||||||
<ul class="mb-0">
|
|
||||||
@foreach ($errors->all() as $error)
|
|
||||||
<li>{{ $error }}</li>
|
|
||||||
@endforeach
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
@if (session('success'))
|
@if (session('success'))
|
||||||
<div class="alert alert-success">
|
<div class="alert alert-success">
|
||||||
|
|
@ -74,52 +68,93 @@
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form action="{{ route('user.aduan.store') }}" method="POST" class="aduan-form"
|
<form action="{{ route('user.aduan.store') }}" method="POST"
|
||||||
enctype="multipart/form-data">
|
enctype="multipart/form-data" class="aduan-form">
|
||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
{{-- PENTING --}}
|
{{-- HIDDEN TPS --}}
|
||||||
<input type="hidden" name="lokasi_tps_id" id="lokasi_tps_id"
|
<input type="hidden" name="lokasi_tps_id" id="lokasi_tps_id"
|
||||||
value="{{ $tps ? $tps->id_tps : '' }}">
|
value="{{ old('lokasi_tps_id', $tps ? $tps->id_tps : '') }}">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
{{-- NAMA --}}
|
||||||
<div class="col-md-6 form-group">
|
<div class="col-md-6 form-group">
|
||||||
<input type="text" name="nama_pelapor" class="form-control" placeholder="Nama Pelapor"
|
<input type="text"
|
||||||
required>
|
name="nama_pelapor"
|
||||||
|
class="form-control"
|
||||||
|
placeholder="Nama Pelapor"
|
||||||
|
value="{{ old('nama_pelapor') }}">
|
||||||
|
|
||||||
|
@error('nama_pelapor')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{-- NO TELP --}}
|
||||||
<div class="mt-3 col-md-6 form-group mt-md-0">
|
<div class="mt-3 col-md-6 form-group mt-md-0">
|
||||||
<input type="tel" name="no_pelapor" class="form-control" placeholder="No. Telp Pelapor"
|
<input type="tel"
|
||||||
required>
|
name="no_pelapor"
|
||||||
|
class="form-control"
|
||||||
|
placeholder="No. Telp Pelapor"
|
||||||
|
value="{{ old('no_pelapor') }}">
|
||||||
|
|
||||||
|
@error('no_pelapor')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{-- ALAMAT --}}
|
||||||
<div class="mt-3 form-group">
|
<div class="mt-3 form-group">
|
||||||
<input type="text" name="alamat_pelapor" class="form-control" placeholder="Alamat Pelapor"
|
<input type="text"
|
||||||
required>
|
name="alamat_pelapor"
|
||||||
|
class="form-control"
|
||||||
|
placeholder="Alamat Pelapor"
|
||||||
|
value="{{ old('alamat_pelapor') }}">
|
||||||
|
|
||||||
|
@error('alamat_pelapor')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{{-- ISI ADUAN --}}
|
||||||
<div class="mt-3 form-group">
|
<div class="mt-3 form-group">
|
||||||
<textarea name="isi_aduan" class="form-control" placeholder="Isi Aduan" required></textarea>
|
<textarea name="isi_aduan"
|
||||||
|
class="form-control"
|
||||||
|
placeholder="Isi Aduan">{{ old('isi_aduan') }}</textarea>
|
||||||
|
|
||||||
|
@error('isi_aduan')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- FILE INPUT (SUDAH SERAGAM) --}}
|
{{-- FOTO --}}
|
||||||
<div class="mt-3 form-group">
|
<div class="mt-3 form-group">
|
||||||
<input type="file" name="bukti_foto" class="form-control file-input" accept="image/*">
|
<input type="file"
|
||||||
|
name="bukti_foto"
|
||||||
|
class="form-control"
|
||||||
|
accept="image/*">
|
||||||
|
|
||||||
|
@error('bukti_foto')
|
||||||
|
<small class="text-danger">{{ $message }}</small>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-4 text-center">
|
<div class="mt-4 text-center">
|
||||||
<button type="submit" class="px-4 btn btn-success">Kirim Aduan</button>
|
<button type="submit" class="px-4 btn btn-success">
|
||||||
|
Kirim Aduan
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{{-- SCRIPT TPS --}}
|
{{-- SCRIPT PILIH TPS --}}
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
const selectTps = document.getElementById('pilih-tps');
|
const selectTps = document.getElementById('pilih-tps');
|
||||||
const infoTps = document.getElementById('info-tps');
|
const infoTps = document.getElementById('info-tps');
|
||||||
const fotoWrapper = document.getElementById('foto-wrapper');
|
const fotoWrapper = document.getElementById('foto-wrapper');
|
||||||
|
|
@ -128,13 +163,12 @@
|
||||||
|
|
||||||
if (!selectTps) return;
|
if (!selectTps) return;
|
||||||
|
|
||||||
selectTps.addEventListener('change', function() {
|
selectTps.addEventListener('change', function () {
|
||||||
if (!this.value) return;
|
if (!this.value) return;
|
||||||
|
|
||||||
const option = this.options[this.selectedIndex];
|
const option = this.options[this.selectedIndex];
|
||||||
|
|
||||||
inputLokasi.value = this.value;
|
inputLokasi.value = this.value;
|
||||||
|
|
||||||
fotoTps.src = option.dataset.foto;
|
fotoTps.src = option.dataset.foto;
|
||||||
fotoWrapper.classList.remove('d-none');
|
fotoWrapper.classList.remove('d-none');
|
||||||
|
|
||||||
|
|
@ -155,7 +189,7 @@
|
||||||
selectTps.value = '';
|
selectTps.value = '';
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue