From 6bbd4b6dabdcf3fa932e4cd3a5c616a416a7c5f4 Mon Sep 17 00:00:00 2001 From: dv Date: Fri, 10 Apr 2026 11:59:25 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D0=BF=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3=D0=B0=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/ObjectDetail.tsx | 40 +++++++++++++++++++---------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/frontend/src/pages/ObjectDetail.tsx b/frontend/src/pages/ObjectDetail.tsx index 0be2459..095a0cc 100644 --- a/frontend/src/pages/ObjectDetail.tsx +++ b/frontend/src/pages/ObjectDetail.tsx @@ -421,29 +421,40 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?: { title: 'Последний пинг', key: 'monitoring', - onCell: (row: TableRow) => { - if (row._type === 'group') return { colSpan: 0 } - const d = row as DeviceRow - const bg = - d.status === 'online' ? '#f6ffed' : - d.status === 'offline' ? '#fff2f0' : undefined - return bg ? { style: { background: bg } } : {} - }, + onCell: (row: TableRow) => row._type === 'group' ? { colSpan: 0 } : {}, render: (_: unknown, row: TableRow) => { if (row._type === 'group') return null const d = row as DeviceRow + const dotColor = + d.status === 'online' ? '#52c41a' : + d.status === 'offline' ? '#ff4d4f' : '#d9d9d9' + + const dot = ( + + ) + const pingTime = d.last_ping_at ?? d.last_seen if (!pingTime) { return ( - - {d.monitor_enabled ? 'ожидание...' : 'нет данных'} - + + {dot} + + {d.monitor_enabled ? 'ожидание...' : 'нет данных'} + + ) } const pauseIcon = !d.monitor_enabled - ? + ? : null const lastSeenHint = d.last_seen && d.last_ping_at && d.last_ping_at !== d.last_seen @@ -453,9 +464,10 @@ export function ObjectDetailPage({ defaultMode = 'inventory' }: { defaultMode?: const tooltipText = [elapsedAgo(pingTime), lastSeenHint].filter(Boolean).join(' · ') return ( - + + {dot} - + {dayjs(pingTime).format('DD.MM.YYYY HH:mm')}