added backlight and fixed outbound

This commit is contained in:
2026-07-21 09:17:48 +03:00
parent ff2b8a250e
commit 5392273794
37 changed files with 1560 additions and 76 deletions
+59 -1
View File
@@ -486,6 +486,34 @@ async function loadAccess() {
}
}
function renderBrightness(s) {
const el = $("#brightness-status");
const slider = $("#brightness-slider");
const val = $("#brightness-val");
if (!el) return;
if (!s || s.ok === false) {
el.innerHTML = `<p class="warn">${(s && s.error) || "подсветка недоступна"}</p>`;
return;
}
const pct = s.percent != null ? s.percent : 100;
el.textContent = `Сейчас: ${pct}%` +
(s.device ? ` (${s.device}: ${s.brightness}/${s.max})` : "") +
(s.saved != null ? ` · сохранено: ${s.saved}%` : "");
if (slider && !slider.dataset.touched) {
slider.value = pct;
if (val) val.textContent = pct + "%";
}
}
async function loadBrightness() {
try {
const s = await api("GET", "/api/system/brightness");
renderBrightness(s);
} catch (e) {
renderBrightness({ ok: false, error: e.message });
}
}
async function setAccess(action, value) {
const r = await api("POST", "/api/system/access", { action, value });
if (action !== "webPort") renderAccessStatus(r);
@@ -505,6 +533,7 @@ async function loadSystem() {
dtInput.value = stats.clock.replace(" ", "T").slice(0, 16);
}
loadAccess();
loadBrightness();
} catch (e) {
const el = $("#sys-stats");
if (el) el.textContent = e.message;
@@ -526,6 +555,31 @@ $("#web-port")?.addEventListener("input", (e) => {
e.target.dataset.touched = "1";
});
$("#brightness-slider")?.addEventListener("input", (e) => {
e.target.dataset.touched = "1";
const val = $("#brightness-val");
if (val) val.textContent = e.target.value + "%";
});
$("#brightness-refresh")?.addEventListener("click", () => {
const slider = $("#brightness-slider");
if (slider) delete slider.dataset.touched;
loadBrightness();
});
$("#brightness-save")?.addEventListener("click", async () => {
const percent = parseInt($("#brightness-slider")?.value, 10);
if (Number.isNaN(percent) || percent < 0 || percent > 100) {
flash("Некорректная яркость", true);
return;
}
try {
const s = await api("POST", "/api/system/brightness", { percent });
const slider = $("#brightness-slider");
if (slider) delete slider.dataset.touched;
renderBrightness(s);
flash(`Яркость: ${s.percent}%`);
} catch (e) { flash(e.message, true); }
});
$("#sys-set-time")?.addEventListener("click", async () => {
const raw = $("#sys-datetime")?.value;
if (!raw) { flash("Укажите дату и время", true); return; }
@@ -572,9 +626,13 @@ $("#save-ssh-port")?.addEventListener("click", async () => {
flash("Порт SSH обновлён");
} catch (e) { flash(e.message, true); }
});
const MIN_USER_PORT = 1024;
$("#save-web-port")?.addEventListener("click", async () => {
const port = parseInt($("#web-port").value, 10);
if (!port || port < 1 || port > 65535) { flash("Некорректный веб-порт", true); return; }
if (!port || port < MIN_USER_PORT || port > 65535) {
flash(`Веб-порт должен быть от ${MIN_USER_PORT} до 65535 (1–1023 зарезервированы в Linux)`, true);
return;
}
if (!confirm(`Сменить веб-порт на ${port}? Веб-сервис перезапустится.`)) return;
try {
await setAccess("webPort", port);