feat: 全站默认只看在线——监控页/大屏/待连接池同步过滤离线设备(可切换查看全部);18051 main 旧实例已停止(STF 已删,旧代码无保留意义)

This commit is contained in:
2026-09-01 08:58:21 +08:00
parent ac7997176d
commit 22ba9272bd
4 changed files with 23 additions and 4 deletions
+7 -1
View File
@@ -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,
+2 -2
View File
@@ -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){
+3
View File
@@ -343,6 +343,9 @@ body{background:var(--bg);font-family:var(--body);color:var(--text);font-size:14
<button class="btn" onclick="screenAllDevices('on')" data-perm="devices" title="所有在线设备亮屏并解锁">一键亮屏</button>
<button class="btn" onclick="screenAllDevices('off')" data-perm="devices" title="所有在线设备息屏(运行中任务会中断)">一键息屏</button>
<button class="btn" onclick="loadMonitor()">刷新</button>
<label style="display:inline-flex;align-items:center;gap:4px;margin:0 6px">
<input type="checkbox" id="monitor-filter-online" checked onchange="loadMonitor()"> 只看在线
</label>
<input class="form-control list-search" id="search-devices" placeholder="搜索设备/型号/App/任务...">
<span class="hint"><span id="fg-status"></span> · 每 5 秒自动刷新 · <span id="srvTime"></span> · <span id="sel-count">未选中</span></span>
</div>
+11 -1
View File
@@ -116,6 +116,9 @@ main{position:relative;z-index:2;height:calc(100vh - 88px);overflow-y:auto;paddi
<header>
<div class="title">设备监控大屏</div>
<div class="stats" id="wall-stats"></div>
<label class="wall-btn" style="display:inline-flex;align-items:center;gap:4px;cursor:pointer">
<input type="checkbox" id="wall-filter-online" checked onchange="refreshStatus()"> 只看在线
</label>
<button class="wall-btn" id="btn-wake-all" onclick="wakeAll()">💡 一键亮屏</button>
<div class="clock"><span id="wall-clock">--:--:--</span><div class="date" id="wall-date"></div></div>
</header>
@@ -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;