UI: box-sizing для content/tableWrap (1280px), EBITDA≤0 в таблице и карточке

This commit is contained in:
Moldabayev_d 2026-09-21 08:18:09 +00:00
parent 8d7a0be485
commit 3a6a256136
2 changed files with 14 additions and 6 deletions

16
app.js
View File

@ -52,6 +52,14 @@
if (v === Infinity) return '<span class="inf">∞</span>'; if (v === Infinity) return '<span class="inf">∞</span>';
return nfmt(v, 2); return nfmt(v, 2);
} }
/* для отображения: EBITDA ≤ 0 вместо «нет данных» у К1/К2 */
function coefDisplay(e, key) {
var v = e[key];
if (v == null && e.why && e.why[key] && /EBITDA/i.test(e.why[key]) && e.ebitda != null && e.ebitda <= 0) {
return "EBITDA ≤ 0";
}
return typeof v === "number" ? nfmt(v, 2) : fmtR(v);
}
var _nfCache = {}; var _nfCache = {};
function nfmt(v, d) { function nfmt(v, d) {
d = d == null ? 2 : d; d = d == null ? 2 : d;
@ -636,9 +644,9 @@
html += "<tr data-name=\"" + esc(e._name || e.name) + "\" class=\"" + (e.group ? "is-group" : "") + "\">" + html += "<tr data-name=\"" + esc(e._name || e.name) + "\" class=\"" + (e.group ? "is-group" : "") + "\">" +
"<td title=\"" + esc(e._name || e.name) + "\">" + esc(e._name || e.name) + (e.group ? " <span class='kt-ai-chip' data-tone='blue' style='margin-left:6px'>группа</span>" : "") + "</td>" + "<td title=\"" + esc(e._name || e.name) + "\">" + esc(e._name || e.name) + (e.group ? " <span class='kt-ai-chip' data-tone='blue' style='margin-left:6px'>группа</span>" : "") + "</td>" +
"<td><span class='zone-pill " + wcls + "'></span> " + zoneLabel(wzone) + "</td>" + "<td><span class='zone-pill " + wcls + "'></span> " + zoneLabel(wzone) + "</td>" +
"<td>" + fmtR(e.k1) + " " + pill(e, "k1") + "</td>" + "<td>" + coefDisplay(e, "k1") + " " + pill(e, "k1") + "</td>" +
"<td>" + fmtR(e.k2) + " " + pill(e, "k2") + "</td>" + "<td>" + coefDisplay(e, "k2") + " " + pill(e, "k2") + "</td>" +
"<td>" + fmtR(e.k3) + " " + pill(e, "k3") + "</td>" + "<td>" + coefDisplay(e, "k3") + " " + pill(e, "k3") + "</td>" +
"</tr>"; "</tr>";
} }
body.innerHTML = html; body.innerHTML = html;
@ -706,7 +714,7 @@
var zn = e[key + "Zone"] || "nodata"; var zn = e[key + "Zone"] || "nodata";
var cls = { green: "var(--kt-ai-status-ok-fg)", yellow: "var(--kt-ai-status-warn-fg)", red: "var(--kt-ai-status-risk-fg)", nodefault: "var(--kt-ai-fg-muted)", nodata: "var(--kt-ai-fg-muted)" }[zn]; var cls = { green: "var(--kt-ai-status-ok-fg)", yellow: "var(--kt-ai-status-warn-fg)", red: "var(--kt-ai-status-risk-fg)", nodefault: "var(--kt-ai-fg-muted)", nodata: "var(--kt-ai-fg-muted)" }[zn];
return "<div class='kfu-metric'><div class='mlabel'>" + title + " " + pill(e, key) + "</div>" + return "<div class='kfu-metric'><div class='mlabel'>" + title + " " + pill(e, key) + "</div>" +
"<div class='mval' style='color:" + cls + "'>" + fmtR(v).replace(/<[^>]+>/g, function (m) { return m === "<span class=\"none\">нет данных<\/span>" ? "<span class='none'>нет данных</span>" : m; }) + "</div>" + "<div class='mval' style='color:" + cls + "'>" + (v == null && e.why && e.why[key] && /EBITDA/i.test(e.why[key]) && e.ebitda != null && e.ebitda <= 0 ? "EBITDA ≤ 0" : fmtR(v).replace(/<[^>]+>/g, function (m) { return m === "<span class=\"none\">нет данных<\/span>" ? "<span class='none'>нет данных</span>" : m; })) + "</div>" +
"<div class='mhint'>" + normLine(e, key) + "</div>" + "<div class='mhint'>" + normLine(e, key) + "</div>" +
(e.why && e.why[key] ? "<div class='mhint' style='color:var(--kt-ai-status-warn-fg)'>" + esc(e.why[key]) + "</div>" : "") + (e.why && e.why[key] ? "<div class='mhint' style='color:var(--kt-ai-status-warn-fg)'>" + esc(e.why[key]) + "</div>" : "") +
"<div class='kfu-formula'>" + formula + "</div></div>"; "<div class='kfu-formula'>" + formula + "</div></div>";

View File

@ -20,7 +20,7 @@
.kfu-shell { display: grid; grid-template-columns: var(--kt-ai-sidebar-width) minmax(0, 1fr); min-height: 100dvh; } .kfu-shell { display: grid; grid-template-columns: var(--kt-ai-sidebar-width) minmax(0, 1fr); min-height: 100dvh; }
.kfu-main { min-width: 0; background: var(--kt-ai-bg); display: flex; flex-direction: column; } .kfu-main { min-width: 0; background: var(--kt-ai-bg); display: flex; flex-direction: column; }
.kfu-content { padding: var(--kt-ai-space-8) var(--kt-ai-space-8) var(--kt-ai-space-11); max-width: 1440px; width: 100%; margin: 0 auto; } .kfu-content { box-sizing: border-box; width: 100%; min-width: 0; padding: var(--kt-ai-space-8) var(--kt-ai-space-8) var(--kt-ai-space-11); max-width: 1440px; margin: 0 auto; }
.kfu-title-row { display: flex; align-items: baseline; gap: var(--kt-ai-space-4); margin-bottom: var(--kt-ai-space-5); flex-wrap: wrap; } .kfu-title-row { display: flex; align-items: baseline; gap: var(--kt-ai-space-4); margin-bottom: var(--kt-ai-space-5); flex-wrap: wrap; }
.kfu-title-row h1 { font-size: var(--kt-ai-text-xl); font-weight: 400; margin: 0; letter-spacing: -.02em; } .kfu-title-row h1 { font-size: var(--kt-ai-text-xl); font-weight: 400; margin: 0; letter-spacing: -.02em; }
@ -43,7 +43,7 @@
.kfu-toolbar .kt-ai-select { min-width: 150px; width: auto; } .kfu-toolbar .kt-ai-select { min-width: 150px; width: auto; }
.kfu-toolbar .kt-ai-checkbox { display: inline-flex; align-items: center; gap: 6px; font-size: var(--kt-ai-text-sm); color: var(--kt-ai-fg-muted); } .kfu-toolbar .kt-ai-checkbox { display: inline-flex; align-items: center; gap: 6px; font-size: var(--kt-ai-text-sm); color: var(--kt-ai-fg-muted); }
.kfu-table-wrap { background: var(--kt-ai-card-bg); border: 1px solid var(--kt-ai-card-border); border-radius: var(--vibe-card-radius); .kfu-table-wrap { box-sizing: border-box; max-width: 100%; background: var(--kt-ai-card-bg); border: 1px solid var(--kt-ai-card-border); border-radius: var(--vibe-card-radius);
overflow-x: auto; box-shadow: var(--kt-ai-card-shadow); } overflow-x: auto; box-shadow: var(--kt-ai-card-shadow); }
.kfu-table { width: 100%; border-collapse: collapse; table-layout: fixed; } .kfu-table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.kfu-table colgroup col:nth-child(1) { width: 34%; } .kfu-table colgroup col:nth-child(1) { width: 34%; }