@@ -2885,6 +2885,15 @@ def render_user_dashboard_html(
28852885 <div id=\"infra_status_body\" style=\"margin-top:10px\"><span class=\"empty\" data-i18n=\"dash.status.loading\">로딩 중…</span></div>
28862886 </section>
28872887 <!-- PC 자산 현황 (Fleet: 전체/온라인/오프라인) — 자산 탭에서 이동 -->
2888+ <!-- 증적 공백 / 오늘의 작업 큐 (admin·security 전용) -->
2889+ <section class=\"card\" id=\"evidence_gap_card\">
2890+ <div style=\"display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px\">
2891+ <h2 style=\"margin:0\" data-i18n=\"dash.gap.title\">오늘의 작업 큐 (증적 공백)</h2>
2892+ <span id=\"evidence_gap_ts\" style=\"font-size:12px;color:#4b5563\"></span>
2893+ </div>
2894+ <div class=\"subtext\" data-i18n=\"dash.gap.sub\">아직 증적이 안 남은 미조치 항목이에요. 카드를 누르면 해당 탭으로 가요.</div>
2895+ <div id=\"evidence_gap_box\" style=\"margin-top:10px\"><span class=\"empty\" data-i18n=\"dash.dyn.loading\">로딩 중…</span></div>
2896+ </section>
28882897 <section class=\"card\" id=\"fleet_status_section\">
28892898 <div style=\"display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px\">
28902899 <h2 style=\"margin:0\" data-i18n=\"dash.fleet.title\">PC 자산 현황</h2>
@@ -3079,15 +3088,6 @@ def render_user_dashboard_html(
30793088
30803089 <!-- Trivy Vulnerability Section -->
30813090 <div id=\"assets_trivy_section\" class=\"hidden\">
3082- <!-- 증적 공백 / 오늘의 작업 큐 (admin·security 전용) -->
3083- <section class=\"card\" id=\"evidence_gap_card\">
3084- <div style=\"display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px\">
3085- <h2 style=\"margin:0\" data-i18n=\"dash.gap.title\">오늘의 작업 큐 (증적 공백)</h2>
3086- <span id=\"evidence_gap_ts\" style=\"font-size:12px;color:#4b5563\"></span>
3087- </div>
3088- <div class=\"subtext\" data-i18n=\"dash.gap.sub\">아직 증적이 안 남은 미조치 항목이에요. 카드를 누르면 해당 탭으로 가요.</div>
3089- <div id=\"evidence_gap_box\" style=\"margin-top:10px\"><span class=\"empty\" data-i18n=\"dash.dyn.loading\">로딩 중…</span></div>
3090- </section>
30913091 <!-- 위험성 평가 매트릭스 (R-4) — 더블클릭 시 팝업 (카드 요약은 여기, 매트릭스는 모달) -->
30923092 <section class=\"card\" id=\"risk_matrix_card\" ondblclick=\"openRiskMatrixModal()\" style=\"cursor:pointer\">
30933093 <div style=\"display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px\">
@@ -5045,6 +5045,9 @@ def render_user_dashboard_html(
50455045 ${_kv(tt('dash.dyn.lbl.platform','플랫폼'), escapeHtml((h.platform||'').trim()||'-'))}
50465046 ${_kv(tt('dash.mine.importance','중요도'), impStr)}
50475047 ${_kv(tt('dash.mine.category','분류'), escapeHtml((h.category||'').trim()||'-'))}
5048+ ${h.isms_control?_kv(tt('dash.dyn.lbl.isms_control','ISMS-P 통제'), `<span style=\\"color:#2563eb\\">${escapeHtml(h.isms_control)}</span>`):''}
5049+ ${h.iso27001_control?_kv('ISO 27001', `<span style=\\"color:#2563eb\\">${escapeHtml(h.iso27001_control)}</span>`):''}
5050+ ${h.latest_metric?_kv(tt('dash.dyn.lbl.latest_metric','최근 메트릭'), escapeHtml(h.latest_metric)+': '+escapeHtml(h.latest_value||'-')):''}
50485051 ${_kv(tt('dash.dyn.lbl.status','상태'), `<span class=\\\"badge ${h.status==='online'?'online':h.status==='offline'?'offline':'unknown'}\\\">${escapeHtml(h.status||'-')}</span>`)}
50495052 ${_kv('IP', `<span style=\\\"font-family:monospace\\\">${escapeHtml(h.primary_ip||'-')}</span>`)}
50505053 ${_kv(tt('dash.dyn.lbl.owner_team','담당자 / 팀'), ownerCell)}
@@ -5186,25 +5189,17 @@ def render_user_dashboard_html(
51865189 return `<tr ondblclick=\"openHostDetail('${escapeHtml(h.hostname)}')\" style=\"cursor:pointer\" title=\"${tt('dash.mine.dblclick','더블클릭하면 상세·조치현황')}\">
51875190 <td><strong>${escapeHtml(h.hostname)}</strong>${zabbixLink ? '<br>' + zabbixLink : ''}</td>
51885191 <td style=\"font-size:12px\">${escapeHtml(h.category || '-')}</td>
5189- ${showImp ? `<td>${impBadge}</td>` : ''}
5190- ${showIsms ? `<td style=\"font-size:11px;color:#2563eb\">${escapeHtml(h.isms_control || '-')}</td>` : ''}
5191- ${showIso ? `<td style=\"font-size:11px;color:#2563eb\">${escapeHtml(h.iso27001_control || '-')}</td>` : ''}
51925192 <td>${escapeHtml(h.primary_ip)}</td>
51935193 <td><span class=\"badge ${statusCls}\">${escapeHtml(h.status)}</span></td>
5194- <td style=\"font-size:12px;color:#4b5563\">${metricStr}</td>
51955194 <td>${ownerStr}</td>
51965195 </tr>`;
51975196 }).join('');
51985197 containerEl.innerHTML = `<table style=\"width:100%;border-collapse:collapse;font-size:13px;\">
51995198 <thead><tr style=\"background:#f9fafb;\">
52005199 <th style=\"padding:8px;color:#2563eb\">${tt('dash.dyn.lbl.hostname','호스트명')}</th>
52015200 <th style=\"padding:8px;color:#2563eb\">${tt('dash.dyn.lbl.category','분류')}</th>
5202- ${showImp ? '<th style=\"padding:8px;color:#a16207\">' + tt('dash.dyn.lbl.importance','중요도') + '</th>' : ''}
5203- ${showIsms ? '<th style=\"padding:8px;color:#2563eb\">' + tt('dash.dyn.lbl.isms_control','ISMS-P 통제') + '</th>' : ''}
5204- ${showIso ? '<th style=\"padding:8px;color:#2563eb\">ISO 27001</th>' : ''}
52055201 <th style=\"padding:8px;color:#2563eb\">IP</th>
52065202 <th style=\"padding:8px;color:#2563eb\">${tt('dash.dyn.lbl.status','상태')}</th>
5207- <th style=\"padding:8px;color:#4b5563\">${tt('dash.dyn.lbl.latest_metric','최근 메트릭')}</th>
52085203 <th style=\"padding:8px;color:#16a34a\">${tt('dash.dyn.lbl.owner_team','담당자 / 팀')}</th>
52095204 </tr></thead>
52105205 <tbody>${rows}</tbody>
0 commit comments