260 lines
11 KiB
PHP

@extends('layout.main')
<style>
.file-tree-ul {
list-style: none;
padding-left: 20px;
position: relative;
}
/* Garis vertikal */
.file-tree-ul::before {
content: '';
position: absolute;
top: 0;
left: 10px;
bottom: 0;
border-left: 1px solid #ccc;
}
.file-tree-li {
margin: 4px 0;
padding-left: 20px;
position: relative;
}
/* Garis horizontal */
.file-tree-li::before {
content: '';
position: absolute;
top: 12px;
left: 0;
width: 20px;
border-top: 1px solid #ccc;
}
/* Hilangkan garis di root */
.file-tree-ul > .file-tree-li::before {
border-top: none;
}
.folder > span {
cursor: pointer;
user-select: none;
}
.collapsed > .file-tree-ul {
display: none;
}
.add-file-btn {
margin-left: 8px;
font-size: 12px;
color: blue;
cursor: pointer;
}
</style>
@section('body_main')
<div class="row">
<div class="col-md-12">
<div class="card w-100">
<div class="card-header d-flex justify-content-between align-items-center">
<h4 class="mb-0">Data</h4>
</div>
<div class="card-body p-3">
<div class="row mb-3 mt-3">
<!-- Unit Kerja -->
<div class="col-md-2">
<label for="unit_kerja" class="form-label">Unit Kerja</label>
<select class="form-control unit_kerja" id="unit_kerja" multiple="multiple">
<option value="" disabled>Select Choose</option>
</select>
</div>
<!-- Sub Unit Kerja -->
<div class="col-md-2">
<label for="sub_unit_kerja" class="form-label">Sub Unit Kerja</label>
<select class="form-control sub_unit_kerja" id="sub_unit_kerja" multiple="multiple">
<option value="" disabled>Select Choose</option>
</select>
</div>
<!-- Kategori Dokumen -->
<div class="col-md-2">
<label for="kategori_dok" class="form-label">Kategori Dok.</label>
<select class="form-control kategori_dok" id="kategori_dok" multiple="multiple" placeholder="--Pilih kategori dokumen--">
<option value="" disabled>Select Choose</option>
@foreach ($katDok as $kat)
<option value="{{ $kat->master_kategori_directory_id }}">{{ $kat->nama_kategori_directory }}</option>
@endforeach
</select>
</div>
<!-- Klasifikasi Dokumen -->
<div class="col-md-2">
<label for="klasifikasi_dok" class="form-label">Klasifikasi Dok.</label>
<select class="form-control klasifikasi_dok" id="klasifikasi_dok" multiple="multiple" placeholder="--Pilih klasifikasi dokumen--">
<option value="" disabled>Select Choose</option>
@foreach ($klasifikasiDok as $kla)
<option value="{{ $kla->master_klasifikasi_directory_id }}">{{ $kla->nama_klasifikasi_directory }}</option>
@endforeach
</select>
</div>
<!-- Button Cari -->
<div class="col-md-2 d-flex align-items-end">
<button type="button" class="btn btn-primary w-100" onclick="searchData()">Cari</button>
</div>
<!-- Button Tambah File -->
<div class="col-md-2 d-flex align-items-end">
<button type="button" class="btn btn-success w-100" data-bs-target="#modalCreateFile" data-bs-toggle="modal">
<i data-feather="plus" class="me-1"></i>
Tambah File</button>
</div>
</div>
<div class="row">
<div id="tree-wrapper" class="col-12 col-md-6 mb-3">
<div id="file_tree"></div>
</div>
<div id="preview-wrapper" class="col-md-6 d-none">
<div class="card shadow-sm h-100">
<div class="card-header d-flex justify-content-between align-items-center py-2">
<h6 class="mb-0">📄 Preview <strong id="confirm_preview_file"></strong></h6>
<button class="btn btn-sm btn-outline-danger" id="close-preview"></button>
</div>
<div class="card-body p-2" style="min-height:250px; max-height:80vh; overflow:auto;">
<div id="file-preview" class="text-center text-muted d-flex justify-content-center align-items-center" style="height:100%;">
<p>📂 Pilih file untuk melihat preview</p>
</div>
</div>
<div class="card-footer p-2 d-flex justify-content-end">
<button type="button" class="btn btn-sm btn-outline-danger" id="delete-file">Hapus</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@include('dashboard.modal.create')
<script>
const klasifikasiDok = @json($klasifikasiDok);
const katDok = @json($katDok);
const allAkses = @json($allAkses);
let currentFile = null;
let idDirectory = null;
document.addEventListener('click', function(e) {
if (e.target.matches('.file-link')) {
e.preventDefault();
let fileUrl = e.target.getAttribute('data-file');
currentFile = fileUrl
idDirectory = e.target.getAttribute('data-id');
let ext = fileUrl.split('.').pop().toLowerCase();
$("#confirm_preview_file").html(fileUrl)
// ubah layout
document.getElementById('tree-wrapper').classList.remove('col-12');
document.getElementById('tree-wrapper').classList.add('col-md-6');
document.getElementById('preview-wrapper').classList.remove('d-none');
let previewBox = document.getElementById('file-preview');
if (['jpg','jpeg','png','gif','webp'].includes(ext)) {
previewBox.innerHTML = `<img src="/file/${fileUrl}" class="img-fluid rounded shadow-sm" alt="preview">`;
} else if (ext === 'pdf') {
previewBox.innerHTML = `<iframe src="/file/${fileUrl}" width="100%" height="600px" style="border:none;"></iframe>`;
} else {
previewBox.innerHTML = `
<p class="text-muted">Tidak bisa preview file ini. Silakan download:</p>
<a href="/file/${fileUrl}" target="_blank" class="btn btn-sm btn-primary">⬇️ Download</a>
`;
}
}
if (e.target.id === 'delete-file') {
if (!currentFile) {
Swal.fire({
text: "Tidak ada file yang dipilih!",
icon: "warning",
confirmButtonText: "OK"
});
return;
}
Swal.fire({
title: 'Yakin ingin menghapus file ini?',
text: "File akan dihapus",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#d33',
cancelButtonColor: '#6c757d',
confirmButtonText: 'Ya, hapus',
cancelButtonText: 'Batal'
}).then((result) => {
if (result.isConfirmed) {
fetch(`/delete-file/${idDirectory}`, {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
},
body: JSON.stringify({ file: currentFile })
})
.then(res => res.json())
.then(data => {
if (data.success) {
Swal.fire({
text: 'File berhasil dihapus',
icon: 'success',
timer: 2000,
showConfirmButton: false
});
const fileLink = document.querySelector(`a.file-link[data-id="${idDirectory}"]`);
if (fileLink) {
const li = fileLink.closest('li.file-tree-li');
li?.remove();
}
// reset preview
document.getElementById('file-preview').innerHTML =
`<p>📂 Pilih file untuk melihat preview</p>`;
document.getElementById('preview-wrapper').classList.add('d-none');
document.getElementById('tree-wrapper').classList.remove('col-md-6');
document.getElementById('tree-wrapper').classList.add('col-12');
currentFile = null; // reset
} else {
Swal.fire({
text: 'Gagal menghapus file',
icon: 'error'
});
}
})
.catch(err => {
Swal.fire({
text: 'Terjadi error saat menghapus file',
icon: 'error'
});
console.error(err);
});
}
});
}
});
// tombol close
document.getElementById('close-preview').addEventListener('click', function() {
document.getElementById('tree-wrapper').classList.remove('col-md-6');
document.getElementById('tree-wrapper').classList.add('col-12');
document.getElementById('preview-wrapper').classList.add('d-none');
});
</script>
<script src="{{ ver('/js/dashboard/_init.js') }}"></script>
<script src="{{ ver('/js/dashboard/index.js') }}"></script>
<script src="{{ ver('/js/dashboard/functions.js') }}"></script>
<script src="{{ ver('/js/dashboard/action.js') }}"></script>
@endsection