diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index 0e6283b..b09025b 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -62,7 +62,12 @@ class DashboardController extends Controller ->when($subArray, fn($q) => $q->whereIn('id_sub_unit_kerja', $subArray)) ->when($katArray, fn($q) => $q->whereIn('master_kategori_directory_id', $katArray)) ->when($klaArray, fn($q) => $q->whereIn('master_klasifikasi_directory_id', $klaArray)) - ->when($keyword, fn($q) => $q->where('file', 'ilike', "%{$keyword}%")->orWhere('pegawai_nama_entry', 'ilike', "%{$keyword}%")) + ->when($keyword, fn($q) => + $q->where(function($query) use ($keyword) { + $query->where('file', 'ilike', "%{$keyword}%") + ->orWhere('pegawai_nama_entry', 'ilike', "%{$keyword}%"); + }) + ) ]) ]) ->select('id', 'name') @@ -87,8 +92,10 @@ class DashboardController extends Controller ->with([ // muat relasi 'subUnitKerja' => fn($q) => $q->with([ // sub-unit 'fileDirectory' => fn($f) => $f->when($keyword, fn($q) => - $q->where('file', 'ilike', "%{$keyword}%") - ->orWhere('pegawai_nama_entry', 'ilike', "%{$keyword}%") + $q->where(function($query) use ($keyword) { + $query->where('file', 'ilike', "%{$keyword}%") + ->orWhere('pegawai_nama_entry', 'ilike', "%{$keyword}%"); + }) ) ]) ]) @@ -106,7 +113,10 @@ class DashboardController extends Controller 'subUnitKerja' => fn($q) => $q->where('id', $authSub) ->with([ // 2. file-directory + filter keyword 'fileDirectory' => fn($f) => $f->when($keyword, fn($q) => - $q->where('file', 'like', "%{$keyword}%")->orWhere('pegawai_nama_entry', 'ilike', "%{$keyword}%") + $q->where(function($query) use ($keyword) { + $query->where('file', 'ilike', "%{$keyword}%") + ->orWhere('pegawai_nama_entry', 'ilike', "%{$keyword}%"); + }) ) ]) ]) @@ -130,26 +140,30 @@ class DashboardController extends Controller $datas = request()->input('data'); $result = []; foreach($datas as $index => $value){ - $file = request()->file("data.$index.file"); - list($id_unit_kerja, $nama_unit_kerja) = explode('/', $value['id_unit_kerja'],2); - list($id_sub_unit_kerja, $nama_sub_unit_kerja) = explode('/', $value['id_sub_unit_kerja'],2); - list($master_kategori_directory_id, $nama_kategori) = explode('/', $value['master_kategori_directory_id'],2); - list($klasifikasi, $nama_klasifikasi) = explode('/', $value['klasifikasi'],2); - $payload = [ - 'master_klasifikasi_directory_id' => $klasifikasi, - 'id_unit_kerja' => $id_unit_kerja, - 'id_sub_unit_kerja' => $id_sub_unit_kerja, - 'master_kategori_directory_id' => $master_kategori_directory_id, - 'pegawai_id_entry' => auth()->user()->id ?? 1, - 'pegawai_nama_entry' => auth()->user()->namalengkap ?? 'tes', - ]; - if($file){ - $imageName = $file->getClientOriginalName(); - $path = "{$nama_unit_kerja}/{$nama_sub_unit_kerja}/{$nama_kategori}/{$nama_klasifikasi}"; - $file->storeAs($path, $imageName, 'file_directory'); - $payload['file'] =$path .'/' .$imageName; + $files = request()->file("data.fileUpload$index"); + if(!empty($files)){ + foreach ($files['file'] as $file) { + list($id_unit_kerja, $nama_unit_kerja) = explode('/', $value['id_unit_kerja'],2); + list($id_sub_unit_kerja, $nama_sub_unit_kerja) = explode('/', $value['id_sub_unit_kerja'],2); + list($master_kategori_directory_id, $nama_kategori) = explode('/', $value['master_kategori_directory_id'],2); + list($klasifikasi, $nama_klasifikasi) = explode('/', $value['klasifikasi'],2); + $payload = [ + 'master_klasifikasi_directory_id' => $klasifikasi, + 'id_unit_kerja' => $id_unit_kerja, + 'id_sub_unit_kerja' => $id_sub_unit_kerja, + 'master_kategori_directory_id' => $master_kategori_directory_id, + 'pegawai_id_entry' => auth()->user()->dataUser->id ?? 1, + 'pegawai_nama_entry' => auth()->user()->dataUser->namalengkap ?? 'tes', + ]; + if($file){ + $imageName = $file->getClientOriginalName(); + $path = "{$nama_unit_kerja}/{$nama_sub_unit_kerja}/{$nama_kategori}/{$nama_klasifikasi}"; + $file->storeAs($path, $imageName, 'file_directory'); + $payload['file'] =$path .'/' .$imageName; + } + FileDirectory::create($payload); + } } - FileDirectory::create($payload); } DB::connection('dbDirectory')->commit(); return response()->json([ diff --git a/public/file/Instalasi Sistem Informasi Manajemen Rumah Sakit/Instalasi Sistem Informasi Manajemen Rumah Sakit/Juknis/Medis/PAKET 1 (NASI PUTIH, AYAM TALIWANG, TUMIS KANGKUNG, SAMBAL) (5).jpg b/public/file/Instalasi Sistem Informasi Manajemen Rumah Sakit/Instalasi Sistem Informasi Manajemen Rumah Sakit/Juknis/Medis/PAKET 1 (NASI PUTIH, AYAM TALIWANG, TUMIS KANGKUNG, SAMBAL) (5).jpg deleted file mode 100644 index 03dee42..0000000 Binary files a/public/file/Instalasi Sistem Informasi Manajemen Rumah Sakit/Instalasi Sistem Informasi Manajemen Rumah Sakit/Juknis/Medis/PAKET 1 (NASI PUTIH, AYAM TALIWANG, TUMIS KANGKUNG, SAMBAL) (5).jpg and /dev/null differ diff --git a/public/file/Instalasi Sistem Informasi Manajemen Rumah Sakit/Instalasi Sistem Informasi Manajemen Rumah Sakit/Juknis/Medis/PAKET 1 (NASI PUTIH, AYAM TALIWANG, TUMIS KANGKUNG, SAMBAL) (7).jpg b/public/file/Instalasi Sistem Informasi Manajemen Rumah Sakit/Instalasi Sistem Informasi Manajemen Rumah Sakit/Juknis/Medis/PAKET 1 (NASI PUTIH, AYAM TALIWANG, TUMIS KANGKUNG, SAMBAL) (7).jpg deleted file mode 100644 index 03dee42..0000000 Binary files a/public/file/Instalasi Sistem Informasi Manajemen Rumah Sakit/Instalasi Sistem Informasi Manajemen Rumah Sakit/Juknis/Medis/PAKET 1 (NASI PUTIH, AYAM TALIWANG, TUMIS KANGKUNG, SAMBAL) (7).jpg and /dev/null differ diff --git a/public/js/dashboard/action.js b/public/js/dashboard/action.js index 57b80a1..17a791b 100644 --- a/public/js/dashboard/action.js +++ b/public/js/dashboard/action.js @@ -1,57 +1,133 @@ + let allFiles = []; + document.addEventListener("DOMContentLoaded", () => { + document.querySelectorAll(".file-input").forEach(input => { + bindFileUpload(input); + }); + }); -formCreate.on('submit', function(e){ - e.preventDefault(); + function bindFileUpload(input) { + const dropArea = input.closest(".file-drop-area"); + const fileNameBox = dropArea.querySelector(".file-name"); + const inputId = input?.id; + allFiles[inputId] = []; + input.addEventListener("change", function () { + for (let i = 0; i < this.files.length; i++) { + allFiles[inputId].push(this.files[i]); + } + renderFileList(inputId, fileNameBox); + this.value = ""; // reset agar bisa pilih file lagi + }); + } - const form = this; - const formData = new FormData(form); - - fetch(`/upload`, { - method: 'POST', - headers: { - 'X-CSRF-TOKEN': document.querySelector('input[name="_token"]').value, - }, - body: formData - }).then(async(res) => { - const responseData = await res.json(); - if (responseData.status) { - const handler = function () { - Toastify({ - text: responseData.message || 'Berhasil melakukan aksi!', - duration: 3000, - gravity: "top", // bisa "bottom" - position: "right", // bisa "left" - style: { - background: "linear-gradient(to right, #00b09b, #96c93d)", // hijau gradasi - color: "#fff", - } - }).showToast(); - $("#col_add_file").html(''); - colCount = 1; // reset counter - formCreate.find('input[type="text"], input[type="file"]').val(''); - formCreate.find('select').val(null).trigger('change'); - - if($("#klasifikasi_dok").val().length === 0 || $("#kategori_dok").val().length === 0 ){ - index() - }else{ - searchData() - } - modalCreate.removeEventListener('hidden.bs.modal', handler); - }; - modalCreate.addEventListener('hidden.bs.modal', handler); - bootstrap.Modal.getInstance(modalCreate).hide(); - } else { - throw new Error(responseData.message || 'Terjadi kesalahan saat menyimpan data.'); + function renderFileList(inputId, container) { + const files = allFiles[inputId]; + if (!files || files.length === 0) { + container.classList.add("d-none"); + container.innerHTML = ""; + return; } - }).catch(err => { - if (err.message) { + let list = "
📂 Pilih file untuk melihat preview
-