фильтр по приоритету
This commit is contained in:
parent
96a2eb114f
commit
14889a8b6d
@ -51,6 +51,12 @@
|
||||
<div class="kt-ai-work-column-table" id="view">
|
||||
<div class="kt-ai-kpi-strip" data-cards="true" id="kpiStrip"></div>
|
||||
<div class="j-toolbar">
|
||||
<div class="j-filters">
|
||||
<span class="j-filters-label">Приоритет</span>
|
||||
<div class="kt-ai-select-wrap">
|
||||
<select class="kt-ai-select" id="prioSelect" onchange="S.setPrio(this.value)"></select>
|
||||
</div>
|
||||
</div>
|
||||
<span class="spacer"></span>
|
||||
<div class="kt-ai-segmented" id="statusSeg"></div>
|
||||
<span class="kt-ai-meta" id="visCount"></span>
|
||||
|
||||
40
script.js
40
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 '<span class="kt-ai-status-pill" data-status="' + st.tone + '">' + esc(st.label) + "</span>";
|
||||
}
|
||||
|
||||
function prioChip(p) {
|
||||
var pr = PRIORITIES[p] || PRIORITIES.normal;
|
||||
return '<span class="kt-ai-chip" data-tone="' + pr.tone + '">' + esc(pr.label) + "</span>";
|
||||
}
|
||||
|
||||
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 += '<tr class="j-row" onclick="S.openView(\'' + esc(r.id) + '\')">' +
|
||||
'<td class="j-id">' + esc(r.id) + "</td>" +
|
||||
'<td><span class="j-name">' + esc(r.equipment) + '</span>' +
|
||||
'<span class="j-sub">' + esc(r.address) + "</span></td>" +
|
||||
"<td>" + statusPill(r.status) + "</td>" +
|
||||
'<td class="j-prio">' + esc(prio.label) + "</td>" +
|
||||
'<td class="j-prio">' + prioChip(r.priority) + "</td>" +
|
||||
'<td class="j-date">' + esc(fmtDate(r.created)) + "</td>" +
|
||||
'<td>' + esc(r.reporter) + "</td>" +
|
||||
"</tr>";
|
||||
@ -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 += '<option value="' + o.key + '"' + (active ? " selected" : "") + ">" + esc(o.label) + "</option>";
|
||||
}
|
||||
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");
|
||||
|
||||
11
style.css
11
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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user