This commit is contained in:
2026-05-30 00:15:16 +05:00
parent d3afd698b6
commit 43dee9f796
5 changed files with 58 additions and 2 deletions
+21
View File
@@ -1100,6 +1100,8 @@ const CamSettings = {
if (be) be.onclick = () => this.bulk ? this.saveBulk() : this.enterBulk();
const bc = document.getElementById("bulk-cancel");
if (bc) bc.onclick = () => this.exitBulk();
const cc = document.getElementById("clear-cams");
if (cc) cc.onclick = () => this.clearAll();
await this.load();
connectStatusWS(() => { if (!this.editing) this.load(); });
},
@@ -1108,10 +1110,12 @@ const CamSettings = {
const be = document.getElementById("bulk-edit");
const bc = document.getElementById("bulk-cancel");
const add = document.getElementById("add-cam");
const cc = document.getElementById("clear-cams");
if (be) be.textContent = this.bulk ? "Сохранить" : "Изменить";
if (be) be.classList.toggle("primary", this.bulk);
if (bc) bc.hidden = !this.bulk;
if (add) add.hidden = this.bulk; // во время массового редактирования не добавляем
if (cc) cc.hidden = this.bulk;
},
enterBulk() {
@@ -1127,6 +1131,23 @@ const CamSettings = {
await this.load();
},
// удалить ВСЕ камеры (архив не трогается) — POST /api/cameras/clear
async clearAll() {
if (this.bulk) return;
const n = this.cams.length;
if (!n) { alert("Камер нет"); return; }
if (!confirm(`Удалить ВСЕ камеры (${n})?\nЗаписи архива НЕ затрагиваются. Действие необратимо.`)) return;
const r = await fetch("/api/cameras/clear", { method: "POST" });
if (!r.ok) {
const d = await r.json().catch(() => ({}));
alert("Не удалось очистить: " + (d.detail || r.status));
return;
}
const d = await r.json().catch(() => ({}));
await this.load();
alert(`Удалено камер: ${d.removed != null ? d.removed : n}`);
},
// ── строка камеры в режиме массового редактирования ──
bulkRowHtml(slotNo, cam) {
const v = (x) => this.esc(x);