From 6051c5c2fdb81d044d9fab71da0c57237117bca2 Mon Sep 17 00:00:00 2001
From: butubb <1422726308@qq.com>
Date: Tue, 11 Aug 2026 09:19:41 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20Tailscale=20=E8=AE=BE=E5=A4=87=E8=A1=A8?=
=?UTF-8?q?=E6=8E=A5=E5=85=A5=E7=BB=9F=E4=B8=80=E5=88=86=E9=A1=B5/?=
=?UTF-8?q?=E6=90=9C=E7=B4=A2=E9=80=BB=E8=BE=91=EF=BC=88setListPager?=
=?UTF-8?q?=EF=BC=89=EF=BC=8C=E4=BF=AE=E6=AD=A3=20IP=20=E5=8F=AF=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=E7=9A=84=E8=BF=87=E6=97=B6=E6=8F=90=E7=A4=BA=E6=96=87?=
=?UTF-8?q?=E6=A1=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
static/admin/monitor.js | 52 +++++++++++++++++++++---------------
templates/admin/monitor.html | 4 ++-
2 files changed, 34 insertions(+), 22 deletions(-)
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 生成后只显示一次,请立即复制。