added backlight and fixed outbound
This commit is contained in:
+59
-1
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user