Explore/ismail (#15)
Build Docker Image / build-frontend (push) Successful in 38s

Co-authored-by: ISMAIL MASSERAN <topaz@Mac.dlinkrouter.local>
Co-authored-by: ISMAIL MASSERAN <topaz@ISMAILs-Macbook.local>
Co-authored-by: nurafrinaalimi16 <nurafrinaalimi16@gmail.com>
Reviewed-on: #15
This commit was merged in pull request #15.
This commit is contained in:
2026-09-06 12:41:58 +08:00
parent 1f8642e230
commit d60dd8bf39
139 changed files with 6788 additions and 867 deletions
@@ -43,9 +43,6 @@
<b>Cawangan</b>
</div>
<div class='col-md-7'>
@php
$cawangan_all = Http::withOptions(['verify' => config('app.api_verify')])->get($api_url . '/api/cawangan')->json();
@endphp
<select class="form-control" name="cawangan" data-placeholder="Pilih Cawangan" id="cawangan">
<option disabled selected value> -- Pilih Cawangan -- </option>
<option value="operasi">Operasi</option>
@@ -106,56 +103,12 @@
<div class="card-body text-center">
<div class="row">
<div class="col-md-12">
<table id="rekod_kakitangan" class="table table-striped table-hover">
<thead class="thead-dark">
<tr>
<th>Bil</th>
<th>Nama Staff</th>
<th>Jawatan</th>
<th>Cawangan</th>
<th>Tindakan</th>
</tr>
</thead>
<tbody>
@foreach($kakitangan as $index=>$staff)
@if($staff->roles != 'admin')
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $staff->name }}</td>
<td>{{ strtoupper($staff->roles) }}</td>
<td>
@if($staff->cawangan == 'operasi' || $staff->cawangan == 'callcenter' || $staff->cawangan == 'admin')
{{ ucwords($staff->cawangan) }}
@else
@php
$cawangan_staff = Http::withOptions(['verify' => config('app.api_verify')])->get(config('api.url') . '/api/cawangan/'. $staff->cawangan)->json();
echo (isset($cawangan_staff['details_caw'])) ? ucwords($cawangan_staff['details_caw']) : 'test';
@endphp
@endif
</td>
<td>
@if($auth_user->roles == 'operasi')
<a href="{{ route('kakitangan.tukartaraf',['id'=>$staff->id]) }}" class="btn btn-warning" title="Tukar Taraf"><i class="material-icons">edit</i></a>
<a href="{{ route('kakitangan.tukarcawangan',['id'=>$staff->id]) }}" class="btn btn-info" title="Tukar Cawangan"><i class="material-icons">work</i></a>
<a href="{{ route('operasi.kakitangan.edit',['id'=>$staff->id]) }}" class="btn btn-success" title="Edit Maklumat"><i class="material-icons">settings</i></a>
<button type="button" class="btn btn-danger btn-delete" data-roles="{{ $auth_user->roles }}" data-staff-id="{{ $staff->id }}" data-token="{{ csrf_token() }}" title="Delete Kakitangan"><i class="material-icons">delete</i></button>
@elseif($auth_user->roles == 'admin')
{{-- <form method="post" action="{{ route('admin.kakitangan.delete') }}">
{{ @csrf_field() }} --}}
<input type="hidden" name="staff_id" value="{{ $staff->id }}"/>
<a href="{{ route('admin.kakitangan.tukartaraf',['id'=>$staff->id]) }}" class="btn btn-warning" title="Tukar Taraf"><i class="material-icons">edit</i></a>
<a href="{{ route('admin.kakitangan.tukarcawangan',['id'=>$staff->id]) }}" class="btn btn-info" title="Tukar Cawangan"><i class="material-icons">work</i></a>
<a href="{{ route('admin.kakitangan.edit',['id'=>$staff->id]) }}" class="btn btn-success" title="Edit Maklumat"><i class="material-icons">settings</i></a>
<a href="{{ route('admin.kakitangan.resetcredentials',['id'=>$staff->id]) }}" class="btn btn-primary" title="Reset Password"><i class="material-icons">restore</i></a>
<button type="button" class="btn btn-danger btn-delete" data-staff-id="{{ $staff->id }}" data-token="{{ csrf_token() }}" title="Delete Kakitangan"><i class="material-icons">delete</i></button>
{{-- </form> --}}
@endif
</td>
</tr>
@endif
@endforeach
</tbody>
</table>
<x-datatable
id="rekod_kakitangan"
filename="Senarai_Kakitangan"
:columns="['Bil', 'Tindakan', 'Nama Staff', 'Jawatan', 'Role Harian', 'Role Asal', 'Cawangan']"
:skipExport="['Bil', 'Tindakan']"
/>
</div>
</div>
</div>
@@ -164,8 +117,72 @@
</div>
</div>
<script>
@php
$isOperasi = $auth_user->roles == 'operasi';
$canImpersonate = app()->environment(['local', 'staging'])
&& $auth_user->roles === 'admin'
&& !(Auth::check() && method_exists(Auth::user(), 'isImpersonated') && Auth::user()->isImpersonated());
@endphp
var tablerekod = $('#rekod_kakitangan').DataTable();
function escapeHtml(value) {
return $('<div>').text(value == null ? '' : String(value)).html();
}
function staffTindakanHtml(staff) {
var id = staff.id;
var html = '';
html += '<a href="' + staffRoutes.tukarTaraf.replace('__ID__', id) + '" class="btn btn-warning" title="Tukar Taraf"><i class="material-icons">edit</i></a> ';
html += '<a href="' + staffRoutes.tukarCawangan.replace('__ID__', id) + '" class="btn btn-info" title="Tukar Cawangan"><i class="material-icons">work</i></a> ';
html += '<a href="' + staffRoutes.edit.replace('__ID__', id) + '" class="btn btn-success" title="Edit Maklumat"><i class="material-icons">settings</i></a> ';
if (authRole === 'admin') {
html += '<a href="' + staffRoutes.reset.replace('__ID__', id) + '" class="btn btn-primary" title="Reset Password"><i class="material-icons">restore</i></a> ';
}
if (canImpersonate && id !== authUserId) {
html += '<form method="post" action="' + staffRoutes.impersonate.replace('__ID__', id) + '" style="display:inline;">' +
csrfField +
'<button type="button" class="btn btn-secondary btn-impersonate" data-staff-name="' + escapeHtml(staff.name) + '" title="Impersonate"><i class="material-icons">supervised_user_circle</i></button>' +
'</form> ';
}
html += '<button type="button" class="btn btn-danger btn-delete" data-roles="' + authRole + '" data-staff-id="' + id + '" title="Delete Kakitangan"><i class="material-icons">delete</i></button>';
return html;
}
var authRole = @json($auth_user->roles);
var authUserId = @json($auth_user->id);
var canImpersonate = @json($canImpersonate);
var csrfField = '<input type="hidden" name="_token" value="' + @json(csrf_token()) + '">';
var staffRoutes = {
tukarTaraf: @json($isOperasi ? route('kakitangan.tukartaraf', ['id' => '__ID__']) : route('admin.kakitangan.tukartaraf', ['id' => '__ID__'])),
tukarCawangan: @json($isOperasi ? route('kakitangan.tukarcawangan', ['id' => '__ID__']) : route('admin.kakitangan.tukarcawangan', ['id' => '__ID__'])),
edit: @json($isOperasi ? route('operasi.kakitangan.edit', ['id' => '__ID__']) : route('admin.kakitangan.edit', ['id' => '__ID__'])),
reset: @json(route('admin.kakitangan.resetcredentials', ['id' => '__ID__'])),
impersonate: @json(route('impersonate.start', ['id' => '__ID__']))
};
var tablerekod = initErahnDatatable('#rekod_kakitangan', {
columnDefs: [
{ targets: 0, orderable: false, width: '40px' },
{ targets: 1, orderable: false, searchable: false }
]
});
$.each(@json($kakitangan_rows), function (index, staff) {
tablerekod.row.add([
index + 1,
staffTindakanHtml(staff),
escapeHtml(staff.name),
escapeHtml(staff.roles),
escapeHtml(staff.role_harian),
escapeHtml(staff.role_asal),
escapeHtml(staff.cawangan)
]);
});
tablerekod.draw();
$("#rekod_kakitangan").on('click', ".btn-delete", function(){
//$('.btn-delete').on('click', function(){
@@ -223,6 +240,27 @@
}).catch(swal.noop)
});
$("#rekod_kakitangan").on('click', ".btn-impersonate", function(){
var form = $(this).closest('form');
var staffName = $(this).data('staff-name');
Swal.fire({
title: 'Menyamar sebagai ' + staffName + '?',
text: "Anda akan log masuk sebagai " + staffName + ".",
type: 'warning',
showCancelButton: true,
confirmButtonClass: 'btn btn-secondary',
cancelButtonClass: 'btn btn-warning',
confirmButtonText: 'Ya, menyamar',
cancelButtonText: 'Batal!',
buttonsStyling: false
}).then(function(result) {
if (result.isConfirmed) {
form.submit();
}
}).catch(swal.noop)
});
function verifyregister(){
var cawangan = $('#cawangan').val();
var role = $('#role').val();
@@ -85,7 +85,7 @@ $(document).ready(function() {
};
$.ajax({
url: '{{ config("api.url") }}/api/maxmutuemas/update',
url: '{{ api_url_for_browser() }}/api/maxmutuemas/update',
type: 'POST',
data: formData,
success: function(response) {
+1 -1
View File
@@ -95,7 +95,7 @@
</div>
<script>
let api_url = "{{ $api_url }}";
let api_url = "{{ api_url_for_browser() }}";
var tableemas = $('#table-emas').DataTable({
"scrollX": true
+2 -2
View File
@@ -236,8 +236,8 @@
"scrollX": true
});
let api = "{{ config('api.url') }}";
let api = "{{ api_url_for_browser() }}";
const formatter = new Intl.NumberFormat('en-US', {
minimumFractionDigits: 2
});
@@ -237,7 +237,7 @@
</div>
</div>
<script>
let api_url = "{{ $api_url }}";
let api_url = "{{ api_url_for_browser() }}";
var tablerekod = $('#rekod_komuditi').DataTable( {
"pageLength": 1000,
@@ -54,7 +54,7 @@
</div>
<script>
let api_url = "{{ $api_url }}";
let api_url = "{{ api_url_for_browser() }}";
var tablerekod = $('#rekod_komoditi').DataTable();
$('#tarikh_rekod').datepicker({
format: 'dd/mm/yyyy',