239 lines
9.5 KiB
JavaScript
239 lines
9.5 KiB
JavaScript
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('<option value="">Корневая папка</option>');
|
||
folders.forEach(folder => {
|
||
$('#parentFolder, #connectionFolder').append(
|
||
`<option value="${folder.id}">${folder.name} (ID: ${folder.id})</option>`
|
||
);
|
||
});
|
||
});
|
||
}
|
||
|
||
// Загрузка подключений в таблицу
|
||
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 `<a href="rustdesk://${data}" onclick="openRustDesk('${data}'); return false;">${data}</a>`;
|
||
}
|
||
return data;
|
||
}
|
||
},
|
||
{ "data": "name" },
|
||
{ "data": "type" },
|
||
{
|
||
"data": "folder_id",
|
||
"render": function (data, type, row) {
|
||
return data ? getFolderName(data) : "Без папки";
|
||
}
|
||
},
|
||
{
|
||
"data": "id",
|
||
"render": function (data) {
|
||
return `
|
||
<button onclick="editConnection(${data})">Редактировать</button>
|
||
<button onclick="deleteConnection(${data})">Удалить</button>
|
||
<button onclick="moveConnection(${data})">Переместить</button>
|
||
`;
|
||
}
|
||
}
|
||
]
|
||
});
|
||
});
|
||
}
|
||
|
||
// Получение имени папки по 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}`;
|
||
}
|
||
}
|
||
};
|
||
}); |