260 lines
11 KiB
PHP
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
|