unsorted
This commit is contained in:
+61
-38
@@ -92,48 +92,64 @@
|
||||
};
|
||||
|
||||
$(document).ready(function () {
|
||||
$('#folder-tree').jstree({
|
||||
'core': {
|
||||
'data': function (node, cb) {
|
||||
$.getJSON(`${API_URL}/folders`, function (data) {
|
||||
const treeData = [
|
||||
{ id: "root", text: "Корень", parent: "#" }
|
||||
].concat(data.map(folder => ({
|
||||
id: folder.id,
|
||||
text: `${folder.name} <span class="folder-actions">` +
|
||||
`<button onclick="editFolder(${folder.id}, '${folder.name}')">✏️</button>` +
|
||||
`<button onclick="deleteFolder(${folder.id})">🗑️</button></span>`,
|
||||
parent: folder.parent_id ? folder.parent_id : "root"
|
||||
})));
|
||||
cb(treeData);
|
||||
});
|
||||
// Получаем ID папки "Несортированные" перед инициализацией дерева
|
||||
$.getJSON(`${API_URL}/folders`, function (folders) {
|
||||
const unsortedFolder = folders.find(f => f.name === 'Несортированные');
|
||||
const unsortedFolderId = unsortedFolder ? unsortedFolder.id : null;
|
||||
|
||||
// Инициализация дерева папок
|
||||
$('#folder-tree').jstree({
|
||||
'core': {
|
||||
'data': function (node, cb) {
|
||||
$.getJSON(`${API_URL}/folders`, function (data) {
|
||||
const treeData = [
|
||||
{ id: "root", text: "Корень", parent: "#" }
|
||||
].concat(data.map(folder => ({
|
||||
id: folder.id,
|
||||
text: `${folder.name} <span class="folder-actions">` +
|
||||
`<button onclick="editFolder(${folder.id}, '${folder.name}')">✏️</button>` +
|
||||
`<button onclick="deleteFolder(${folder.id})">🗑️</button></span>`,
|
||||
parent: folder.parent_id ? folder.parent_id : "root"
|
||||
})));
|
||||
cb(treeData);
|
||||
});
|
||||
},
|
||||
'check_callback': true
|
||||
},
|
||||
'check_callback': true
|
||||
},
|
||||
'plugins': ['dnd', 'html_data']
|
||||
}).on('select_node.jstree', function (e, data) {
|
||||
selectedFolderId = data.node.id === "root" ? null : data.node.id;
|
||||
loadInstalls(selectedFolderId);
|
||||
});
|
||||
'plugins': ['dnd', 'html_data']
|
||||
}).on('select_node.jstree', function (e, data) {
|
||||
selectedFolderId = data.node.id === "root" ? null : data.node.id;
|
||||
loadInstalls(selectedFolderId);
|
||||
});
|
||||
|
||||
$('#installs-list').on('dragstart', '.install-item', function (e) {
|
||||
e.originalEvent.dataTransfer.setData('text/plain', $(this).data('id'));
|
||||
});
|
||||
|
||||
$('#folder-tree').on('dragover', function (e) {
|
||||
e.preventDefault();
|
||||
}).on('drop', function (e) {
|
||||
e.preventDefault();
|
||||
const installId = e.originalEvent.dataTransfer.getData('text');
|
||||
let targetFolderId = $(e.target).closest('.jstree-node').attr('id');
|
||||
if (installId && targetFolderId) {
|
||||
targetFolderId = targetFolderId === "root" ? null : targetFolderId;
|
||||
moveInstallToFolder(installId, targetFolderId);
|
||||
// Автоматически выбираем "Несортированные" при загрузке
|
||||
if (unsortedFolderId) {
|
||||
setTimeout(() => {
|
||||
$('#folder-tree').jstree('select_node', unsortedFolderId);
|
||||
loadInstalls(unsortedFolderId);
|
||||
}, 100); // Небольшая задержка, чтобы дерево инициализировалось
|
||||
} else {
|
||||
loadInstalls(null);
|
||||
$('#folder-tree').jstree('select_node', 'root');
|
||||
}
|
||||
});
|
||||
|
||||
loadInstalls(null);
|
||||
$('#folder-tree').jstree('select_node', 'root');
|
||||
// Drag-and-drop для записей
|
||||
$('#installs-list').on('dragstart', '.install-item', function (e) {
|
||||
e.originalEvent.dataTransfer.setData('text/plain', $(this).data('id'));
|
||||
});
|
||||
|
||||
$('#folder-tree').on('dragover', function (e) {
|
||||
e.preventDefault();
|
||||
}).on('drop', function (e) {
|
||||
e.preventDefault();
|
||||
const installId = e.originalEvent.dataTransfer.getData('text');
|
||||
let targetFolderId = $(e.target).closest('.jstree-node').attr('id');
|
||||
if (installId && targetFolderId) {
|
||||
targetFolderId = targetFolderId === "root" ? null : targetFolderId;
|
||||
moveInstallToFolder(installId, targetFolderId);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function loadInstalls(folderId) {
|
||||
@@ -249,6 +265,13 @@
|
||||
});
|
||||
$('#folder-tree').jstree(true).refresh();
|
||||
loadInstalls(selectedFolderId);
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
if (xhr.status === 403) {
|
||||
alert("Нельзя удалить папку 'Несортированные'.");
|
||||
} else {
|
||||
console.error("Ошибка удаления:", status, error);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user