From 83547c0b2e5368eec36ec9f3d31ed242698e131d Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 22 May 2026 10:11:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E8=BF=87=E6=BB=A4=20+=20=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加分类过滤下拉框(对接/api/servers/?category=参数) - 自动从服务器数据提取分类选项填充下拉框 - 搜索框也匹配分类字段 - 添加刷新按钮 - 切换分类时自动重新加载服务器列表 Co-Authored-By: Claude Sonnet 4.6 --- web/app/servers.html | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/web/app/servers.html b/web/app/servers.html index d895fb61..49c7b371 100644 --- a/web/app/servers.html +++ b/web/app/servers.html @@ -10,7 +10,11 @@

服务器列表

+ +
@@ -99,13 +103,24 @@ async function loadServers(){ try{ - const res=await apiFetch(API+'/servers/'); + const category=document.getElementById('categoryFilter').value; + const url=API+'/servers/'+(category?'?category='+encodeURIComponent(category):''); + const res=await apiFetch(url); if(!res) return; const data=await res.json(); const servers=data.items||data; const total=data.total||servers.length; _serversCache={};servers.forEach(s=>_serversCache[s.id]=s); document.getElementById('serverCount').textContent=`共 ${total} 台`; + + // Populate category filter from server data (only on first load) + if(!document.getElementById('categoryFilter').dataset.loaded){ + const categories=[...new Set(servers.map(s=>s.category).filter(Boolean))].sort(); + const sel=document.getElementById('categoryFilter'); + const currentVal=sel.value; + sel.innerHTML=''+categories.map(c=>``).join(''); + sel.dataset.loaded='1'; + } const tbody=document.getElementById('serversTbody'); if(!servers.length){tbody.innerHTML='暂无服务器';return} tbody.innerHTML=servers.map(s=>` @@ -220,7 +235,15 @@ function esc(s){if(!s)return'';const d=document.createElement('div');d.textContent=s;return d.innerHTML} function fmtTime(t){if(!t)return'--';return new Date(t+'Z').toLocaleString('zh-CN',{month:'short',day:'numeric',hour:'2-digit',minute:'2-digit'})} - document.getElementById('searchInput').addEventListener('input',()=>{const q=document.getElementById('searchInput').value.toLowerCase();document.querySelectorAll('#serversTbody tr').forEach(r=>{const name=r.querySelector('td:nth-child(2)')?.textContent.toLowerCase()||'';const addr=r.querySelector('td:nth-child(3)')?.textContent.toLowerCase()||'';r.style.display=(!q||name.includes(q)||addr.includes(q))?'':'none'})}); + document.getElementById('searchInput').addEventListener('input',()=>{ + const q=document.getElementById('searchInput').value.toLowerCase(); + document.querySelectorAll('#serversTbody tr').forEach(r=>{ + const name=r.querySelector('td:nth-child(2)')?.textContent.toLowerCase()||''; + const addr=r.querySelector('td:nth-child(3)')?.textContent.toLowerCase()||''; + const cat=r.querySelector('td:nth-child(4)')?.textContent.toLowerCase()||''; + r.style.display=(!q||name.includes(q)||addr.includes(q)||cat.includes(q))?'':'none'; + }); + }); loadServers();