diff --git a/static/admin/monitor.js b/static/admin/monitor.js
index abb489d..217c513 100644
--- a/static/admin/monitor.js
+++ b/static/admin/monitor.js
@@ -2268,6 +2268,8 @@ function closeTestModal(){
}
// ================== Tab: 维护 - Tailscale 管理 ==================
+// 与其他表格共用 setListPager/applyListPager 统一逻辑(搜索 + 分页)
+let _tsDevices=[];
async function loadTailscaleDevices(){
const tb=document.getElementById('tb-tailscale');
const st=document.getElementById('ts-status');
@@ -2284,27 +2286,35 @@ async function loadTailscaleDevices(){
return;
}
if(hint)hint.textContent='';
- const devs=r.devices||[];
- if(!devs.length){tb.innerHTML='
| tailnet 暂无设备 |
';if(st)st.textContent='';return;}
- tb.innerHTML=devs.map(d=>{
- const ip=(d.addresses||[])[0]||'-';
- return ''+
- ''+esc(d.hostname||'-')+' | '+
- ''+esc(d.name||'-')+' | '+
- ''+esc(ip)+' | '+
- ''+esc(d.os||'-')+' | '+
- ''+((d.online===true)?'在线':(d.online===false?'离线':'最近在线'))+' | '+
- ''+(d.authorized?'已授权':'未授权')+' | '+
- ''+(d.key_expiry_disabled?'永不过期':'会过期')+' | '+
- ''+
- ' '+
- ' '+
- ' '+
- ' '+
- ''+
- ' |
';
- }).join('');
- if(st)st.textContent='共 '+devs.length+' 台设备';
+ _tsDevices=r.devices||[];
+ setListPager('tailscale',{
+ data:()=>_tsDevices,
+ filter:(d,kw)=>((d.hostname||'').toLowerCase().includes(kw)||(d.name||'').toLowerCase().includes(kw)||(d.addresses||[]).join(',').includes(kw)),
+ render:renderTsRow,
+ tbody:'tb-tailscale',pager:'pager-tailscale',pageSize:10,
+ empty:'| tailnet 暂无设备 |
'
+ });
+ applyListPager('tailscale');
+ initListSearch('tailscale','search-tailscale');
+ if(st)st.textContent='共 '+_tsDevices.length+' 台设备';
+}
+function renderTsRow(d){
+ const ip=(d.addresses||[])[0]||'-';
+ return ''+
+ ''+esc(d.hostname||'-')+' | '+
+ ''+esc(d.name||'-')+' | '+
+ ''+esc(ip)+' | '+
+ ''+esc(d.os||'-')+' | '+
+ ''+((d.online===true)?'在线':(d.online===false?'离线':'最近在线'))+' | '+
+ ''+(d.authorized?'已授权':'未授权')+' | '+
+ ''+(d.key_expiry_disabled?'永不过期':'会过期')+' | '+
+ ''+
+ ' '+
+ ' '+
+ ' '+
+ ' '+
+ ''+
+ ' |
';
}
function renameTailscaleDevice(id, current){
const name=prompt('修改显示名(只改名称,不影响主机名):', current||'');
diff --git a/templates/admin/monitor.html b/templates/admin/monitor.html
index df2392b..253620d 100644
--- a/templates/admin/monitor.html
+++ b/templates/admin/monitor.html
@@ -523,6 +523,7 @@ select.form-control{cursor:pointer}
+
@@ -531,7 +532,8 @@ select.form-control{cursor:pointer}
| 点击"刷新设备"加载 |
- 设备 IP 由 tailnet 自动分配,不可修改(只读展示);"密钥不过期"= 关闭设备密钥验证,设备不会被定期踢下线;auth key 生成后只显示一次,请立即复制。
+
+ "设置IP"可修改设备 IPv4(会断开当前连接,平台 serial 随之变化,需同步 STF 设备池);"密钥不过期"= 关闭设备密钥验证,设备不会被定期踢下线;auth key 生成后只显示一次,请立即复制。