v1.1: кнопка «Экспорт в Excel» — выгрузка видимых записей через SheetJS (xlsx)

This commit is contained in:
tore 2026-09-25 07:31:21 +00:00
parent b58f8e35cb
commit db51715291
2 changed files with 40 additions and 0 deletions

View File

@ -57,6 +57,7 @@
<div class="kt-ai-table-toolbar zt-table-toolbar" style="margin-top:var(--kt-ai-space-6)">
<span class="count" id="row-count"></span>
<input type="search" class="kt-ai-input zt-search" id="search" placeholder="Поиск по журналу…" autocomplete="off">
<button type="button" class="kt-ai-btn" id="btn-export"><svg class="kt-icon" aria-hidden="true"><use href="#download"></use></svg>Экспорт в Excel</button>
</div>
<div class="kt-ai-filterbar" id="filterbar" style="margin-top:var(--kt-ai-space-4)"></div>
<div class="kt-ai-table-wrap" style="margin-top:var(--kt-ai-space-2)" data-framed="true">
@ -143,6 +144,7 @@
</aside>
<div class="kt-ai-toast-stack" id="toasts"></div>
<script src="https://cdn.sheetjs.com/xlsx-0.20.2/package/dist/xlsx.full.min.js"></script>
<script src="design-system/icons/kt-ai-icons.js"></script>
<script src="script.js"></script>
</body>

View File

@ -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++) {