chore: change government agency show UI

This commit is contained in:
myuqinurrohman 2025-04-16 15:23:26 +07:00
parent 07f13bb802
commit 4206ae896c
8 changed files with 91 additions and 35 deletions

View File

@ -402,10 +402,20 @@ public function governmentAgency(Request $request){
if ($request->ajax()) {
$data = GovernmentAgency::with(['issues'])->get();
$newData = $request->input('new_data', null);
return DataTables::of($data)
->addIndexColumn()
->addColumn('name', function ($data) use ($newData) {
if(filled($newData) && decrypt_id($newData) == $data->id){
return '<span class="badge bg-info" style="display:inline-block;font-size:0.8rem; margin-right:0.5rem;">Baru</span>'. $data->name;
}else{
return $data->name;
}
})
->addColumn('short_name', function ($data) {
return filled($data->short_name) ? $data->short_name : '-';
return filled($data->short_name) ? $data->short_name : '<i class="text-warning">Belum ditambahkan</i>';
})
->addColumn('issues', function ($data) {
$issueCount = $data->issues->count();
@ -446,7 +456,7 @@ public function governmentAgency(Request $request){
return $dropdown;
})
->rawColumns(['issues', 'action'])
->rawColumns(['name', 'short_name', 'issues', 'action'])
->make(true);
}

View File

@ -13,13 +13,14 @@ class GovernmentAgencyController extends Controller
{
public function index(){
return view('dashboard.government-agencies.index', [
'title' => 'OPD'
'title' => 'Data OPD',
'new_data' => session()->get('new_data', null),
]);
}
public function create(){
return view('dashboard.government-agencies.create', [
'title' => 'Tambah OPD'
'title' => 'Buat OPD Baru'
]);
}
@ -27,11 +28,12 @@ public function store(GovernmentAgencyRequest $request){
$validatedData = $request->validated();
$validatedData['enhancer_id'] = Auth::id();
$createdGovernmentAgency = GovernmentAgency::create($validatedData);
try{
$createdGovernmentAgency = GovernmentAgency::create($validatedData);
if($createdGovernmentAgency){
return redirect()->route('dashboard.government.agencies.index')->with('success-status', 'Berhasil menambahkan OPD.');
}else{
return redirect()->route('dashboard.government.agencies.index')->with('success-status', 'Berhasil membuat OPD baru.')
->with('new_data', encrypt_id($createdGovernmentAgency->id));
}catch(\Exception $e){
return redirect()->back()->with('failed-status', 'Gagal menambahkan OPD');
}
}
@ -53,7 +55,7 @@ public function update(GovernmentAgencyRequest $request, $id){
$updatedGovernmentAgency = $governmentAgency->update($validatedData);
if($updatedGovernmentAgency){
return redirect()->back()->with('success-status', 'Berhasil mengubah OPD.');
return redirect()->route('dashboard.government.agencies.show', ['id' => encrypt_id($governmentAgency->id)])->with('success-status', 'Berhasil mengubah OPD.');
}else{
return redirect()->back()->with('failed-status', 'Gagal mengubah OPD');
}

View File

@ -25,4 +25,8 @@ public function issues()
->using(IssueManagementGovernmentAgency::class)
->withTimestamps();
}
public function enhancer(){
return $this->belongsTo(User::class, 'enhancer_id', 'id');
}
}

View File

@ -10,7 +10,10 @@
<div class="card card-bordered card-preview">
<div class="card-inner">
<div class="card-head">
<h5 class="card-title">{{$title}}</h5>
<div class="nk-block-head">
<h5 class="title">Buat OPD Baru</h5>
<p>Masukkan informasi yang diperlukan untuk membuat OPD.</p>
</div>
</div>
<form action="{{route('dashboard.government.agencies.store')}}" method="post" id="myForm">
@csrf
@ -19,7 +22,7 @@
<div class="form-group">
<label class="form-label" for="name">Nama<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('name') border-danger @enderror" id="name" name="name" placeholder="Masukan nama OPD" value="{{old('name')}}">
<input type="text" class="form-control" id="name" name="name" placeholder="Contoh: Kesatuan Bangsa dan Politik" value="{{old('name')}}">
</div>
@error('name')
<span class="validation-error">{{$message}}</span>
@ -30,18 +33,18 @@
<div class="form-group">
<label class="form-label" for="short_name">Singkatan Nama</label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('short_name') border-danger @enderror" id="short_name" name="short_name" placeholder="Masukan singkatan nama OPD" value="{{old('short_name')}}">
<input type="text" class="form-control @error('short_name') border-danger @enderror" id="short_name" name="short_name" placeholder="Contoh: Kesbangpol" value="{{old('short_name')}}">
</div>
@error('short_name')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="col-lg-8">
<div class="form-group">
<label class="form-label" for="location">Lokasi</label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('location') border-danger @enderror" id="location" name="location" placeholder="Masukan lokasi OPD" value="{{old('location')}}">
<input type="text" class="form-control @error('location') border-danger @enderror" id="location" name="location" placeholder="Contoh: Jl. Braga No. 10, Kel. Braga, Kec. Sumur Bandung, Kota Bandung, Jawa Barat" value="{{old('location')}}">
</div>
@error('location')
<span class="validation-error">{{$message}}</span>
@ -55,6 +58,9 @@
<textarea class="tinymce-basic form-control" name="description">{!!old('description')!!}</textarea>
</div>
</div>
@error('description')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
<div class="col-12">
<hr>

View File

@ -10,7 +10,10 @@
<div class="card card-bordered card-preview">
<div class="card-inner">
<div class="card-head">
<h5 class="card-title">{{$title}}</h5>
<div class="nk-block-head">
<h5 class="title">Ubah OPD</h5>
<p>Perbarui informasi OPD ini.</p>
</div>
</div>
<form action="{{route('dashboard.government.agencies.update', ['id' => encrypt_id($governmentAgency->id)])}}" method="post" id="myForm">
@csrf
@ -20,7 +23,7 @@
<div class="form-group">
<label class="form-label" for="name">Nama<span class="required-input">*</span></label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('name') border-danger @enderror" id="name" name="name" placeholder="Masukan nama OPD" value="{{$governmentAgency->name}}">
<input type="text" class="form-control" id="name" name="name" placeholder="Contoh: Kesatuan Bangsa dan Politik" value="{{$governmentAgency->name}}">
</div>
@error('name')
<span class="validation-error">{{$message}}</span>
@ -31,18 +34,18 @@
<div class="form-group">
<label class="form-label" for="short_name">Singkatan Nama</label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('short_name') border-danger @enderror" id="short_name" name="short_name" placeholder="Masukan singkatan nama OPD" value="{{$governmentAgency->short_name}}">
<input type="text" class="form-control @error('short_name') border-danger @enderror" id="short_name" name="short_name" placeholder="Contoh: Kesbangpol" value="{{$governmentAgency->short_name}}">
</div>
@error('short_name')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
</div>
<div class="col-lg-6">
<div class="col-lg-8">
<div class="form-group">
<label class="form-label" for="location">Lokasi</label>
<div class="form-control-wrap">
<input type="text" class="form-control @error('location') border-danger @enderror" id="location" name="location" placeholder="Masukan lokasi OPD" value="{{$governmentAgency->location}}">
<input type="text" class="form-control @error('location') border-danger @enderror" id="location" name="location" placeholder="Contoh: Jl. Braga No. 10, Kel. Braga, Kec. Sumur Bandung, Kota Bandung, Jawa Barat" value="{{$governmentAgency->location}}">
</div>
@error('location')
<span class="validation-error">{{$message}}</span>
@ -56,6 +59,9 @@
<textarea class="tinymce-basic form-control" name="description">{!!$governmentAgency->description!!}</textarea>
</div>
</div>
@error('description')
<span class="validation-error">{{$message}}</span>
@enderror
</div>
<div class="col-12">
<hr>

View File

@ -6,13 +6,32 @@
<div class="container-fluid">
<div class="nk-content-inner">
<div class="nk-content-body">
<div class="nk-block-head nk-block-head-sm">
<div class="nk-block-between g-3">
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">Detail OPD</h3>
<div class="nk-block-des text-soft">
<ul class="list-inline">
<li>Detail OPD dapat dilihat di sini.</li>
</ul>
</div>
</div>
<div class="nk-block-head-content">
<a href="{{route('dashboard.government.agencies.index')}}" class="btn btn-icon btn-outline-light bg-white d-inline-flex d-sm-none"><em class="icon ni ni-arrow-left"></em></a>
<a href="{{route('dashboard.government.agencies.index')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
</div>
</div>
</div><!-- .nk-block-head -->
<div class="nk-block nk-block-lg">
<div class="card">
<div class="card-aside-wrap">
<div class="card-content">
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
<li class="nav-item">
<a class="nav-link text-primary" href="#"><em class="icon ni ni-info"></em><span>Detail OPD</span></a>
<a class="nav-link text-primary" href="javascript:void(0);"><em class="icon ni ni-info"></em><span>Detail Informasi</span></a>
</li>
<li class="nav-item nav-item-trigger d-xxl-none">
<a href="{{route('dashboard.government.agencies.edit', ['id' => encrypt_id($governmentAgency->id), 'show' => true])}}" class="btn btn-icon btn-trigger"><em class="icon ni ni-edit"></em></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
@ -58,6 +77,12 @@
<span class="profile-ud-value">{{idn_date($governmentAgency->created_at, 'l, d F Y')}}</span>
</div>
</div>
<div class="profile-ud-item">
<div class="profile-ud wider">
<span class="profile-ud-label">Dibuat Oleh</span>
<span class="profile-ud-value">{{$governmentAgency->enhancer->name ?? '-'}}</span>
</div>
</div>
</div><!-- .profile-ud-list -->
</div><!-- .nk-block -->
{{-- <div class="nk-divider divider md"></div> --}}
@ -73,11 +98,6 @@
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
</div><!-- .nk-block -->
<hr>
<div class="nk-block d-flex justify-content-end">
<a href="{{route('dashboard.government.agencies.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
<a href="{{route('dashboard.government.agencies.edit', ['id' => encrypt_id($governmentAgency->id), 'show' => true])}}" class="btn btn-warning"><span>Ubah</span></a>
</div><!-- .nk-block -->
</div><!-- .card-inner -->
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->

View File

@ -47,7 +47,7 @@
<th>No</th>
<th>Nama</th>
<th>Lokus</th>
<th>Isu</th>
<th>Jumlah Isu</th>
<th>Status</th>
<th></th>
</tr>

View File

@ -250,7 +250,13 @@
$('#governmentAgenciesTable').DataTable({
processing: true,
serverSide: true,
ajax: '{{ route('dashboard.government.agencies.data') }}',
ajax: {
url: '{{ route('dashboard.government.agencies.data') }}',
type: 'GET',
data: function(d) {
d.new_data = '{{ $new_data }}';
}
},
columns: [
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
{ data: 'name', name: 'name' },
@ -261,16 +267,18 @@
{ data: 'id', name: 'id', orderable: true, searchable: false, visible: false },
],
columnDefs: [
{ targets: 0, width: 'auto' },
{ targets: 2, width: '10%' },
{ targets: 3, width: '7%' },
{ targets: 0, width: '2%' }, // Index
{ targets: 1, width: '20%' }, // Name
{ targets: 2, width: '6%' }, // Short Name
{ targets: 3, width: '3%' }, // Issue
{ targets: 4, width: '2%', className: 'text-center' }, // Action button
{
targets: [1],
createdCell: function(td, cellData, rowData, row, col) {
targets: [1, 2], // Title & Link
createdCell: function(td) {
$(td).css({
'word-wrap': 'break-word',
'white-space': 'normal',
'overflow-wrap': 'break-word'
'word-break': 'break-word',
});
}
}
@ -278,7 +286,7 @@
language: datatableLanguage,
// responsive: true,
autoWidth: false,
order: [[4, 'desc']],
order: [[5, 'desc']],
pagingType: "simple",
lengthMenu: [[10, 25, 50, 100, -1], ['Tampilkan 10 data', 'Tampilkan 25 data', 'Tampilkan 50 data', 'Tampilkan 100 data', 'Tampilkan semua']],
scrollX: true