const API_URL = "http://localhost:8001/api"; $(document).ready(function () { loadFolders(); loadConnections(); // Загрузка папок function loadFolders() { $.getJSON(`${API_URL}/folders`, function (folders) { $('#parentFolder, #connectionFolder').empty(); $('#parentFolder, #connectionFolder').append(''); folders.forEach(folder => { $('#parentFolder, #connectionFolder').append( `` ); }); }); } // Загрузка подключений в таблицу function loadConnections() { $.getJSON(`${API_URL}/connections`, function (data) { let table = $('#connectionsTable').DataTable({ "destroy": true, "data": data, "columns": [ { "data": "id" }, { "data": "connection_id", "render": function (data, type, row) { if (row.type === "RustDesk") { return `${data}`; } return data; } }, { "data": "name" }, { "data": "type" }, { "data": "folder_id", "render": function (data, type, row) { return data ? getFolderName(data) : "Без папки"; } }, { "data": "id", "render": function (data) { return ` `; } } ] }); }); } // Получение имени папки по ID function getFolderName(folderId) { let folderName = "Без папки"; $.ajax({ url: `${API_URL}/folders/${folderId}`, async: false, success: function (folder) { folderName = folder.name; } }); return folderName; } // Создание папки window.createFolder = function () { let name = $('#folderName').val(); let parentId = $('#parentFolder').val() || null; $.ajax({ url: `${API_URL}/folders`, type: 'POST', contentType: 'application/json', data: JSON.stringify({ name, parent_id: parentId }), success: function () { alert("Папка создана!"); loadFolders(); loadConnections(); }, error: function (xhr) { alert("Ошибка: " + xhr.responseJSON.detail); } }); }; // Редактирование папки (пример, нужно уточнить UI) window.editFolder = function () { let folderId = prompt("Введите ID папки для редактирования:"); if (folderId) { let name = prompt("Новое имя папки:"); let parentId = prompt("ID родительской папки (оставьте пустым для корневой):") || null; $.ajax({ url: `${API_URL}/folders/${folderId}`, type: 'PUT', contentType: 'application/json', data: JSON.stringify({ name, parent_id: parentId }), success: function () { alert("Папка обновлена!"); loadFolders(); loadConnections(); }, error: function (xhr) { alert("Ошибка: " + xhr.responseJSON.detail); } }); } }; // Удаление папки window.deleteFolder = function () { let folderId = prompt("Введите ID папки для удаления:"); if (folderId && confirm("Вы уверены?")) { $.ajax({ url: `${API_URL}/folders/${folderId}`, type: 'DELETE', success: function () { alert("Папка удалена!"); loadFolders(); loadConnections(); }, error: function (xhr) { alert("Ошибка: " + xhr.responseJSON.detail); } }); } }; // Добавление подключения $('#addConnectionForm').submit(function (event) { event.preventDefault(); let connectionId = $('#connectionId').val(); let name = $('#connectionName').val(); let type = $('#connectionType').val(); let folderId = $('#connectionFolder').val() || null; $.ajax({ url: `${API_URL}/connections`, type: 'POST', contentType: 'application/json', data: JSON.stringify({ connection_id: connectionId, name, type, folder_id: folderId }), success: function () { alert("Подключение добавлено!"); loadConnections(); $('#addConnectionForm')[0].reset(); }, error: function (xhr) { alert("Ошибка: " + xhr.responseJSON.detail); } }); }); // Редактирование подключения window.editConnection = function (id) { let connection = promptConnectionDetails(id); if (connection) { $.ajax({ url: `${API_URL}/connections/${id}`, type: 'PUT', contentType: 'application/json', data: JSON.stringify(connection), success: function () { alert("Подключение обновлено!"); loadConnections(); }, error: function (xhr) { alert("Ошибка: " + xhr.responseJSON.detail); } }); } }; // Удаление подключения window.deleteConnection = function (id) { if (confirm("Вы уверены, что хотите удалить подключение?")) { $.ajax({ url: `${API_URL}/connections/${id}`, type: 'DELETE', success: function () { alert("Подключение удалено!"); loadConnections(); }, error: function (xhr) { alert("Ошибка: " + xhr.responseJSON.detail); } }); } }; // Перемещение подключения window.moveConnection = function (id) { let folderId = prompt("Введите ID папки для перемещения (оставьте пустым для корневой):") || null; $.ajax({ url: `${API_URL}/connections/${id}`, type: 'PUT', contentType: 'application/json', data: JSON.stringify({ folder_id: folderId }), success: function () { alert("Подключение перемещено!"); loadConnections(); }, error: function (xhr) { alert("Ошибка: " + xhr.responseJSON.detail); } }); }; // Функция для запроса деталей подключения через prompt (можно улучшить с модальным окном) function promptConnectionDetails(id) { let connectionId = prompt("Новый ID подключения:"); let name = prompt("Новое имя подключения:"); let type = prompt("Новый тип подключения (RustDesk, SSH, RDP):"); let folderId = prompt("ID папки (оставьте пустым для корневой):") || null; if (connectionId && name && type) { return { connection_id: connectionId, name, type, folder_id: folderId }; } return null; } // Обработка клика по RustDesk ссылке window.openRustDesk = function(rustId) { if (confirm("Подключиться к устройству с ID " + rustId + "?")) { if (typeof navigator.msLaunchUri !== 'undefined') { navigator.msLaunchUri(`rustdesk://${rustId}`, function() { console.log("Успешно запущен RustDesk"); }, function() { alert("Не удалось запустить RustDesk. Убедитесь, что RustDesk установлен и зарегистрирован для обработки rustdesk://."); } ); } else { window.location.href = `rustdesk://${rustId}`; } } }; });