diff --git a/adk-rust/crates/detmir-portal/src/static/app.js b/adk-rust/crates/detmir-portal/src/static/app.js index 3d7c959..7830fd0 100644 --- a/adk-rust/crates/detmir-portal/src/static/app.js +++ b/adk-rust/crates/detmir-portal/src/static/app.js @@ -261,27 +261,6 @@ function setViewMode(mode) { setTab("operator"); return; } - if (state.operatorData && state.reports) { - const content = document.getElementById("content"); - if (content) { - content.innerHTML = renderOperator(state.operatorData, state.reports, { cases: state.cases }); - } - setLoadStatus("READY", "Данные готовы", 100); - consumePendingScroll(); - if (mode === "security" && !state.cases) { - loadJson("/cases") - .then(cases => { - state.cases = cases; - if (currentViewMode() === "security" && state.tab === "operator" && content) { - content.innerHTML = renderOperator(state.operatorData, state.reports, { cases: state.cases }); - } - }) - .catch(() => { - state.cases = { ok: false, cases: [] }; - }); - } - return; - } refresh({ stage: VIEW_MODES[mode].stage }); } @@ -479,7 +458,11 @@ function hasTabData(tab, payload) { const report = payload.report || {}; return (Array.isArray(report.kpis) && report.kpis.length > 0) || (Array.isArray(report.executive_points) && report.executive_points.length > 0) - || (Array.isArray(payload.data?.workforce) && payload.data.workforce.length > 0); + || (Array.isArray(payload.data?.workforce) && payload.data.workforce.length > 0) + || Boolean(report.workforce && Object.keys(report.workforce).length > 0) + || Boolean(report.security_events_summary) + || (Array.isArray(report.risk_incident_candidates) && report.risk_incident_candidates.length > 0) + || (Array.isArray(report.forensics?.investigations) && report.forensics.investigations.length > 0); } if (tab === "employees") { return Array.isArray(payload.data?.workforce) && payload.data.workforce.length > 0; @@ -2313,6 +2296,14 @@ function renderSecurityEventsSummary(summary, options = {}) { const title = options.compact ? "События безопасности" : "События безопасности за 24 часа"; + const compactStateText = disabled && options.compact + ? "Детализация скрыта для роли" + : stateText; + const compactModeText = disabled && options.compact + ? "Без ИБ-детализации" + : disabled + ? localModeText + : "Агрегированная сводка"; const subtitle = disabled ? `${stateText}. ${localModeText}.` : fallback @@ -2328,14 +2319,14 @@ function renderSecurityEventsSummary(summary, options = {}) {
${ui(stateText)}
+${ui(compactStateText)}