addressbook_web/frontend/script.js

239 lines
9.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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