diff --git a/index.html b/index.html index 7bc1b9b..c0eb66e 100644 --- a/index.html +++ b/index.html @@ -51,6 +51,12 @@
+
+ Приоритет +
+ +
+
diff --git a/script.js b/script.js index bc3b13c..3d966fe 100644 --- a/script.js +++ b/script.js @@ -14,10 +14,17 @@ var STATUSES = { var PRIORITIES = { low: { label: "Низкий" }, - normal: { label: "Средний" }, - high: { label: "Высокий" } + normal: { label: "Средний", tone: "muted" }, + high: { label: "Высокий", tone: "risk" } }; +var PRIORITY_OPTIONS = [ + { key: "", label: "Все" }, + { key: "high", label: "Высокий" }, + { key: "normal", label: "Средний" }, + { key: "low", label: "Низкий" } +]; + function todayIso(offsetDays) { var d = new Date(); d.setDate(d.getDate() + (offsetDays || 0)); @@ -57,6 +64,7 @@ var state = { requests: [], query: "", statusFilter: "", // "" = все + priorityFilter: "", // "" = все openId: null, // id записи в drawer drawerMode: "" // "" | "view" | "new" | "edit" }; @@ -138,12 +146,18 @@ function statusPill(status) { return '' + esc(st.label) + ""; } +function prioChip(p) { + var pr = PRIORITIES[p] || PRIORITIES.normal; + return '' + esc(pr.label) + ""; +} + function filteredRequests(q) { q = (q == null ? "" : q).trim().toLowerCase(); var out = []; for (var i = 0; i < state.requests.length; i++) { var r = state.requests[i]; if (state.statusFilter && r.status !== state.statusFilter) continue; + if (state.priorityFilter && r.priority !== state.priorityFilter) continue; if (q) { if (String(r.equipment).toLowerCase().indexOf(q) === -1) continue; } @@ -156,6 +170,7 @@ function statusCounts(q) { var c = { "": 0, new: 0, inwork: 0, waiting: 0, done: 0, cancelled: 0 }; for (var i = 0; i < state.requests.length; i++) { var r = state.requests[i]; + if (state.priorityFilter && r.priority !== state.priorityFilter) continue; if (q) { if (String(r.equipment).toLowerCase().indexOf(q) === -1) continue; } @@ -227,13 +242,12 @@ function renderTable() { for (var i = 0; i < vis.length; i++) { var r = vis[i]; - var prio = PRIORITIES[r.priority] || { label: "—" }; h += '' + '' + esc(r.id) + "" + '' + esc(r.equipment) + '' + '' + esc(r.address) + "" + "" + statusPill(r.status) + "" + - '' + esc(prio.label) + "" + + '' + prioChip(r.priority) + "" + '' + esc(fmtDate(r.created)) + "" + '' + esc(r.reporter) + "" + ""; @@ -244,9 +258,22 @@ function renderTable() { if (el) el.textContent = vis.length + " из " + state.requests.length; } +function renderPrioSelect() { + var sel = $("prioSelect"); + if (!sel) return; + var h = ""; + for (var i = 0; i < PRIORITY_OPTIONS.length; i++) { + var o = PRIORITY_OPTIONS[i]; + var active = state.priorityFilter === o.key ? "1" : "0"; + h += '"; + } + sel.innerHTML = h; +} + function renderAll() { renderKpis(); renderStatusSeg(); + renderPrioSelect(); renderTable(); } @@ -547,6 +574,11 @@ S.onSearch = function (v) { renderAll(); }; +S.setPrio = function (v) { + state.priorityFilter = v; + renderAll(); +}; + S.toggleSidebar = function () { var sb = $("sidebar"); if (sb) sb.setAttribute("data-open", sb.getAttribute("data-open") === "true" ? "false" : "true"); diff --git a/style.css b/style.css index 705bbee..7b004d8 100644 --- a/style.css +++ b/style.css @@ -9,6 +9,17 @@ flex-wrap: wrap; } +/* Выборка приоритета в тулбаре */ +.j-filters { + display: flex; + align-items: center; + gap: var(--kt-ai-space-3); +} +.j-filters-label { + font-size: var(--kt-ai-text-xs); + color: var(--kt-ai-fg-muted); +} + /* Заголовок экрана */ .j-page-head { display: flex;