Files
xlx/public/assets/admin.js
T

91 строка
2.9 KiB
JavaScript

const tokenInput = document.querySelector('#adminToken');
const form = document.querySelector('#settingsForm');
const envPreview = document.querySelector('#envPreview');
const adminResult = document.querySelector('#adminResult');
const loadButton = document.querySelector('#loadSettings');
const saveButton = document.querySelector('#saveSettings');
const applyButton = document.querySelector('#applySettings');
function token() {
return tokenInput.value.trim();
}
function setResult(text) {
adminResult.textContent = text;
}
function formData() {
return Object.fromEntries(new FormData(form).entries());
}
function fillForm(settings) {
for (const [key, value] of Object.entries(settings)) {
const input = form.elements.namedItem(key);
if (input) {
input.value = value ?? '';
}
}
}
async function loadSettings() {
setResult('Загружаем...');
const response = await fetch('/api/admin/xlxd/settings', {
headers: { 'X-Admin-Token': token() },
});
const payload = await response.json();
if (!payload.ok) {
setResult(payload.error || 'Ошибка загрузки');
return;
}
fillForm(payload.data.settings);
envPreview.textContent = payload.data.env;
setResult('Настройки загружены.');
}
async function saveSettings(apply) {
setResult(apply ? 'Сохраняем и применяем...' : 'Сохраняем...');
const response = await fetch('/api/admin/xlxd/settings', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Admin-Token': token(),
},
body: JSON.stringify({ settings: formData(), apply }),
});
const payload = await response.json();
if (!payload.ok) {
setResult(payload.error || 'Ошибка сохранения');
return;
}
envPreview.textContent = payload.data.env;
setResult(payload.data.message);
}
loadButton?.addEventListener('click', loadSettings);
saveButton?.addEventListener('click', () => saveSettings(false));
applyButton?.addEventListener('click', () => saveSettings(true));
form?.addEventListener('input', () => {
const data = formData();
const lines = {
XLX_REFLECTOR_NAME: data.reflector_name,
XLX_SERVER_HOST: data.server_host,
XLX_SYSOP_CALLSIGN: data.sysop_callsign,
XLX_SYSOP_EMAIL: data.sysop_email,
XLX_COUNTRY: data.country,
XLX_DASHBOARD_PORT: data.dashboard_port,
XLX_DMR_PORT: data.dmr_port,
XLX_YSF_PORT: data.ysf_port,
XLX_DEFAULT_MODULE: data.default_module,
XLX_MODULES: data.modules,
XLX_INSTALL_PATH: data.install_path,
XLX_SOURCE_PATH: data.source_path,
XLX_LOG_PATH: data.log_path,
XLX_SERVICE_NAME: data.service_name,
XLX_REPO_URL: data.repo_url,
};
envPreview.textContent = Object.entries(lines).map(([key, value]) => `${key}=${value || ''}`).join('\n');
});