diff --git a/apps/node-agent/packaging/build.py b/apps/node-agent/packaging/build.py index fb9b0a2..71984fc 100644 --- a/apps/node-agent/packaging/build.py +++ b/apps/node-agent/packaging/build.py @@ -11,7 +11,7 @@ import sys from build_deb import build, VERSION, BRAND_SHA256 ROOT = Path(__file__).resolve().parents[1] -DG_COMMIT = "3adeb33b1b300bf7add342a5c3a863fda15dc8a6" +DG_COMMIT = "999864e5b0a81555823cfa1ea6e8cf8a417c37f1" def guideline_sources(): diff --git a/apps/node-agent/packaging/build_deb.py b/apps/node-agent/packaging/build_deb.py index 197acf2..1d0138f 100644 --- a/apps/node-agent/packaging/build_deb.py +++ b/apps/node-agent/packaging/build_deb.py @@ -13,7 +13,7 @@ import tarfile ROOT = Path(__file__).resolve().parents[1] -VERSION = "0.6.10" +VERSION = "0.6.11" BRAND_SHA256 = "8bfee8ca9f98e0db48d98aae3af4b32493b8593e18b064a0239d513d824182af" diff --git a/docs/node/05_SENSOR_HOST_AND_SHARED_CONTROL.md b/docs/node/05_SENSOR_HOST_AND_SHARED_CONTROL.md index edc89b4..dbf5796 100644 --- a/docs/node/05_SENSOR_HOST_AND_SHARED_CONTROL.md +++ b/docs/node/05_SENSOR_HOST_AND_SHARED_CONTROL.md @@ -225,3 +225,9 @@ StatusBadge. Убрано дублирование сообщения об от По указанию владельца из обеих шапок удалён `HeaderWorkspace` со знаком перед верхней навигацией: профиля компании в этих приложениях нет. Основной бренд приложения и пользовательское меню сохраняют каноническую композицию. + +Дополнение 0.6.11: индикатор подключённого устройства перенесён между иконкой +и текстовым блоком, по вертикальному центру строки. Размещение принадлежит +общему ResourceRow.statusPlacement в Design Guideline. Кнопка обновления +списка перенесена к правому краю его панели. Подготовка по-прежнему показывает +линейный progress между текстом и действиями, без дублирования лампы. diff --git a/packages/sensor-ui/src/SensorWorkspace.tsx b/packages/sensor-ui/src/SensorWorkspace.tsx index 6ab6d3d..5bc0d02 100644 --- a/packages/sensor-ui/src/SensorWorkspace.tsx +++ b/packages/sensor-ui/src/SensorWorkspace.tsx @@ -23,13 +23,13 @@ export function SensorWorkspace({transport,enabled=true,onDetailChange}:{transpo const editingCurrent=inventory?.items.find(v=>v.id===editing?.id); useEffect(()=>{onDetailChange?.(!!device);},[!!device,onDetailChange]); return
{device?setSelected(null)} refresh={refresh} failure={failure}/>:<> -
{!enabled?'БК недоступен':fresh?'Сведения с БК':'Нет свежих сведений'}void refresh()}>
+
{!enabled?'БК недоступен':fresh?'Сведения с БК':'Нет свежих сведений'}void refresh()}>
{!inventory?:connected.length===0?:{connected.map(item=>{ const operation=inventory.operations?.find(v=>v.device_id===item.id&&v.state==='running');const busy=!!operation||localBusy===item.id; const configured=item.configured??item.snapshot.enrollment==='enrolled'; const prep=operation?.action_id==='prepare'&&inventory.preparation&&(inventory.preparation.started_at*1000>=Date.parse(operation.requested_at)-1000)?inventory.preparation:undefined; const status=sensorStatus(item,enabled&&fresh);const label=busy?'Подготовка или команда выполняется':status.label; - return
  • } title={item.name} description={item.model} metadata={USB {item.usb}} aria-busy={busy} progress={busy?{label, value:prep?.state==='running'?prep.steps.filter(s=>s.state==='complete').length/(prep.steps.length+1):prep?.state==='complete'?5/6:undefined,valueText:prep?.steps.find(s=>s.state==='running')?.label??'Проверка кадров камеры'}:undefined} status={{configured&&item.online?null:label}} actions={<>{!configured&&void action(item,'prepare')}>}{setEditing(item);setName(item.name);}}>setSelected(item.id)}>}/>
  • ;})}
    } + return
  • } title={item.name} description={item.model} metadata={USB {item.usb}} statusPlacement={configured?'leading':'trailing'} aria-busy={busy} progress={busy?{label, value:prep?.state==='running'?prep.steps.filter(s=>s.state==='complete').length/(prep.steps.length+1):prep?.state==='complete'?5/6:undefined,valueText:prep?.steps.find(s=>s.state==='running')?.label??'Проверка кадров камеры'}:undefined} status={{configured&&item.online?null:label}} actions={<>{!configured&&void action(item,'prepare')}>}{setEditing(item);setName(item.name);}}>setSelected(item.id)}>}/>
  • ;})}} {(inventory?.operations?.some(v=>v.state==='running'&&v.action_id==='prepare'&&!!inventory.preparation&&inventory.preparation.started_at*1000>=Date.parse(v.requested_at)-1000))&&inventory?.preparation&&{inventory.preparation.steps.map(step=>:step.state==='running'?:{step.state==='error'?'Ошибка':step.state==='blocked'?'Не выполнено':'Ожидает'}}/>) }:Ожидает}/>} } setEditing(null)} footer={}>
    setName(e.target.value)} disabled={!!localBusy}/>{editing&&(editing.configured??editing.snapshot.enrollment==='enrolled')&&{const target=editing;setEditing(null);void action(target,'prepare');}}>Обновить}/>}
    diff --git a/packages/sensor-ui/src/sensors.css b/packages/sensor-ui/src/sensors.css index 5f66d59..462b06c 100644 --- a/packages/sensor-ui/src/sensors.css +++ b/packages/sensor-ui/src/sensors.css @@ -1,5 +1,6 @@ .sensor-workspace, .sensor-content {display:grid;gap:var(--nodedc-space-4);min-width:0} .sensor-actions {display:flex;align-items:center;gap:var(--nodedc-space-3);flex-wrap:wrap} +.sensor-inventory-toolbar {justify-content:space-between} .sensor-fields {display:grid;gap:var(--nodedc-space-4);grid-template-columns:repeat(auto-fit,minmax(220px,1fr))} .sensor-workspace p,.sensor-note {font-size:var(--nodedc-font-size-sm);color:var(--nodedc-text-secondary);line-height:1.5} .sensor-facts {display:grid;gap:var(--nodedc-space-4);font-size:var(--nodedc-font-size-sm)}