Refactor: Alamat feature

This commit is contained in:
sayasilvi 2026-03-07 23:34:32 +07:00
parent 6097b439fc
commit b0798cc569
15 changed files with 473 additions and 450 deletions

View File

@ -38,13 +38,6 @@ public function loginProcess(Request $request)
$petani = Petani::where('username', $request->username)->first();
if ($petani && Hash::check($request->password, $petani->password)) {
// Validasi Status Akun Petani
if ($petani->status_akun == 'menunggu') {
return back()->withErrors(['login_error' => 'Akun Anda masih dalam proses verifikasi Admin.']);
}
if ($petani->status_akun == 'ditolak') {
return back()->withErrors(['login_error' => 'Pendaftaran Anda ditolak. Silakan hubungi Admin.']);
}
Auth::guard('petani')->login($petani);
$request->session()->regenerate();
@ -100,10 +93,10 @@ public function registerProcess(Request $request)
'no_hp' => $request->no_hp,
'alamat' => $request->alamat,
'nama_usaha' => $request->nama_usaha ?? 'Toko Tani ' . $request->nama_lengkap,
'status_akun' => 'menunggu'
'status_akun' => 'aktif'
]);
return redirect('/login')->with('success', 'Registrasi Petani Berhasil! Mohon tunggu verifikasi Admin.');
return redirect('/login')->with('success', 'Registrasi Petani Berhasil! Silakan langsung Login.');
} else {
Pembeli::create([
@ -121,13 +114,9 @@ public function registerProcess(Request $request)
public function logout(Request $request)
{
// Logout semua guard untuk keamanan
if (Auth::guard('admin')->check())
Auth::guard('admin')->logout();
if (Auth::guard('petani')->check())
Auth::guard('petani')->logout();
if (Auth::guard('pembeli')->check())
Auth::guard('pembeli')->logout();
if (Auth::guard('admin')->check()) Auth::guard('admin')->logout();
if (Auth::guard('petani')->check()) Auth::guard('petani')->logout();
if (Auth::guard('pembeli')->check()) Auth::guard('pembeli')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();

View File

@ -42,10 +42,6 @@ public function store(Request $request)
'harga' => 'required|numeric|min:0',
'stok' => 'required|integer|min:0',
'deskripsi' => 'required|string',
'provinsi_code' => 'required',
'kota_code' => 'required',
'kecamatan_code' => 'required',
'desa_code' => 'required',
'foto_produk' => 'required|image|mimes:jpeg,png,jpg|max:2048',
'foto_tambahan.*' => 'nullable|image|mimes:jpeg,png,jpg|max:2048'
]);
@ -62,10 +58,6 @@ public function store(Request $request)
'kategori_id' => $request->kategori_id,
'nama_produk' => $request->nama_produk,
'harga' => $request->harga,
'provinsi_code' => $request->provinsi_code,
'kota_code' => $request->kota_code,
'kecamatan_code' => $request->kecamatan_code,
'desa_code' => $request->desa_code,
'stok' => $request->stok,
'deskripsi' => $request->deskripsi,
'foto_produk' => $fotoPath,
@ -110,10 +102,6 @@ public function update(Request $request, $id)
'nama_produk' => 'required|string|max:255',
'kategori_id' => 'required|exists:kategoris,id',
'harga' => 'required|numeric|min:0',
'provinsi_code' => 'required',
'kota_code' => 'required',
'kecamatan_code' => 'required',
'desa_code' => 'required',
'stok' => 'required|integer|min:0',
'deskripsi' => 'required|string',
'foto_produk' => 'nullable|image|mimes:jpeg,png,jpg|max:2048',
@ -136,10 +124,6 @@ public function update(Request $request, $id)
'nama_produk' => $request->nama_produk,
'kategori_id' => $request->kategori_id,
'harga' => $request->harga,
'provinsi_code' => $request->provinsi_code,
'kota_code' => $request->kota_code,
'kecamatan_code' => $request->kecamatan_code,
'desa_code' => $request->desa_code,
'stok' => $request->stok,
'deskripsi' => $request->deskripsi,
'foto_produk' => $produk->foto_produk

View File

@ -6,6 +6,10 @@
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
use Laravolt\Indonesia\Models\Province;
use Laravolt\Indonesia\Models\City;
use Laravolt\Indonesia\Models\District;
use Laravolt\Indonesia\Models\Village;
class ProfileController extends Controller
{
@ -13,7 +17,13 @@ class ProfileController extends Controller
public function editPetani()
{
$user = Auth::guard('petani')->user();
return view('petani.profile', compact('user'));
$provinsis = Province::all();
$kotas = $user->provinsi_code ? City::where('province_code', $user->provinsi_code)->get() : [];
$kecamatans = $user->kota_code ? District::where('city_code', $user->kota_code)->get() : [];
$desas = $user->kecamatan_code ? Village::where('district_code', $user->kecamatan_code)->get() : [];
return view('petani.profile', compact('user', 'provinsis', 'kotas', 'kecamatans', 'desas'));
}
public function updatePetani(Request $request)
@ -24,11 +34,23 @@ public function updatePetani(Request $request)
'nama_lengkap' => 'required|string|max:255',
'email' => 'required|email|unique:petanis,email,' . $user->id,
'password' => 'nullable|min:6|confirmed',
'foto' => 'nullable|image|max:2048'
'foto' => 'nullable|image|max:2048',
'provinsi_code' => 'required',
'alamat' => 'required|string',
'kota_code' => 'required',
'kecamatan_code' => 'required',
'desa_code' => 'required',
'link_maps' => 'nullable|url',
]);
$user->nama_lengkap = $request->nama_lengkap;
$user->email = $request->email;
$user->provinsi_code = $request->provinsi_code;
$user->alamat = $request->alamat;
$user->kota_code = $request->kota_code;
$user->kecamatan_code = $request->kecamatan_code;
$user->desa_code = $request->desa_code;
$user->link_maps = $request->link_maps;
if ($request->filled('password')) {
$user->password = Hash::make($request->password);
@ -38,12 +60,11 @@ public function updatePetani(Request $request)
if ($user->foto && Storage::exists('public/' . $user->foto)) {
Storage::delete('public/' . $user->foto);
}
$path = $request->file('foto')->store('avatars', 'public');
$user->foto = $path;
$user->foto = $request->file('foto')->store('avatars', 'public');
}
$user->save();
return back()->with('success', 'Profil berhasil diperbarui!');
return back()->with('success', 'Profil dan Lokasi berhasil diperbarui!');
}
// --- FITUR PEMBELI ---

View File

@ -21,6 +21,11 @@ class Petani extends Authenticatable implements CanResetPassword
'password',
'no_hp',
'alamat',
'provinsi_code',
'kota_code',
'link_maps',
'kecamatan_code',
'desa_code',
'nama_usaha',
'status_akun'
];
@ -43,4 +48,14 @@ public function pesanTerkirim()
{
return $this->morphMany(Pesan::class, 'pengirim');
}
public function kota()
{
return $this->belongsTo(\Laravolt\Indonesia\Models\City::class, 'kota_code', 'code');
}
public function provinsi()
{
return $this->belongsTo(\Laravolt\Indonesia\Models\Province::class, 'provinsi_code', 'code');
}
}

View File

@ -18,10 +18,6 @@ class Produk extends Model
'stok',
'deskripsi',
'foto_produk',
'provinsi_code',
'kota_code',
'kecamatan_code',
'desa_code',
];
public function petani()

View File

@ -7,23 +7,19 @@
return new class extends Migration {
public function up(): void
{
Schema::table('produks', function (Blueprint $table) {
if (Schema::hasColumn('produks', 'lokasi')) {
$table->dropColumn('lokasi');
}
$table->char('provinsi_code', 2)->nullable()->after('deskripsi');
Schema::table('petanis', function (Blueprint $table) {
$table->char('provinsi_code', 2)->nullable()->after('alamat');
$table->char('kota_code', 4)->nullable()->after('provinsi_code');
$table->char('kecamatan_code', 7)->nullable()->after('kota_code');
$table->char('desa_code', 10)->nullable()->after('kecamatan_code');
$table->text('link_maps')->nullable()->after('desa_code');
});
}
public function down(): void
{
Schema::table('produks', function (Blueprint $table) {
$table->dropColumn(['provinsi_code', 'kota_code', 'kecamatan_code', 'desa_code']);
$table->string('lokasi')->nullable();
Schema::table('petanis', function (Blueprint $table) {
$table->dropColumn(['provinsi_code', 'kota_code', 'kecamatan_code', 'desa_code', 'link_maps']);
});
}
};

View File

@ -8,13 +8,10 @@
class PetaniSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// Petani SUDAH AKTIF
DB::table('petanis')->insert([
[
'nik' => '3518012345678901',
'nama_lengkap' => 'Siti Aminah',
'username' => 'siti_sayur',
@ -22,14 +19,17 @@ public function run(): void
'password' => Hash::make('password123'),
'no_hp' => '085678901234',
'alamat' => 'Dusun Krajan RT 02 RW 01',
'provinsi_code' => '35',
'kota_code' => '3518',
'kecamatan_code' => '3518100',
'desa_code' => '3518100001',
'link_maps' => 'https://maps.app.goo.gl/XXdummy123',
'nama_usaha' => 'Sayur Segar Bu Siti',
'status_akun' => 'aktif',
'created_at' => now(),
'updated_at' => now(),
]);
// Petani BARU DAFTAR menunggu verifikasi
DB::table('petanis')->insert([
],
[
'nik' => '3518012345678902',
'nama_lengkap' => 'Budi Santoso',
'username' => 'budi_tani',
@ -37,25 +37,34 @@ public function run(): void
'password' => Hash::make('password123'),
'no_hp' => '081234567890',
'alamat' => 'Jl. Raya Desa Sukamaju No. 12',
'provinsi_code' => '35',
'kota_code' => '3518',
'kecamatan_code' => '3518100',
'desa_code' => '3518100001',
'link_maps' => 'https://maps.app.goo.gl/XXdummy123',
'nama_usaha' => 'Budi Farm Organik',
'status_akun' => 'menunggu',
'status_akun' => 'aktif',
'created_at' => now(),
'updated_at' => now(),
]);
// Petani DITOLAK
DB::table('petanis')->insert([
],
[
'nik' => '3518012345678903',
'nama_lengkap' => 'Joko Widodo',
'username' => 'joko_tani',
'email' => 'wiwokdetok@gmail.com',
'email' => 'joko@gmail.com',
'password' => Hash::make('password123'),
'no_hp' => '089876543210',
'alamat' => 'Jl. Buntu No. 99',
'provinsi_code' => '35',
'kota_code' => '3518',
'kecamatan_code' => '3518100',
'desa_code' => '3518100001',
'link_maps' => 'https://maps.app.goo.gl/XXdummy123',
'nama_usaha' => 'Joko Tani Jaya',
'status_akun' => 'ditolak',
'status_akun' => 'aktif',
'created_at' => now(),
'updated_at' => now(),
]
]);
}
}

View File

@ -7,23 +7,18 @@
use App\Models\ProdukImage;
use App\Models\Kategori;
use App\Models\Petani;
use Illuminate\Support\Str;
class ProdukSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$petani = Petani::inRandomOrder()->first();
$petani = Petani::first();
if (!$petani) {
$this->command->error('Tabel petani kosong. Jalankan PetaniSeeder terlebih dahulu!');
return;
}
// KATEGORI
$kategoriGabah = [
['nama' => 'Gabah Kering Panen (GKP)', 'slug' => 'gkp', 'ikon' => 'fas fa-seedling'],
['nama' => 'Gabah Kering Giling (GKG)', 'slug' => 'gkg', 'ikon' => 'fas fa-sun'],
@ -42,7 +37,6 @@ public function run(): void
);
}
// DAFTAR PRODUK
$daftarProduk = [
[
'nama' => 'Gabah Ciherang (GKP) Baru Panen',
@ -68,37 +62,11 @@ public function run(): void
'kategori_slug' => 'benih-padi',
'gallery' => 1
],
[
'nama' => 'Gabah Padi Ketan Putih Super',
'harga' => 8000,
'stok' => 300,
'deskripsi' => 'Padi ketan putih murni, tidak tercampur padi biasa. Cocok untuk industri tape atau olahan ketan. Kualitas super.',
'kategori_slug' => 'padi-ketan',
'gallery' => 2
],
[
'nama' => 'Gabah Mentik Wangi Organik',
'harga' => 9000,
'stok' => 100,
'deskripsi' => 'Gabah Mentik Wangi (Pandan Wangi Jawa) ditanam full organik tanpa pestisida kimia. Aroma sangat wangi, beras pulen.',
'kategori_slug' => 'padi-organik',
'gallery' => 2
],
[
'nama' => 'Gabah Kering Giling (GKG) Situbagendit',
'harga' => 7200,
'stok' => 1500,
'deskripsi' => 'Gabah Situbagendit kering jemur 3 hari. Cocok untuk stok gudang penggilingan. Lokasi Nganjuk.',
'kategori_slug' => 'gkg',
'gallery' => 1
],
];
// INSERT DATA
foreach ($daftarProduk as $item) {
$kategori = Kategori::where('slug', $item['kategori_slug'])->first();
// Create Produk
$produk = Produk::create([
'petani_id' => $petani->id,
'kategori_id' => $kategori->id,

View File

@ -98,9 +98,11 @@ class="badge bg-primary bg-opacity-10 px-3 py-2 rounded-pill fw-bold border bord
<i class="fas fa-store fs-5"></i>
</div>
<div class="flex-grow-1">
<p class="text-muted small mb-0 fw-bold text-uppercase" style="font-size: 0.7rem;">Dijual Oleh
</p>
<h6 class="fw-bold text-dark mb-0">{{ $produk->petani->nama_lengkap ?? 'Petani Mitra' }}</h6>
<small class="text-muted d-block" style="font-size: 0.8rem;">
<i class="fas fa-map-marker-alt text-danger me-1"></i>
{{ Str::limit($produk->petani->alamat ?? 'Alamat tidak tersedia', 35) }}
</small>
</div>
<button type="button" class="btn btn-outline-success btn-sm rounded-pill px-3 fw-bold"
data-bs-toggle="modal" data-bs-target="#chatModal">
@ -108,6 +110,17 @@ class="badge bg-primary bg-opacity-10 px-3 py-2 rounded-pill fw-bold border bord
</button>
</div>
{{-- Link Maps --}}
@if(isset($produk->petani->link_maps) && $produk->petani->link_maps != '')
<a href="{{ $produk->petani->link_maps }}" target="_blank"
class="btn btn-light border-danger text-danger border fw-bold mb-4 w-100 text-start shadow-sm"
style="border-radius: 10px;">
<i class="fas fa-map-marker-alt me-2 fs-5 align-middle"></i>
Lihat Lokasi Lahan di Google Maps
<i class="fas fa-external-link-alt float-end mt-1 text-muted opacity-50"></i>
</a>
@endif
{{-- FORM PEMBELIAN --}}
<form action="{{ route('cart.add') }}" method="POST">
@csrf

View File

@ -188,7 +188,7 @@ class="btn {{ request('kategori') == '' || request('kategori') == 'Semua' ? 'btn
Semua
</a>
{{-- 2. Looping Kategori dari Database --}}
{{-- Looping Kategori dari Database --}}
@foreach($kategoriList as $kat)
<a href="#" data-kategori="{{ $kat->slug }}"
class="btn {{ request('kategori') == $kat->slug ? 'btn-primary' : 'btn-outline-primary' }} rounded-pill px-4 py-2 m-1 btn-category">

View File

@ -18,7 +18,12 @@ class="card-img-top w-100 h-100 object-fit-cover" alt="{{ $produk->nama_produk }
{{ $produk->kategori->nama_kategori ?? 'Umum' }}
</span>
<h5 class="fw-bold mb-2 text-dark">{{ $produk->nama_produk }}</h5>
<h6 class="fw-bold mb-1 text-dark text-truncate" style="max-width: 100%;">{{ $produk->nama_produk }}</h6>
<small class="text-muted d-block mb-2" style="font-size: 0.8rem;">
<i class="fas fa-map-marker-alt text-danger me-1"></i>
{{ Str::limit($produk->petani->alamat ?? 'Alamat tidak tersedia', 35) }}
</small>
<p class="text-muted small mb-3" style="line-height: 1.5;">
{{ Str::limit($produk->deskripsi, 60) }}
@ -32,6 +37,7 @@ class="card-img-top w-100 h-100 object-fit-cover" alt="{{ $produk->nama_produk }
Rp {{ number_format($produk->harga, 0, ',', '.') }}
</h6>
</div>
<a href="{{ route('produk.detail', $produk->id) }}"
class="btn btn-primary btn-sm rounded-pill px-3 stretched-link">
Lihat <i class="fa fa-arrow-right ms-1"></i>

View File

@ -175,7 +175,12 @@ class="card-img-top w-100 h-100" alt="{{ $produk->nama_produk }}"
<div>
<span class="badge bg-primary mb-2">{{ $produk->kategori->nama_kategori ?? 'Umum'
}}</span>
<h6 class="fw-bold mb-2 text-dark">{{ $produk->nama_produk }}</h6>
<h6 class="fw-bold mb-2 text-dark text-truncate" style="max-width: 100%;">{{
$produk->nama_produk }}</h6>
<small class="text-muted d-block mb-2" style="font-size: 0.8rem;">
<i class="fas fa-map-marker-alt text-danger me-1"></i>
{{ Str::limit($produk->petani->alamat ?? 'Alamat tidak tersedia', 35) }}
</small>
<p class="text-muted small mb-3">{{ Str::limit($produk->deskripsi, 60) }}</p>
</div>

View File

@ -52,36 +52,6 @@
<textarea name="deskripsi" class="form-control" rows="4"
placeholder="Jelaskan kualitas produk Anda..." required></textarea>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label">Provinsi</label>
<select name="provinsi_code" id="provinsi" class="form-select" required>
<option value="">Pilih Provinsi</option>
@foreach ($provinsis as $prov)
<option value="{{ $prov->code }}">{{ $prov->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Kota / Kabupaten</label>
<select name="kota_code" id="kota" class="form-select" required disabled>
<option value="">Pilih Kota/Kabupaten</option>
</select>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Kecamatan</label>
<select name="kecamatan_code" id="kecamatan" class="form-select" required disabled>
<option value="">Pilih Kecamatan</option>
</select>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Desa / Kelurahan</label>
<select name="desa_code" id="desa" class="form-select" required disabled>
<option value="">Pilih Desa</option>
</select>
</div>
</div>
</div>
{{-- UPLOAD GAMBAR --}}

View File

@ -51,49 +51,6 @@
<label class="fw-bold">Deskripsi</label>
<textarea name="deskripsi" class="form-control" rows="4" required>{{ $produk->deskripsi }}</textarea>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label">Provinsi</label>
<select name="provinsi_code" id="provinsi" class="form-select" required>
<option value="">Pilih Provinsi</option>
@foreach ($provinsis as $prov)
<option value="{{ $prov->code }}" {{ $produk->provinsi_code == $prov->code ?
'selected' : '' }}>{{ $prov->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Kota / Kabupaten</label>
<select name="kota_code" id="kota" class="form-select" required>
<option value="">Pilih Kota/Kabupaten</option>
@foreach ($kotas as $kota)
<option value="{{ $kota->code }}" {{ $produk->kota_code == $kota->code ?
'selected' : '' }}>{{ $kota->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Kecamatan</label>
<select name="kecamatan_code" id="kecamatan" class="form-select" required>
<option value="">Pilih Kecamatan</option>
@foreach ($kecamatans as $kec)
<option value="{{ $kec->code }}" {{ $produk->kecamatan_code == $kec->code ?
'selected' : '' }}>{{ $kec->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Desa / Kelurahan</label>
<select name="desa_code" id="desa" class="form-select" required>
<option value="">Pilih Desa</option>
@foreach ($desas as $desa)
<option value="{{ $desa->code }}" {{ $produk->desa_code == $desa->code ?
'selected' : '' }}>{{ $desa->name }}</option>
@endforeach
</select>
</div>
</div>
</div>
{{-- KELOLA GAMBAR --}}

View File

@ -54,6 +54,60 @@
</div>
</div>
<div class="mb-3">
<label class="form-label">Alamat Lengkap (Jalan/Dusun/RT/RW)</label>
<textarea name="alamat" class="form-control" rows="3" required>{{ $user->alamat }}</textarea>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label">Provinsi</label>
<select name="provinsi_code" id="provinsi" class="form-select" required>
<option value="">Pilih Provinsi</option>
@foreach($provinsis as $prov)
<option value="{{ $prov->code }}" {{ $user->provinsi_code == $prov->code ? 'selected' :
'' }}>{{ $prov->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Kota/Kabupaten</label>
<select name="kota_code" id="kota" class="form-select" required>
<option value="">Pilih Kota</option>
@foreach($kotas as $kota)
<option value="{{ $kota->code }}" {{ $user->kota_code == $kota->code ? 'selected' : ''
}}>{{ $kota->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Kecamatan</label>
<select name="kecamatan_code" id="kecamatan" class="form-select" required>
<option value="">Pilih Kecamatan</option>
@foreach($kecamatans as $kecamatan)
<option value="{{ $kecamatan->code }}" {{ $user->kecamatan_code == $kecamatan->code ?
'selected' : '' }}>{{ $kecamatan->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Desa/Kelurahan</label>
<select name="desa_code" id="desa" class="form-select" required>
<option value="">Pilih Desa</option>
@foreach($desas as $desa)
<option value="{{ $desa->code }}" {{ $user->desa_code == $desa->code ? 'selected' : ''
}}>{{ $desa->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="mb-3">
<label class="form-label fw-bold">Link Google Maps Lahan/Toko (Opsional)</label>
<input type="url" name="link_maps" class="form-control"
placeholder="Contoh: http://maps.google.com/..." value="{{ $user->link_maps }}">
</div>
<button type="submit" class="btn btn-primary">Simpan Perubahan</button>
</div>
</div>
@ -61,3 +115,43 @@
</div>
</div>
@endsection
@section('js')
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script>
$(document).ready(function() {
$('#provinsi').on('change', function() {
let code = $(this).val();
$('#kota').html('<option value="">Memuat...</option>');
if(code) {
$.post("{{ url('get-kota') }}", {code: code, _token: '{{ csrf_token() }}'}, function(data) {
$('#kota').html('<option value="">Pilih Kota</option>');
$.each(data, function(key, val) { $('#kota').append(`<option value="${val.code}">${val.name}</option>`); });
});
}
});
$('#kota').on('change', function() {
let code = $(this).val();
$('#kecamatan').html('<option value="">Memuat...</option>');
if(code) {
$.post("{{ url('get-kecamatan') }}", {code: code, _token: '{{ csrf_token() }}'}, function(data) {
$('#kecamatan').html('<option value="">Pilih Kecamatan</option>');
$.each(data, function(key, val) { $('#kecamatan').append(`<option value="${val.code}">${val.name}</option>`); });
});
}
});
$('#kecamatan').on('change', function() {
let code = $(this).val();
$('#desa').html('<option value="">Memuat...</option>');
if(code) {
$.post("{{ url('get-desa') }}", {code: code, _token: '{{ csrf_token() }}'}, function(data) {
$('#desa').html('<option value="">Pilih Desa</option>');
$.each(data, function(key, val) { $('#desa').append(`<option value="${val.code}">${val.name}</option>`); });
});
}
});
});
</script>
@endsection