diff --git a/index.html b/index.html index 60e4ffb..6c6cc13 100644 --- a/index.html +++ b/index.html @@ -57,6 +57,7 @@
+
@@ -143,6 +144,7 @@
+ diff --git a/script.js b/script.js index 1205fc6..b0a7a36 100644 --- a/script.js +++ b/script.js @@ -262,6 +262,44 @@ toast("Заявка " + rec.id + " добавлена"); }); + document.getElementById("btn-export").addEventListener("click", function () { + var rows = []; + for (var i = 0; i < requests.length; i++) { + if (!rowMatches(requests[i])) continue; + var r = requests[i]; + rows.push({ + "Заявка": r.id, + "Оборудование": r.equip, + "Расположение": r.loc, + "Описание": r.desc, + "Создана": fmtDate(r.created), + "Статус": STATUS[r.status] ? STATUS[r.status].label : r.status + }); + } + if (!rows.length) { + toast("Нечего выгружать — по фильтрам нет записей"); + return; + } + var wb = XLSX.utils.json_to_sheet(rows); + var widths = ["Заявка", "Оборудование", "Расположение", "Описание"].map(function (h) { + var w = h.length; + rows.forEach(function (row) { + var v = String(row[h] || ""); + if (v.length > w) w = v.length; + }); + return { wch: Math.min(w + 2, 60) }; + }); + widths.push({ wch: 12 }, { wch: 20 }); + wb["!cols"] = widths; + var sheetName = state.status === "all" ? "Заявки" : STATUS[state.status].label; + var wbout = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(wbout, wb, sheetName.slice(0, 31)); + var d = new Date(); + var name = "Journal_" + String(d.getDate()).padStart(2, "0") + String(d.getMonth() + 1).padStart(2, "0") + d.getFullYear() + ".xlsx"; + XLSX.writeFile(wbout, name); + toast("Выгружено записей: " + rows.length); + }); + document.getElementById("btn-apply").addEventListener("click", function () { if (!state.editId) return; for (var i = 0; i < requests.length; i++) {