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}`;
}
}
};
});