diff --git a/.commitmsg b/.commitmsg index 5fde0c7..6a05fa9 100644 --- a/.commitmsg +++ b/.commitmsg @@ -1,5 +1,6 @@ -fix: pre-scan WiFi before entering AP mode +ui: redesign WiFi list with signal bars and cleaner layout -wlan0 cannot scan while in AP mode (hardware limitation). -Now scan nearby networks before starting hotspot and cache -the results for the captive portal page. +- Replace + +
加载中...
@@ -200,6 +208,7 @@ select:focus,input:focus{border-color:#4a6cf7}
+
@@ -214,35 +223,56 @@ select:focus,input:focus{border-color:#4a6cf7} function $(id){return document.getElementById(id)} function setStatus(msg,type){var s=$('status');s.textContent=msg;s.className='status '+type} +function signalBars(pct){ + var bars=[4,7,10,14]; + var on=pct>=80?4:pct>=60?3:pct>=40?2:1; + return bars.map(function(h,i){ + return ''; + }).join(''); +} + +function selectWifi(ssid){ + $('selectedSsid').value=ssid; + var items=document.querySelectorAll('.wifi-item'); + items.forEach(function(el){el.classList.toggle('active',el.dataset.ssid===ssid)}); +} + async function doScan(){ - $('connectBtn').disabled=true; - setStatus('正在扫描...','info'); + var list=$('wifiList'); + list.innerHTML='
加载中...
'; try{ var r=await fetch('/api/scan'); var d=await r.json(); - var sel=$('ssid'); - sel.innerHTML=''; - (d.wifi||[]).forEach(function(w){ - var o=document.createElement('option'); - o.value=w.ssid; - o.textContent=w.ssid+' ('+w.signal+'% '+w.security+')'; - sel.appendChild(o); + var arr=d.wifi||[]; + if(arr.length===0){ + list.innerHTML='
未发现网络,请手动输入
'; + return; + } + list.innerHTML=''; + arr.forEach(function(w){ + var div=document.createElement('div'); + div.className='wifi-item'; + div.dataset.ssid=w.ssid; + div.onclick=function(){selectWifi(w.ssid)}; + var lock=w.security&&w.security!=='Open'?'🔒':''; + div.innerHTML=''+w.ssid+'' + +''+signalBars(w.signal)+'' + +''+lock+''; + list.appendChild(div); }); - var msg='发现 '+d.wifi.length+' 个网络'; - if(d.wifi.length===0) msg='未发现网络,请手动输入 SSID'; - setStatus(msg,'ok'); - }catch(e){setStatus('扫描失败: '+e.message,'err')} - $('connectBtn').disabled=false; + }catch(e){ + list.innerHTML='
加载失败
'; + } } function toggleManual(){ var on=$('manualToggle').checked; $('manualSsid').style.display=on?'block':'none'; - $('ssid').style.display=on?'none':'block'; + $('wifiList').style.display=on?'none':'block'; } async function doConnect(){ - var ssid=$('manualToggle').checked?$('manualSsid').value:$('ssid').value; + var ssid=$('manualToggle').checked?$('manualSsid').value:$('selectedSsid').value; var pw=$('password').value; if(!ssid){setStatus('请选择或输入 WiFi','err');return} $('connectBtn').disabled=true; @@ -251,7 +281,7 @@ async function doConnect(){ var r=await fetch('/api/connect',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({ssid:ssid,password:pw})}); var d=await r.json(); if(d.success){ - setStatus('✓ 设备正在连接 WiFi,热点将关闭。如连接失败,热点会自动恢复,请重新连接配网。','ok'); + setStatus('✓ 设备正在连接 WiFi,热点将关闭。如连接失败,热点会自动恢复。','ok'); }else{ setStatus('失败: '+(d.error||'未知错误'),'err'); $('connectBtn').disabled=false;