Files
accounting_dev_v2/application/views/roles/index.php
T
2026-09-15 10:38:43 +07:00

24 lines
6.2 KiB
PHP

<div class="container-fluid py-3">
<div class="d-flex flex-wrap justify-content-between align-items-center gap-2 mb-3"><div><h4 class="mb-1">Role & Permission</h4><p class="text-muted mb-0">Role bawaan memiliki tanggung jawab standar. Role custom dapat dibuat sesuai kebutuhan perusahaan.</p></div><button class="btn btn-primary" id="addRole"><i class="bi bi-plus-circle me-1"></i>Role Custom</button></div>
<div class="alert alert-warning"><b>Admin = Master Admin.</b> Role ini selalu mempunyai akses penuh untuk melihat, membuat, mengubah, menghapus, posting, dan approve seluruh modul. Permission-nya tidak dapat dikurangi.</div>
<div class="row g-3">
<div class="col-lg-4"><div class="card h-100"><div class="card-header">Daftar dan Tanggung Jawab Role</div><div class="list-group list-group-flush" id="roleList">
<?php foreach($roles as$r):?><button type="button" class="list-group-item list-group-item-action role-item" data-id="<?=$r->id?>"><div class="d-flex justify-content-between"><b><?=html_escape($r->nama_role)?></b><span><?php if($r->is_super_admin):?><span class="badge bg-danger">Master Admin</span><?php elseif($r->is_system):?><span class="badge bg-secondary">Bawaan</span><?php else:?><span class="badge bg-info text-dark">Custom</span><?php endif?></span></div><small class="text-muted"><?=html_escape($r->description?:'Belum ada uraian tanggung jawab')?></small></button><?php endforeach?>
</div></div></div>
<div class="col-lg-8"><div class="card"><div class="card-header" id="formTitle">Pilih role untuk melihat permission</div><div class="card-body"><form id="roleForm"><input type="hidden" name="id" id="roleId"><div class="row g-2 mb-3"><div class="col-md-4"><label class="form-label">Nama Role</label><input class="form-control" name="name" id="roleName" required></div><div class="col-md-6"><label class="form-label">Tanggung Jawab Role</label><input class="form-control" name="description" id="roleDescription" required placeholder="Jelaskan pekerjaan yang ditangani"></div><div class="col-md-2 d-flex align-items-end"><label class="form-check mb-2"><input class="form-check-input" type="checkbox" name="is_active" id="roleActive" value="1"> Aktif</label></div></div>
<div class="table-responsive"><table class="table table-sm align-middle"><thead><tr><th>Modul</th><?php foreach($actions as$label):?><th class="text-center"><?=$label?></th><?php endforeach?></tr></thead><tbody><?php foreach($features as$key=>$label):?><tr><td><b><?=$label?></b><?php if($key==='payroll'):?><div class="form-check mt-2"><input class="form-check-input permission-box" type="checkbox" name="permissions[payroll][]" value="can_manage_all_salary" id="manageAllSalary" data-feature="payroll" data-action="can_manage_all_salary"><label class="form-check-label small text-danger" for="manageAllSalary">Manage All Gaji (termasuk gaji terbatas)</label></div><div class="form-check mt-2"><input class="form-check-input permission-box" type="checkbox" name="permissions[payroll][]" value="can_manage_allowances" id="managePayrollAllowances" data-feature="payroll" data-action="can_manage_allowances"><label class="form-check-label small text-warning-emphasis" for="managePayrollAllowances">Kelola Tunjangan &amp; Bonus</label><small class="d-block text-muted">Tanpa izin ini, user hanya dapat mengatur Gaji Pokok dan Potongan.</small></div><?php endif?></td><?php foreach($actions as$action=>$actionLabel):?><td class="text-center"><input class="form-check-input permission-box" type="checkbox" name="permissions[<?=$key?>][]" value="<?=$action?>" data-feature="<?=$key?>" data-action="<?=$action?>"></td><?php endforeach?></tr><?php endforeach?></tbody></table></div>
<div class="d-flex justify-content-between mt-3"><button type="button" class="btn btn-outline-danger" id="deleteRole" hidden>Hapus Role Custom</button><button class="btn btn-success ms-auto" id="saveRole">Simpan Permission</button></div>
</form></div></div></div>
</div>
</div>
<script>
$(function(){var isSuper=false,isSystem=false;
function reset(){isSuper=false;isSystem=false;$('#roleForm')[0].reset();$('#roleId').val('');$('.permission-box,#roleName,#roleDescription,#roleActive,#saveRole').prop('disabled',false);$('#deleteRole').prop('hidden',true);$('#formTitle').text('Role Custom Baru');}
$('#addRole').on('click',reset);
$('.role-item').on('click',function(){$('.role-item').removeClass('active');$(this).addClass('active');$.get('<?=base_url('roles/detail/')?>'+$(this).data('id'),function(r){if(!r.status)return;var x=r.result;reset();isSuper=Number(x.is_super_admin)===1;isSystem=Number(x.is_system)===1;$('#roleId').val(x.id);$('#roleName').val(x.nama_role);$('#roleDescription').val(x.description);$('#roleActive').prop('checked',Number(x.is_active)===1);$('#formTitle').text(x.nama_role+(isSuper?' · Master Admin':(isSystem?' · Role Bawaan':' · Role Custom')));Object.keys(x.permissions||{}).forEach(function(f){(x.permissions[f]||[]).forEach(function(a){$('.permission-box[data-feature="'+f+'"][data-action="'+a+'"]').prop('checked',true);});});if(isSuper){$('.permission-box').prop('checked',true).prop('disabled',true);$('#roleName,#roleDescription,#roleActive,#saveRole').prop('disabled',true);}$('#deleteRole').prop('hidden',isSystem||isSuper);},'json');});
$(document).on('change','.permission-box[data-action="can_view"]',function(){if(!this.checked)$('.permission-box[data-feature="'+$(this).data('feature')+'"]').prop('checked',false);});$(document).on('change','.permission-box:not([data-action="can_view"])',function(){if(this.checked)$('.permission-box[data-feature="'+$(this).data('feature')+'"][data-action="can_view"]').prop('checked',true);});
$('#roleForm').on('submit',function(e){e.preventDefault();$.post('<?=base_url('roles/save')?>',$(this).serialize(),function(r){if(r.status){Swal.fire('Sukses',r.message,'success').then(function(){location.reload();});}else Swal.fire('Gagal',r.message,'error');},'json');});
$('#deleteRole').on('click',function(){var id=$('#roleId').val();if(!id)return;Swal.fire({title:'Hapus role custom?',icon:'warning',showCancelButton:true,confirmButtonText:'Hapus'}).then(function(x){if(x.isConfirmed)$.post('<?=base_url('roles/delete/')?>'+id,function(r){if(r.status)location.reload();else Swal.fire('Gagal',r.message,'error');},'json');});});
});
</script>