+
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;