diff --git a/static/admin/monitor.js b/static/admin/monitor.js
index 2e5a9b3..529b9f0 100644
--- a/static/admin/monitor.js
+++ b/static/admin/monitor.js
@@ -307,8 +307,14 @@ function renderDevices(){
if(_sig===_devicesSig)return;
_devicesSig=_sig;
// 排序由 applyListPager 统一处理(sortValue + _lpSort)
+ // 「只看在线」勾选时过滤离线设备(默认勾选)
+ const onlyOnline=document.getElementById('monitor-filter-online')
+ ? document.getElementById('monitor-filter-online').checked : true;
setListPager('devices',{
- data:()=>_statusData.devices||[],
+ data:()=>{
+ const all=_statusData.devices||[];
+ return onlyOnline? all.filter(d=>d.present) : all;
+ },
filter:(dev,kw)=>((dev.serial||'').toLowerCase().includes(kw)||(dev.model||'').toLowerCase().includes(kw)||(dev.foreground_app||'').toLowerCase().includes(kw)||(dev.task_job||'').toLowerCase().includes(kw)||(dev.current_action||'').toLowerCase().includes(kw)),
sortValue:_sortValue,
render:renderDeviceRow,
diff --git a/static/admin/tools.js b/static/admin/tools.js
index 4c7f1d9..657ca2a 100644
--- a/static/admin/tools.js
+++ b/static/admin/tools.js
@@ -59,8 +59,8 @@ function loadDiscovery(){
if(r.last_error)txt+=' · ⚠ '+esc(r.last_error);
status.textContent=txt;
}else{status.textContent='尚未扫描';}
- // 待连接表格
- const rows=(r.pending||[]);
+ // 待连接表格:只显示在线设备(离线候选不可确认连接,隐藏;恢复在线后自动出现)
+ const rows=(r.pending||[]).filter(x=>x.online);
const tb=document.getElementById('tb-discovery');
if(!tb)return;
if(!rows.length){
diff --git a/templates/admin/monitor.html b/templates/admin/monitor.html
index 5b41db9..93c4534 100644
--- a/templates/admin/monitor.html
+++ b/templates/admin/monitor.html
@@ -343,6 +343,9 @@ body{background:var(--bg);font-family:var(--body);color:var(--text);font-size:14
+
· 每 5 秒自动刷新 · · 未选中
diff --git a/templates/admin/wall.html b/templates/admin/wall.html
index e057783..c995fa9 100644
--- a/templates/admin/wall.html
+++ b/templates/admin/wall.html
@@ -116,6 +116,9 @@ main{position:relative;z-index:2;height:calc(100vh - 88px);overflow-y:auto;paddi
@@ -203,11 +206,18 @@ async function refreshStatus(){
JSON.stringify(_devices.map(d=>[d.serial,d.present,d.worker_status,d.task_job,d.current_action,d.progress,d.device_name,d.model]));
_devices=devs;
renderStats(devs);
- if(changed)renderGrid(devs);
+ if(changed)renderGrid(visibleDevs(devs));
// 操作弹窗打开时同步刷新其标题状态
if(_ctrlSerial)updateCtrlHead();
}
+// 「只看在线」勾选时过滤离线设备(默认勾选)
+function visibleDevs(devs){
+ const onlyOnline=document.getElementById('wall-filter-online')
+ ? document.getElementById('wall-filter-online').checked : true;
+ return onlyOnline? devs.filter(d=>d.present) : devs;
+}
+
function renderStats(devs){
const online=devs.filter(d=>d.present).length;
const running=devs.filter(d=>['running','connecting'].includes(d.worker_status)).length;