From cf427020d9d484cad9cc1ead4cc5891e91ab4b7f Mon Sep 17 00:00:00 2001 From: Jokoprasetio Date: Thu, 5 Mar 2026 03:39:31 +0700 Subject: [PATCH] update form akreditasi --- public/js/dashboard/functions.js | 6 +- public/js/pengajuanFile/index.js | 305 +++++++--------- resources/views/dashboard/index.blade.php | 1 - .../views/dashboard/modal/create.blade.php | 96 ------ resources/views/dataUmum/index.blade.php | 139 -------- .../views/dataUmum/modal/create.blade.php | 119 ------- resources/views/dataUnit/index.blade.php | 325 +++++++----------- .../views/dataUnit/modal/create.blade.php | 89 +++-- 8 files changed, 295 insertions(+), 785 deletions(-) delete mode 100644 resources/views/dashboard/modal/create.blade.php delete mode 100644 resources/views/dataUmum/modal/create.blade.php diff --git a/public/js/dashboard/functions.js b/public/js/dashboard/functions.js index a8f6c50..9e0dad0 100644 --- a/public/js/dashboard/functions.js +++ b/public/js/dashboard/functions.js @@ -177,7 +177,7 @@ function addForm(){ -
+
-
+
{ }); } - function buildRow(item){ + function buildRow(item){ console.log(item); - + let tanggal = item.entry_at ? formatTanggal(item.entry_at) : '-'; let tanggalExp = item.tgl_expired ? formatTanggal(item.tgl_expired) : '-'; let tanggalTerbit = item.tanggal_terbit ? formatTanggal(item.tanggal_terbit) : '-'; @@ -118,13 +118,13 @@ document.addEventListener('DOMContentLoaded', () => { data-no_dokumen="${item.no_dokumen || '-'}" data-tanggal_terbit="${item.tanggal_terbit || '-'}" data-permission_file="${item.permission_file || '-'}">${item.nama_dokumen} - ${item.is_akre ? `Dokumen akreditasi` : + ${item.is_akre ? `Dokumen akreditasi` : ` ${item.folder || '-'} ${item.part || '-'} ` } - + ${tanggalTerbit} ${tanggalExp} ${tanggal} @@ -583,10 +583,12 @@ document.addEventListener('DOMContentLoaded', () => { $(formCreate).find('.file-name').addClass('d-none').text(''); } resetAkreFields(0); + enableAkreFields(0); } let akreData = []; let akreLoaded = false; + let akreFlat = []; function loadAkreData(){ if(akreLoaded) return Promise.resolve(akreData); @@ -594,66 +596,47 @@ document.addEventListener('DOMContentLoaded', () => { .then(res => res.json()) .then(data => { akreData = Array.isArray(data) ? data : []; + akreFlat = []; akreLoaded = true; return akreData; }) .catch(() => { akreData = []; + akreFlat = []; akreLoaded = true; return akreData; }); } - function fillAkreType(selectEl){ + function getAkreFlat(){ + if(akreFlat.length) return akreFlat; + akreFlat = (akreData || []).flatMap(type => { + const segments = Array.isArray(type.segment) ? type.segment : []; + return segments.flatMap(seg => { + const children = Array.isArray(seg.turunan) ? seg.turunan : []; + return children.map(child => ({ + value: `${type.name}/${seg.name}/${child.name}`, + label: `${type.name} / ${seg.name} / ${child.name}`, + type: type.name, + segment: seg.name, + item: child.name + })); + }); + }); + return akreFlat; + } + + function fillAkreSelect(selectEl){ if(!selectEl) return; - selectEl.innerHTML = ''; - akreData.forEach(item => { + selectEl.innerHTML = ''; + getAkreFlat().forEach(optData => { const opt = document.createElement('option'); - opt.value = item.name; - opt.textContent = item.name; + opt.value = optData.value; + opt.textContent = optData.label; selectEl.appendChild(opt); }); } - function fillAkreSegment(selectEl, typeName){ - if(!selectEl) return; - selectEl.innerHTML = ''; - const typeItem = akreData.find(item => item.name === typeName); - if(typeItem && Array.isArray(typeItem.segment) && typeItem.segment.length){ - typeItem.segment.forEach(seg => { - const opt = document.createElement('option'); - opt.value = seg.name; - opt.textContent = seg.name; - selectEl.appendChild(opt); - }); - selectEl.disabled = false; - selectEl.required = true; - }else{ - selectEl.disabled = true; - selectEl.required = false; - } - } - - function fillAkreItem(selectEl, typeName, segmentName){ - if(!selectEl) return; - selectEl.innerHTML = ''; - const typeItem = akreData.find(item => item.name === typeName); - const segmentItem = typeItem?.segment?.find(seg => seg.name === segmentName); - if(segmentItem && Array.isArray(segmentItem.turunan) && segmentItem.turunan.length){ - segmentItem.turunan.forEach(child => { - const opt = document.createElement('option'); - opt.value = child.name; - opt.textContent = child.name; - selectEl.appendChild(opt); - }); - selectEl.disabled = false; - selectEl.required = true; - }else{ - selectEl.disabled = true; - selectEl.required = false; - } - } - function setKategoriRequired(index, isRequired){ const katSelect = document.getElementById(`select_kategori_${index}`); if (!katSelect) return; @@ -665,67 +648,57 @@ document.addEventListener('DOMContentLoaded', () => { } function resetAkreFields(index){ - const typeWrap = document.getElementById(`akre_type_wrap_${index}`); - const segmentWrap = document.getElementById(`akre_segment_wrap_${index}`); - const itemWrap = document.getElementById(`akre_item_wrap_${index}`); - const typeSelect = document.getElementById(`akre_type_${index}`); - const segmentSelect = document.getElementById(`akre_segment_${index}`); - const itemSelect = document.getElementById(`akre_item_${index}`); - if(typeWrap) typeWrap.classList.add('d-none'); - if(segmentWrap) segmentWrap.classList.add('d-none'); - if(itemWrap) itemWrap.classList.add('d-none'); - if(typeSelect){ - typeSelect.value = ''; - typeSelect.disabled = true; - typeSelect.required = false; + const selectEl = document.getElementById(`akre_select_${index}`); + const typeInput = document.getElementById(`akre_type_${index}`); + const segmentInput = document.getElementById(`akre_segment_${index}`); + const itemInput = document.getElementById(`akre_item_${index}`); + if(selectEl){ + selectEl.value = ''; + if(window.$ && $.fn.select2) $(selectEl).val(null).trigger('change'); } - if(segmentSelect){ - segmentSelect.value = ''; - segmentSelect.disabled = true; - segmentSelect.required = false; - } - if(itemSelect){ - itemSelect.value = ''; - itemSelect.disabled = true; - itemSelect.required = false; - } - setKategoriRequired(index, true); + if(typeInput) typeInput.value = ''; + if(segmentInput) segmentInput.value = ''; + if(itemInput) itemInput.value = ''; + setKategoriRequired(index, false); } function enableAkreFields(index){ - const typeWrap = document.getElementById(`akre_type_wrap_${index}`); - const segmentWrap = document.getElementById(`akre_segment_wrap_${index}`); - const itemWrap = document.getElementById(`akre_item_wrap_${index}`); - const typeSelect = document.getElementById(`akre_type_${index}`); - const segmentSelect = document.getElementById(`akre_segment_${index}`); - const itemSelect = document.getElementById(`akre_item_${index}`); - if(typeWrap) typeWrap.classList.remove('d-none'); - if(segmentWrap) segmentWrap.classList.remove('d-none'); - if(itemWrap) itemWrap.classList.remove('d-none'); - if(typeSelect){ - typeSelect.disabled = false; - typeSelect.required = true; - } - if(segmentSelect){ - segmentSelect.disabled = true; - segmentSelect.required = true; - } - if(itemSelect){ - itemSelect.disabled = true; - itemSelect.required = true; + const selectEl = document.getElementById(`akre_select_${index}`); + if(selectEl){ + selectEl.disabled = false; + selectEl.required = true; } setKategoriRequired(index, false); loadAkreData().then(() => { - fillAkreType(typeSelect); - if(typeSelect?.value){ - fillAkreSegment(segmentSelect, typeSelect.value); - } - if(typeSelect?.value && segmentSelect?.value){ - fillAkreItem(itemSelect, typeSelect.value, segmentSelect.value); + fillAkreSelect(selectEl); + if(window.$ && $.fn.select2){ + $(selectEl).select2({ + dropdownParent: $('#modalCreateFile'), + placeholder: 'Pilih Instrumen' + }); } }); } + function initKategoriSelect2(index){ + if(!window.$ || !$.fn.select2) return; + const katSelect = $(`#select_kategori_${index}`); + const hukumSelect = $(`#select_kategori_hukum_${index}`); + if(katSelect.length){ + katSelect.select2({ + dropdownParent: $('#modalCreateFile'), + placeholder:'Pilih Kategori' + }); + } + if(hukumSelect.length){ + hukumSelect.select2({ + dropdownParent: $('#modalCreateFile'), + placeholder:'Pilih Kategori Hukum', + allowClear:true + }); + } + } + function selectOptionUnitKerjaV1(localCol){ const selectUnit = $(`#select_id_unit_kerja_${localCol}`); const selectSubUnit = $(`#select_id_sub_unit_kerja_${localCol}`); @@ -791,7 +764,7 @@ document.addEventListener('DOMContentLoaded', () => {
-
+
-
+
-
- - -
+
@@ -846,7 +810,7 @@ document.addEventListener('DOMContentLoaded', () => { type="date" name="data[${colCount}][date_active]">
-
+
{ name="data[${colCount}][tgl_expired]" disabled>
-
+
@@ -889,53 +853,42 @@ document.addEventListener('DOMContentLoaded', () => {
- -
-
- - -
-
- - -
-
-
-
- - + + + + + +
Isi form ini bila dokumen yang diunggah merupakan dokumen akreditasi.
-
- - + + + + + + + + + + + + + +
Isi form ini bila dokumen yang diunggah merupakan dokumen akreditasi.
-
- - + + ${katOptions}
@@ -954,7 +907,9 @@ document.addEventListener('DOMContentLoaded', () => {
`; col.insertAdjacentHTML('beforeend', html); selectOptionUnitKerjaV1(colCount); - setKategoriRequired(colCount, true); + initKategoriSelect2(colCount); + enableAkreFields(colCount); + setKategoriRequired(colCount, false); colCount++; } @@ -966,6 +921,8 @@ document.addEventListener('DOMContentLoaded', () => { if (formCreate) { const select0 = $('#select_id_unit_kerja_0'); if (select0.length) selectOptionUnitKerjaV1(0); + initKategoriSelect2(0); + enableAkreFields(0); formCreate.addEventListener('submit', (e) => { e.preventDefault(); @@ -1019,38 +976,18 @@ document.addEventListener('DOMContentLoaded', () => { } document.addEventListener('change', function(e){ - if(e.target.classList.contains('akre-type')){ + if(e.target.classList.contains('akre-select')){ const id = e.target.id || ''; const idx = id.split('_').pop(); - const segmentSelect = document.getElementById(`akre_segment_${idx}`); - const itemSelect = document.getElementById(`akre_item_${idx}`); - if(segmentSelect) fillAkreSegment(segmentSelect, e.target.value); - if(itemSelect){ - itemSelect.innerHTML = ''; - itemSelect.disabled = true; - } + const [typeVal = '', segmentVal = '', itemVal = ''] = (e.target.value || '').split('/'); + const typeInput = document.getElementById(`akre_type_${idx}`); + const segmentInput = document.getElementById(`akre_segment_${idx}`); + const itemInput = document.getElementById(`akre_item_${idx}`); + if(typeInput) typeInput.value = typeVal; + if(segmentInput) segmentInput.value = segmentVal; + if(itemInput) itemInput.value = itemVal; return; } - - if(e.target.classList.contains('akre-segment')){ - const id = e.target.id || ''; - const idx = id.split('_').pop(); - const typeSelect = document.getElementById(`akre_type_${idx}`); - const itemSelect = document.getElementById(`akre_item_${idx}`); - fillAkreItem(itemSelect, typeSelect?.value || '', e.target.value); - return; - } - - if(e.target.matches('input[type="radio"][name$="[is_akre]"]')){ - const name = e.target.getAttribute('name') || ''; - const match = name.match(/data\[(\d+)\]\[is_akre\]/); - const idx = match ? match[1] : '0'; - if(e.target.value === '1'){ - enableAkreFields(idx); - }else{ - resetAkreFields(idx); - } - } }); }); document.addEventListener('click', function(e){ diff --git a/resources/views/dashboard/index.blade.php b/resources/views/dashboard/index.blade.php index cccb179..80915a1 100644 --- a/resources/views/dashboard/index.blade.php +++ b/resources/views/dashboard/index.blade.php @@ -154,7 +154,6 @@
-@include('dashboard.modal.create') @include('dashboard.modal.view')