v1.1: кнопка «Экспорт в Excel» — выгрузка видимых записей через SheetJS (xlsx)
This commit is contained in:
parent
b58f8e35cb
commit
db51715291
@ -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>
|
||||
|
||||
38
script.js
38
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++) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user