This commit is contained in:
Jokoprasetio 2026-03-06 01:07:53 +07:00
parent 6fa55f083b
commit ac86078d96
8 changed files with 330 additions and 126 deletions

View File

@ -165,11 +165,8 @@ class DashboardController extends Controller
if (!empty($unitFilterIds)) {
$unitIds = array_values(array_intersect($unitIds, $unitFilterIds));
}
$query = FileDirectory::where('statusenabled', true)
$query = FileDirectory::with('kategori')->where('statusenabled', true)
->where('status_action', 'approved')
->where(function($q){
$q->where('is_akre', false)->orWhereNull('is_akre');
})
->whereIn('id_unit_kerja', $unitIds)
->when(!empty($kategoriIds), function ($q) use ($kategoriIds) {
$q->whereIn('master_kategori_directory_id', $kategoriIds);
@ -184,10 +181,14 @@ class DashboardController extends Controller
$data = $query->orderBy('entry_at', 'desc')
->paginate($perPage);
$items = collect($data->items())->map(function($item){
$item->nama_kategori = $item->kategori->nama_kategori_directory ?? $item->kategori_hukum ?? null;
return $item;
});
$payload = [
'status' => true,
'message' => 'Berhasil mendapatkan data',
'data' => $data->items(),
'data' => $items,
'pagination' => [
'current_page' => $data->currentPage(),
'next_page' => $data->hasMorePages() ? $data->currentPage() + 1 : null,
@ -933,10 +934,7 @@ class DashboardController extends Controller
$kategoriIds = is_array($kategori)
? array_values(array_filter($kategori))
: array_values(array_filter(explode(',', (string) $kategori)));
$query = FileDirectory::where('statusenabled', true)->where('status_action', 'approved')
->where(function($q){
$q->where('is_akre', false)->orWhereNull('is_akre');
})
$query = FileDirectory::with('kategori')->where('statusenabled', true)->where('status_action', 'approved')
->when(!empty($unitIds), function ($q) use ($unitIds) {
$q->whereIn('id_unit_kerja', $unitIds);
})
@ -956,14 +954,18 @@ class DashboardController extends Controller
}
$data = $query->orderBy('entry_at', 'desc')
->paginate($perPage);
$items = collect($data->items())->map(function($item){
$item->nama_kategori = $item->kategori->nama_kategori_directory ?? $item->kategori_hukum ?? null;
return $item;
});
$payload = [
'status' => true,
'message' => 'Berhasil mendapatkan data',
'data' => $data->items(),
'data' => $items,
'pagination' => [
'current_page' => $data->currentPage(),
'next_page' => $data->hasMorePages() ? $data->currentPage() + 1 : null,
@ -1147,7 +1149,7 @@ class DashboardController extends Controller
'status_action' => $isAtasan ? 'approved' : null
], 200);
} catch (\Throwable $th) {
dd($th);
// dd($th);
DB::connection('dbDirectory')->rollback();
return response()->json([
'status' => false,
@ -2275,7 +2277,7 @@ class DashboardController extends Controller
{
$keyword = $request->query('keyword');
$perPage = (int) $request->query('per_page', 10);
$query = FileDirectory::query()
$query = FileDirectory::withOut('unit')
->where('statusenabled', true)
->where('status_action', 'approved')
->where('is_akre', true);

View File

@ -4,6 +4,8 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\LogActivity;
use App\Models\UnitKerja;
use App\Models\MasterKategori;
class FileDirectory extends Model
{
@ -12,6 +14,7 @@ class FileDirectory extends Model
public $timestamps = false;
protected $primaryKey = 'file_directory_id';
protected $guarded = ['file_directory_id'];
protected $with = ['unit'];
public function viewLogs()
{
@ -26,4 +29,16 @@ class FileDirectory extends Model
->where('action_type', 'Download Dokumen');
}
public function kategori(){
return $this->belongsTo(MasterKategori::class, 'master_kategori_directory_id', 'master_kategori_directory_id');
}
public function unit(){
// Each file belongs to exactly one unit; skip the subUnitKerja eager load from UnitKerja.
return $this->belongsTo(UnitKerja::class, 'id_unit_kerja', 'id')->select('id', 'name')
->without('subUnitKerja');
}
}

View File

@ -933,19 +933,18 @@ document.addEventListener('DOMContentLoaded', () => {
<div class="col-md-4">
<label class="form-label fw-semibold">Kategori Hukum</label>
<select class="form-select select-kat-hukum" name="data[${colCount}][kategori_hukum]" id="select_kategori_hukum_${colCount}" style="width: 350px;">
<option value="" disabled selected>Pilih Kategori Hukum</option>
<option value="Pedir - Kebijakan">Pedir - Kebijakan</option>
<option value="Keputusan Dirut - Kebijakan">Keputusan Dirut - Kebijakan</option>
<option value="Surat Edaran - Kebijakan">Surat Edaran - Kebijakan</option>
<option value="Pengumuman - Kebijakan">Pengumuman - Kebijakan</option>
<option value="Pelayanan Kesehatan - Kerjasama">Pelayanan Kesehatan - Kerjasama</option>
<option value="Management - Kerjasama">Management - Kerjasama</option>
<option value="Pemeliharan - Kerjasama">Pemeliharan - Kerjasama</option>
<option value="iklat - Kerjasama">Diklat - Kerjasama</option>
<option value="Luar Negeri - Kerjasama">Luar Negeri - Kerjasama</option>
<option value="Area Bisnis - Kerjasama">Area Bisnis - Kerjasama</option>
<option value="Pendidikan - Kerjasama">Pendidikan - Kerjasama</option>
<option value="Pengampuan KIA">Pengampuan KIA</option>
<option value="Kebijakan - Peraturan Direktur">Kebijakan - Peraturan Direktur</option>
<option value="Kebijakan - Keputusan Direktur Utama">Kebijakan - Keputusan Direktur Utama</option>
<option value="Kebijakan - Surat Edaran">Kebijakan - Surat Edaran</option>
<option value="Kebijakan - Pengumuman">Kebijakan - Pengumuman</option>
<option value="Kerjasama - Pelayanan Kesehatan">Kerjasama - Pelayanan Kesehatan</option>
<option value="Kerjasama - Management">Kerjasama - Management</option>
<option value="Kerjasama - Pemeliharan">Kerjasama - Pemeliharan</option>
<option value="Kerjasama - Diklat">Kerjasama - Diklat</option>
<option value="Kerjasama - Luar Negeri">Kerjasama - Luar Negeri</option>
<option value="Kerjasama - Area Bisnis">Kerjasama - Area Bisnis</option>
<option value="Kerjasama - Pendidikan">Kerjasama - Pendidikan</option>
<option value="Kerjasama - Pengampuan KIA">Kerjasama- Pengampuan KIA</option>
</select>
<div class="form-text text-muted">Isi form ini bila dokumen yang diunggah merupakan dokumen <strong>akreditasi</strong>.</div>
</div>

View File

@ -781,18 +781,18 @@
<label class="form-label fw-semibold">Kategori Hukum</label>
<select class="form-select select-kat-hukum" name="data[${colCount}][kategori_hukum]" id="select_kategori_hukum_${colCount}" style="width: 350px;">
<option value="">Pilih Kategori Hukum</option>
<option value="Pedir - Kebijakan">Kebijakan - Peraturan Direktur</option>
<option value="Keputusan Dirut - Kebijakan">Kebijakan - Keputusan Direktur Utama</option>
<option value="Surat Edaran - Kebijakan">Kebijakan - Surat Edaran</option>
<option value="Pengumuman - Kebijakan">Pengumuman - Kebijakan</option>
<option value="Pelayanan Kesehatan - Kerjasama">Pelayanan Kesehatan - Kerjasama</option>
<option value="Management - Kerjasama">Management - Kerjasama</option>
<option value="Pemeliharan - Kerjasama">Pemeliharan - Kerjasama</option>
<option value="iklat - Kerjasama">Diklat - Kerjasama</option>
<option value="Luar Negeri - Kerjasama">Luar Negeri - Kerjasama</option>
<option value="Area Bisnis - Kerjasama">Area Bisnis - Kerjasama</option>
<option value="Pendidikan - Kerjasama">Pendidikan - Kerjasama</option>
<option value="Pengampuan KIA">Pengampuan KIA</option>
<option value="Kebijakan - Peraturan Direktur">Kebijakan - Peraturan Direktur</option>
<option value="Kebijakan - Keputusan Direktur Utama">Kebijakan - Keputusan Direktur Utama</option>
<option value="Kebijakan - Surat Edaran">Kebijakan - Surat Edaran</option>
<option value="Kebijakan - Pengumuman">Kebijakan - Pengumuman</option>
<option value="Kerjasama - Pelayanan Kesehatan">Kerjasama - Pelayanan Kesehatan</option>
<option value="Kerjasama - Management">Kerjasama - Management</option>
<option value="Kerjasama - Pemeliharan">Kerjasama - Pemeliharan</option>
<option value="Kerjasama - Diklat">Kerjasama - Diklat</option>
<option value="Kerjasama - Luar Negeri">Kerjasama - Luar Negeri</option>
<option value="Kerjasama - Area Bisnis">Kerjasama - Area Bisnis</option>
<option value="Kerjasama - Pendidikan">Kerjasama - Pendidikan</option>
<option value="Kerjasama - Pengampuan KIA">Kerjasama- Pengampuan KIA</option>
</select>
<div class="form-text text-muted">Isi form ini bila dokumen yang diunggah merupakan dokumen <strong>akreditasi</strong>.</div>
</div>

View File

@ -42,6 +42,21 @@
.table-fixed-height {
min-height: 70vh;
}
/* --- Warna kategori baris --- */
.row-shade {
background-color: var(--row-bg, transparent) !important;
transition: background-color 0.2s ease;
}
.legend-dot {
width: 14px;
height: 14px;
border-radius: 4px;
display: inline-block;
border: 1px solid rgba(0,0,0,0.08);
vertical-align: middle;
margin-right: 6px;
}
</style>
@section('body_main')
@ -146,6 +161,7 @@
</tbody>
</table>
</div>
<div class="mt-2 small text-muted" id="tableLegend"></div>
<div class="d-flex flex-wrap align-items-center gap-2 mt-3">
<div class="d-flex align-items-center gap-1">
<span class="small text-muted">Tampilkan</span>
@ -186,21 +202,19 @@
const tbody = document.getElementById('tableDataUmum');
const paginationEl = document.getElementById('paginationControls');
const summaryEl = document.getElementById('tableSummary');
const legendEl = document.getElementById('tableLegend');
const pageSizeSelect = document.getElementById('tablePageSize');
const unitSelect = document.getElementById('tableUnit');
const kategoriSelect = document.getElementById('tableKategori');
const kategoriHeaderMenu = document.getElementById('tableKategoriHeaderMenu');
const kategoriTypeOptions = [
{ id: 'akreditasi', label: 'Kategori Akreditasi' },
{ id: 'hukum', label: 'Kategori Hukum' },
{ id: 'lainnya', label: 'Kategori Lainnya' }
];
const searchInput = document.getElementById('tableSearch');
const searchBtn = document.getElementById('btnTableSearch');
const downloadBtn = document.getElementById('btnDownloadMultiple');
const selectedCountEl = document.getElementById('selectedCount');
const checkAllEl = document.getElementById('checkAllRows');
const selectedIds = new Set();
const colorCache = {};
const colorPalette = ['#e8f4ff', '#fff6e5', '#e9f7ef', '#f3e8ff', '#ffe6ea', '#e6f5f3'];
document.addEventListener('change', function(e){
if(!e.target.classList.contains('toggle-expired')) return;
@ -266,9 +280,11 @@
});
$('#tableKategori').on('change', function () {
const val = $(this).val() || '';
console.log(val);
tableState.kategoriType = val ? [val] : [];
tableState.page = 1;
renderTable();
fetchData();
});
}
}
@ -283,7 +299,8 @@
const single = selected.length === 1 ? selected[0] : '';
$('#tableKategori').val(single).trigger('change');
}
renderTable();
tableState.page = 1;
fetchData();
});
}
@ -302,6 +319,47 @@
return val === '1' || val === 'true' || val === 'iya' || val === 'yes';
}
function resolveKategoriFlag(item){
if(Number(item.is_akre) === 1 || item.is_akre === true || String(item.is_akre).toLowerCase() === 'true'){
return { key: 'akre', label: 'Kategori Akreditasi' };
}
if(item.kategori_hukum){
return { key: 'hukum', label: 'Kategori Hukum' };
}
const label = (item.nama_kategori || item.nama_kategori_directory || item.kategori || '').trim() || 'Kategori Lainnya';
const key = String(item.master_kategori_directory_id || label || 'lainnya');
return { key, label };
}
function pickColor(key, label){
if(colorCache[key]) return colorCache[key];
const index = Object.keys(colorCache).length % colorPalette.length;
colorCache[key] = colorPalette[index];
return colorCache[key];
}
function renderLegend(items){
if(!legendEl) return;
const map = new Map();
(items || []).forEach(item => {
const flag = resolveKategoriFlag(item);
const color = pickColor(flag.key, flag.label);
if(!map.has(flag.key)){
map.set(flag.key, { label: flag.label, color });
}
});
if(map.size === 0){
legendEl.textContent = '';
return;
}
legendEl.innerHTML = Array.from(map.values()).map(entry => `
<span class="me-3">
<span class="legend-dot" style="background:${entry.color};"></span>
<span>${entry.label}</span>
</span>
`).join('');
}
function getExpiryStatus(dateStr){
if (!dateStr) return false;
const d = new Date(dateStr);
@ -335,12 +393,15 @@
statusClass = 'bg-secondary';
}
const checked = selectedIds.has(String(item.file_directory_id)) ? 'checked' : '';
const rowClass = expiryStatus === 'expired' ? 'table-danger' : (expiryStatus === 'soon' ? 'table-warning' : '');
const kategoriFlag = resolveKategoriFlag(item);
const rowColor = pickColor(kategoriFlag.key, kategoriFlag.label);
const rowClass = expiryStatus === 'expired' ? 'table-danger' : (expiryStatus === 'soon' ? 'table-warning' : 'row-shade');
const expiryBadge = expiryStatus === 'expired'
? `<span class="badge bg-danger" style="font-size:10px;">Expired</span>`
: (expiryStatus === 'soon' ? `<span class="badge bg-warning text-dark" style="font-size:10px;">Akan Expired</span>` : '');
return `
<tr class="${rowClass}">
<tr class="${rowClass}" style="--row-bg:${rowColor};">
<td class="text-center">
<input type="checkbox"
@ -408,10 +469,10 @@
</td>
<td>
${kategoriName}
${item.nama_kategori || '-'}
</td>
<td>
${unitName}
${item.unit?.name || '-'}
</td>
<td class="text-nowrap">${formatTanggal(item.entry_at)}</td>
</tr>
@ -485,6 +546,7 @@
renderPagination(tableState.lastPage || 1);
syncCheckAllState();
updateSelectedCount();
renderLegend(pageData);
}
function applyTableSearch(){
@ -497,22 +559,36 @@
fetchData();
}
function getKategoriLabel(item){
const parts = String(item?.file || '').split('/');
return (parts[2] || item?.nama_kategori_directory || item?.kategori || '').trim();
}
function getKategoriId(item){
const label = getKategoriLabel(item);
return String(item?.master_kategori_directory_id || label);
}
function getKategoriOptionsFromData(){
const seen = new Map();
(tableState.data || []).forEach(item => {
const label = getKategoriLabel(item);
if(!label) return;
const id = getKategoriId(item);
if(!seen.has(id)){
seen.set(id, { id, label });
}
});
return Array.from(seen.values()).sort((a,b) => a.label.localeCompare(b.label));
}
function filterByKategoriType(items){
const types = tableState.kategoriType || [];
const types = (tableState.kategoriType || []).map(v => String(v));
if (!types.length) return items;
return items.filter(item => {
return types.some(type => {
if (type === 'akreditasi') {
return item.is_akre === true || item.is_akre === 1 || item.is_akre === '1';
}
if (type === 'hukum') {
return !!item.kategori_hukum;
}
if (type === 'lainnya') {
return !!item.master_kategori_directory_id;
}
return false;
});
const catId = getKategoriId(item);
const catLabel = getKategoriLabel(item);
return types.includes(catId) || types.includes(catLabel);
});
}
@ -520,8 +596,13 @@
if (!kategoriHeaderMenu) return;
const list = kategoriHeaderMenu.querySelector('.kategori-header-list');
if (!list) return;
const options = getKategoriOptionsFromData();
const selected = (tableState.kategoriType || []).map(v => String(v));
list.innerHTML = kategoriTypeOptions.map(opt => {
if(options.length === 0){
list.innerHTML = '<div class=\"dropdown-item text-muted\">Tidak ada kategori</div>';
return;
}
list.innerHTML = options.map(opt => {
const checked = selected.includes(opt.id) ? 'checked' : '';
return `
<label class="dropdown-item d-flex align-items-center gap-2">
@ -543,12 +624,16 @@
if (tableState.unit && tableState.unit.length > 0) {
tableState.unit.forEach(id => params.append('unit[]', id));
}
if (tableState.kategoriType && tableState.kategoriType.length > 0) {
tableState.kategoriType.forEach(id => params.append('kategori[]', id));
}
fetch(`/datatable-umum?${params.toString()}`)
.then(response => response.json())
.then(data => {
tableState.data = data?.data || [];
tableState.lastPage = data?.pagination?.last_page || 1;
tableState.total = data?.pagination?.total || 0;
renderKategoriHeaderOptions();
renderTable();
})
.catch(error => {

View File

@ -41,6 +41,21 @@
.table-fixed-height {
min-height: 70vh;
}
/* --- Warna kategori baris --- */
.row-shade {
background-color: var(--row-bg, transparent) !important;
transition: background-color 0.2s ease;
}
.legend-dot {
width: 14px;
height: 14px;
border-radius: 4px;
display: inline-block;
border: 1px solid rgba(0,0,0,0.08);
vertical-align: middle;
margin-right: 6px;
}
</style>
@section('body_main')
<div class="row">
@ -141,6 +156,7 @@
</tbody>
</table>
</div>
<div class="mt-2 small text-muted" id="tableLegend"></div>
<div class="d-flex flex-wrap align-items-center gap-2 mt-3">
<div class="d-flex align-items-center gap-1">
<span class="small text-muted">Tampilkan</span>
@ -187,21 +203,19 @@
const tbody = document.getElementById('tableDataUnit');
const paginationEl = document.getElementById('paginationControls');
const summaryEl = document.getElementById('tableSummary');
const legendEl = document.getElementById('tableLegend');
const pageSizeSelect = document.getElementById('tablePageSize');
const unitSelect = document.getElementById('tableUnit');
const kategoriSelect = document.getElementById('tableKategori');
const kategoriHeaderMenu = document.getElementById('tableKategoriHeaderMenu');
const kategoriTypeOptions = [
{ id: 'akreditasi', label: 'Kategori Akreditasi' },
{ id: 'hukum', label: 'Kategori Hukum' },
{ id: 'lainnya', label: 'Kategori Lainnya' }
];
const searchInput = document.getElementById('tableSearch');
const searchBtn = document.getElementById('btnTableSearch');
const downloadBtn = document.getElementById('btnDownloadMultiple');
const selectedCountEl = document.getElementById('selectedCount');
const checkAllEl = document.getElementById('checkAllRows');
const selectedIds = new Set();
const colorCache = {};
const colorPalette = ['#e8f4ff', '#fff6e5', '#e9f7ef', '#f3e8ff', '#ffe6ea', '#e6f5f3'];
document.addEventListener('change', function(e){
if(!e.target.classList.contains('toggle-expired')) return;
@ -267,7 +281,7 @@
const val = $(this).val() || '';
tableState.kategoriType = val ? [val] : [];
tableState.page = 1;
renderTable();
fetchData();
});
}
}
@ -282,7 +296,8 @@
const single = selected.length === 1 ? selected[0] : '';
$('#tableKategori').val(single).trigger('change');
}
renderTable();
tableState.page = 1;
fetchData();
});
}
@ -434,6 +449,47 @@
return val === '1' || val === 'true' || val === 'iya' || val === 'yes';
}
function resolveKategoriFlag(item){
if(Number(item.is_akre) === 1 || item.is_akre === true || String(item.is_akre).toLowerCase() === 'true'){
return { key: 'akre', label: 'Kategori Akreditasi' };
}
if(item.kategori_hukum){
return { key: 'hukum', label: 'Kategori Hukum' };
}
const label = (item.nama_kategori || item.nama_kategori_directory || item.kategori || '').trim() || 'Kategori Lainnya';
const key = String(item.master_kategori_directory_id || label || 'lainnya');
return { key, label };
}
function pickColor(key, label){
if(colorCache[key]) return colorCache[key];
const index = Object.keys(colorCache).length % colorPalette.length;
colorCache[key] = colorPalette[index];
return colorCache[key];
}
function renderLegend(items){
if(!legendEl) return;
const map = new Map();
(items || []).forEach(item => {
const flag = resolveKategoriFlag(item);
const color = pickColor(flag.key, flag.label);
if(!map.has(flag.key)){
map.set(flag.key, { label: flag.label, color });
}
});
if(map.size === 0){
legendEl.textContent = '';
return;
}
legendEl.innerHTML = Array.from(map.values()).map(entry => `
<span class="me-3">
<span class="legend-dot" style="background:${entry.color};"></span>
<span>${entry.label}</span>
</span>
`).join('');
}
function getExpiryStatus(dateStr){
if (!dateStr) return false;
const d = new Date(dateStr);
@ -467,12 +523,14 @@
statusClass = 'bg-secondary';
}
const checked = selectedIds.has(String(item.file_directory_id)) ? 'checked' : '';
const rowClass = expiryStatus === 'expired' ? 'table-danger' : (expiryStatus === 'soon' ? 'table-warning' : '');
const kategoriFlag = resolveKategoriFlag(item);
const rowColor = pickColor(kategoriFlag.key, kategoriFlag.label);
const rowClass = expiryStatus === 'expired' ? 'table-danger' : (expiryStatus === 'soon' ? 'table-warning' : 'row-shade');
const expiryBadge = expiryStatus === 'expired'
? `<span class="badge bg-danger" style="font-size:10px;">Expired</span>`
: (expiryStatus === 'soon' ? `<span class="badge bg-warning text-dark" style="font-size:10px;">Akan Expired</span>` : '');
return `
<tr class="${rowClass}">
<tr class="${rowClass}" style="--row-bg:${rowColor};">
<td class="text-center">
<input type="checkbox"
class="form-check-input row-check"
@ -525,10 +583,10 @@
</div>
</td>
<td>
${kategoriName}
${item.nama_kategori || '-'}
</td>
<td>
${unitName}
${item.unit?.name || '-'}
</td>
<td class="text-nowrap">${formatTanggal(item.entry_at)}</td>
<td class="text-nowrap">${item.pegawai_nama_entry || '-'}</td>
@ -603,6 +661,7 @@
renderPagination(tableState.lastPage || 1);
syncCheckAllState();
updateSelectedCount();
renderLegend(pageData);
}
function applyTableSearch(){
@ -615,22 +674,36 @@
fetchData();
}
function getKategoriLabel(item){
const parts = String(item?.file || '').split('/');
return (item?.nama_kategori || parts[2] || item?.nama_kategori_directory || item?.kategori || '').trim();
}
function getKategoriId(item){
const label = getKategoriLabel(item);
return String(item?.master_kategori_directory_id || label);
}
function getKategoriOptionsFromData(){
const seen = new Map();
(tableState.data || []).forEach(item => {
const label = getKategoriLabel(item);
if(!label) return;
const id = getKategoriId(item);
if(!seen.has(id)){
seen.set(id, { id, label });
}
});
return Array.from(seen.values()).sort((a,b) => a.label.localeCompare(b.label));
}
function filterByKategoriType(items){
const types = tableState.kategoriType || [];
const types = (tableState.kategoriType || []).map(v => String(v));
if (!types.length) return items;
return items.filter(item => {
return types.some(type => {
if (type === 'akreditasi') {
return item.is_akre === true || item.is_akre === 1 || item.is_akre === '1';
}
if (type === 'hukum') {
return !!item.kategori_hukum;
}
if (type === 'lainnya') {
return !!item.master_kategori_directory_id;
}
return false;
});
const catId = getKategoriId(item);
const catLabel = getKategoriLabel(item);
return types.includes(catId) || types.includes(catLabel);
});
}
@ -638,11 +711,16 @@
if (!kategoriHeaderMenu) return;
const list = kategoriHeaderMenu.querySelector('.kategori-header-list');
if (!list) return;
const options = getKategoriOptionsFromData();
const selected = (tableState.kategoriType || []).map(v => String(v));
list.innerHTML = kategoriTypeOptions.map(opt => {
if(options.length === 0){
list.innerHTML = '<div class=\"dropdown-item text-muted\">Tidak ada kategori</div>';
return;
}
list.innerHTML = options.map(opt => {
const checked = selected.includes(opt.id) ? 'checked' : '';
return `
<label class="dropdown-item d-flex align-items-center gap-2">
<label class="dropdown-item d-flex align-items-center gap-2 kategori-option" data-kat="${opt.id}">
<input type="checkbox" class="form-check-input m-0" value="${opt.id}" ${checked}>
<span>${opt.label}</span>
</label>
@ -650,6 +728,27 @@
}).join('');
}
if (kategoriHeaderMenu) {
kategoriHeaderMenu.addEventListener('click', function(e){
const option = e.target.closest('.kategori-option');
if (!option) return;
const id = option.getAttribute('data-kat');
const checkbox = option.querySelector('input[type="checkbox"]');
if(checkbox){
checkbox.checked = !checkbox.checked;
const event = new Event('change', { bubbles: true });
checkbox.dispatchEvent(event);
}else{
tableState.kategoriType = [id];
if (kategoriSelect && window.$ && $.fn.select2) {
$('#tableKategori').val(id).trigger('change');
}
tableState.page = 1;
fetchData();
}
}, true);
}
function fetchData(){
if(summaryEl) summaryEl.textContent = 'Memuat data...';
@ -661,12 +760,16 @@
if (tableState.unit && tableState.unit.length > 0) {
tableState.unit.forEach(id => params.append('unit[]', id));
}
if (tableState.kategoriType && tableState.kategoriType.length > 0) {
tableState.kategoriType.forEach(id => params.append('kategori[]', id));
}
fetch(`/data-internal?${params.toString()}`)
.then(response => response.json())
.then(data => {
tableState.data = data?.data || [];
tableState.lastPage = data?.pagination?.last_page || 1;
tableState.total = data?.pagination?.total || 0;
renderKategoriHeaderOptions();
renderTable();
})
.catch(error => {
@ -985,18 +1088,18 @@
<label class="form-label fw-semibold">Kategori Hukum</label>
<select class="form-select select-kat-hukum" name="data[${colCount}][kategori_hukum]" id="select_kategori_hukum_${colCount}" style="width: 350px;">
<option value="" disabled selected>Pilih Kategori Hukum</option>
<option value="Pedir - Kebijakan">Pedir - Kebijakan</option>
<option value="Keputusan Dirut - Kebijakan">Keputusan Dirut - Kebijakan</option>
<option value="Surat Edaran - Kebijakan">Surat Edaran - Kebijakan</option>
<option value="Pengumuman - Kebijakan">Pengumuman - Kebijakan</option>
<option value="Pelayanan Kesehatan - Kerjasama">Pelayanan Kesehatan - Kerjasama</option>
<option value="Management - Kerjasama">Management - Kerjasama</option>
<option value="Pemeliharan - Kerjasama">Pemeliharan - Kerjasama</option>
<option value="iklat - Kerjasama">Diklat - Kerjasama</option>
<option value="Luar Negeri - Kerjasama">Luar Negeri - Kerjasama</option>
<option value="Area Bisnis - Kerjasama">Area Bisnis - Kerjasama</option>
<option value="Pendidikan - Kerjasama">Pendidikan - Kerjasama</option>
<option value="Pengampuan KIA">Pengampuan KIA</option>
<option value="Kebijakan - Peraturan Direktur">Kebijakan - Peraturan Direktur</option>
<option value="Kebijakan - Keputusan Direktur Utama">Kebijakan - Keputusan Direktur Utama</option>
<option value="Kebijakan - Surat Edaran">Kebijakan - Surat Edaran</option>
<option value="Kebijakan - Pengumuman">Kebijakan - Pengumuman</option>
<option value="Kerjasama - Pelayanan Kesehatan">Kerjasama - Pelayanan Kesehatan</option>
<option value="Kerjasama - Management">Kerjasama - Management</option>
<option value="Kerjasama - Pemeliharan">Kerjasama - Pemeliharan</option>
<option value="Kerjasama - Diklat">Kerjasama - Diklat</option>
<option value="Kerjasama - Luar Negeri">Kerjasama - Luar Negeri</option>
<option value="Kerjasama - Area Bisnis">Kerjasama - Area Bisnis</option>
<option value="Kerjasama - Pendidikan">Kerjasama - Pendidikan</option>
<option value="Kerjasama - Pengampuan KIA">Kerjasama- Pengampuan KIA</option>
</select>
<div class="form-text text-muted">Isi form ini bila dokumen yang diunggah merupakan dokumen <strong>akreditasi</strong>.</div>
</div>

View File

@ -87,18 +87,18 @@
<label class="form-label fw-semibold">Kategori Hukum</label>
<select class="form-select select-kat-hukum" name="data[0][kategori_hukum]" id="select_kategori_hukum_0" style="width: 350px;">
<option value="">Pilih Kategori Hukum</option>
<option value="Pedir - Kebijakan">Pedir - Kebijakan</option>
<option value="Keputusan Dirut - Kebijakan">Keputusan Dirut - Kebijakan</option>
<option value="Surat Edaran - Kebijakan">Surat Edaran - Kebijakan</option>
<option value="Pengumuman - Kebijakan">Pengumuman - Kebijakan</option>
<option value="Pelayanan Kesehatan - Kerjasama">Pelayanan Kesehatan - Kerjasama</option>
<option value="Management - Kerjasama">Management - Kerjasama</option>
<option value="Pemeliharan - Kerjasama">Pemeliharan - Kerjasama</option>
<option value="iklat - Kerjasama">Diklat - Kerjasama</option>
<option value="Luar Negeri - Kerjasama">Luar Negeri - Kerjasama</option>
<option value="Area Bisnis - Kerjasama">Area Bisnis - Kerjasama</option>
<option value="Pendidikan - Kerjasama">Pendidikan - Kerjasama</option>
<option value="Pengampuan KIA">Pengampuan KIA</option>
<option value="Kebijakan - Peraturan Direktur">Kebijakan - Peraturan Direktur</option>
<option value="Kebijakan - Keputusan Direktur Utama">Kebijakan - Keputusan Direktur Utama</option>
<option value="Kebijakan - Surat Edaran">Kebijakan - Surat Edaran</option>
<option value="Kebijakan - Pengumuman">Kebijakan - Pengumuman</option>
<option value="Kerjasama - Pelayanan Kesehatan">Kerjasama - Pelayanan Kesehatan</option>
<option value="Kerjasama - Management">Kerjasama - Management</option>
<option value="Kerjasama - Pemeliharan">Kerjasama - Pemeliharan</option>
<option value="Kerjasama - Diklat">Kerjasama - Diklat</option>
<option value="Kerjasama - Luar Negeri">Kerjasama - Luar Negeri</option>
<option value="Kerjasama - Area Bisnis">Kerjasama - Area Bisnis</option>
<option value="Kerjasama - Pendidikan">Kerjasama - Pendidikan</option>
<option value="Kerjasama - Pengampuan KIA">Kerjasama- Pengampuan KIA</option>
</select>
<div class="form-text text-muted">Isi form ini bila dokumen yang diunggah merupakan dokumen <strong>akreditasi</strong>.</div>
</div>

View File

@ -80,19 +80,19 @@
<div class="col-md-4">
<label class="form-label fw-semibold">Kategori Hukum</label>
<select class="form-select select-kat-hukum" name="kategori_hukum" id="edit_kategori_hukum" style="width: 350px;">
<option value="">Pilih Kategori Hukum</option>
<option value="Pedir - Kebijakan">Pedir - Kebijakan</option>
<option value="Keputusan Dirut - Kebijakan">Keputusan Dirut - Kebijakan</option>
<option value="Surat Edaran - Kebijakan">Surat Edaran - Kebijakan</option>
<option value="Pengumuman - Kebijakan">Pengumuman - Kebijakan</option>
<option value="Pelayanan Kesehatan - Kerjasama">Pelayanan Kesehatan - Kerjasama</option>
<option value="Management - Kerjasama">Management - Kerjasama</option>
<option value="Pemeliharan - Kerjasama">Pemeliharan - Kerjasama</option>
<option value="iklat - Kerjasama">Diklat - Kerjasama</option>
<option value="Luar Negeri - Kerjasama">Luar Negeri - Kerjasama</option>
<option value="Area Bisnis - Kerjasama">Area Bisnis - Kerjasama</option>
<option value="Pendidikan - Kerjasama">Pendidikan - Kerjasama</option>
<option value="Pengampuan KIA">Pengampuan KIA</option>
<option value="">Pilih Kategori Hukum</option>
<option value="Kebijakan - Peraturan Direktur">Kebijakan - Peraturan Direktur</option>
<option value="Kebijakan - Keputusan Direktur Utama">Kebijakan - Keputusan Direktur Utama</option>
<option value="Kebijakan - Surat Edaran">Kebijakan - Surat Edaran</option>
<option value="Kebijakan - Pengumuman">Kebijakan - Pengumuman</option>
<option value="Kerjasama - Pelayanan Kesehatan">Kerjasama - Pelayanan Kesehatan</option>
<option value="Kerjasama - Management">Kerjasama - Management</option>
<option value="Kerjasama - Pemeliharan">Kerjasama - Pemeliharan</option>
<option value="Kerjasama - Diklat">Kerjasama - Diklat</option>
<option value="Kerjasama - Luar Negeri">Kerjasama - Luar Negeri</option>
<option value="Kerjasama - Area Bisnis">Kerjasama - Area Bisnis</option>
<option value="Kerjasama - Pendidikan">Kerjasama - Pendidikan</option>
<option value="Kerjasama - Pengampuan KIA">Kerjasama- Pengampuan KIA</option>
</select>
<div class="form-text text-muted">Isi form ini bila dokumen yang diunggah merupakan dokumen <strong>akreditasi</strong>.</div>
</div>