diff --git a/internal/webui/index.html b/internal/webui/index.html
index c331315..3b606ab 100644
--- a/internal/webui/index.html
+++ b/internal/webui/index.html
@@ -32,6 +32,8 @@
tr.fdb-row.selected { background: #dbeafe; box-shadow: inset 0.15em 0 0 #2563eb; }
.device-detail-table th, .device-detail-table td { border-bottom: 1px solid #e5e7eb; padding: 6px 8px; font-size: 13px; }
.subtable-wrap { overflow: auto; max-height: 200px; margin-top: 6px; border: 1px solid #e5e7eb; border-radius: 8px; }
+ /* Стабильная высота при «Загрузка…», меньше сдвиг графа/легенды под панелью деталей */
+ #deviceDetailPanel .subtable-wrap { min-height: 140px; }
@@ -395,8 +397,14 @@
return `| ${dip} | ${escapeHtml(r.ping)} | ${escapeHtml(r.name)} | ${escapeHtml(r.snmp)} | ${escapeHtml(r.lldp)} |
`;
})
.join("");
+ updateDeviceRowSelectionHighlight();
+ }
+
+ /** Только подсветка строки — без пересборки таблицы (избегает дёрганья вёрстки/графа). */
+ function updateDeviceRowSelectionHighlight() {
deviceTableBody.querySelectorAll("tr.device-row").forEach((tr) => {
- if (tr.getAttribute("data-ip") === selectedDeviceIP) tr.classList.add("selected");
+ const ip = tr.getAttribute("data-ip");
+ tr.classList.toggle("selected", ip != null && ip === selectedDeviceIP);
});
}
@@ -417,6 +425,7 @@
deviceLldpTextTableBody.innerHTML =
'| Выберите устройство и порт в Таблице 1. |
';
updateDeviceLinksSortIndicators();
+ updateDeviceRowSelectionHighlight();
}
function resolvedLabelRu(resolvedBy) {
@@ -664,7 +673,7 @@
}
selectedDeviceIP = ip;
selectedDeviceLabel.textContent = ip;
- renderDeviceTableBody();
+ updateDeviceRowSelectionHighlight();
deviceLinksTableBody.innerHTML = '| Загрузка… |
';
deviceLldpTextTableBody.innerHTML = '| Загрузка… |
';