diff --git a/webclient-vue/src/components/device/DeviceTable.vue b/webclient-vue/src/components/device/DeviceTable.vue
index 0231afe..2ff6b44 100644
--- a/webclient-vue/src/components/device/DeviceTable.vue
+++ b/webclient-vue/src/components/device/DeviceTable.vue
@@ -12,17 +12,16 @@
-
{{ row.name || row.alias || `Device #${row.id}` }}
+
+ {{ row.name || row.alias || `Device #${row.id}` }}
+
+
{{ row.alias }} — {{ row.device_ip || '—' }}
-
-
-
-
{
const cols = [
{ key: "device", label: "Device" },
- { key: "connect", label: "Connect" },
{ key: "state", label: "State" },
];
if (props.showActions) {
@@ -85,6 +82,10 @@
return TYPE_ICONS[type] || TYPE_ICONS.relay;
}
+function connectionClass(status) {
+ return status === "active" ? "is-online" : "is-offline";
+}
+
function stateFor(device) {
return (
devicesStore.stateByDeviceId[String(device.id)] || {
@@ -124,6 +125,30 @@
gap: 2px;
}
+.device-name-row {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+}
+
+.status-dot {
+ display: inline-block;
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ flex-shrink: 0;
+}
+
+.status-dot.is-online {
+ background: var(--color-accent);
+ box-shadow: 0 0 0 2px rgba(0, 245, 160, 0.25);
+}
+
+.status-dot.is-offline {
+ background: var(--color-danger);
+ box-shadow: 0 0 0 2px rgba(255, 61, 0, 0.25);
+}
+
.device-info small {
color: var(--color-muted);
font-size: 12px;