From ceec0d797c8efb2add94fbd3b6d8ac971f76e1f3 Mon Sep 17 00:00:00 2001 From: OpenClaw Agent Date: Thu, 17 Sep 2026 03:45:46 +0800 Subject: [PATCH] style: refine mobile admin navigation --- index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 5092d5f..6add97e 100644 --- a/index.html +++ b/index.html @@ -4,9 +4,9 @@ AM Downloader +.user-groups{display:grid;gap:16px}.user-group{border:1px solid #22304a;border-radius:14px;padding:14px;background:rgba(255,255,255,.02)}.group-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.group-list{display:grid;gap:8px}.user-row{align-items:center}.user-row .toolbar{display:flex;gap:6px;flex-wrap:wrap}.user-row .meta{line-height:1.55}.admin-shell{display:grid;gap:16px}.admin-header{padding:6px 2px}.admin-header h2{margin:4px 0;font-size:27px}.eyebrow{font-size:11px;letter-spacing:1.5px;color:#10b981;font-weight:800}.admin-header p{margin:0;color:#8492a7}.admin-dashboard{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.admin-tile{border:1px solid #22304a;background:#111b2c;color:#e7edf7;border-radius:16px;padding:20px;text-align:left;display:grid;gap:6px;cursor:pointer}.admin-tile:hover{background:#162238;border-color:#30435f}.admin-tile span{font-size:22px}.admin-tile strong{font-size:16px}.admin-tile small{color:#8492a7}.admin-panel{background:#111b2c;border:1px solid #22304a;border-radius:17px;padding:16px}.panel-head{display:flex;align-items:center;gap:12px;margin-bottom:16px}.panel-head>div:nth-child(2){flex:1}.user-filters{display:flex;gap:7px;overflow:auto;margin:14px 0}.user-filters button{border:1px solid #283750;background:#0e1829;color:#aab6c7;border-radius:10px;padding:8px 13px;white-space:nowrap}.user-filters button.active{background:#1c2b42;color:#fff}.user-group{margin-top:14px}.group-head{display:flex;align-items:center;justify-content:space-between;padding:4px 2px 8px}.group-list{display:grid;gap:7px}.user-row{grid-template-columns:minmax(0,1fr) auto}.user-card{background:#0d1728;border:1px solid #23314a;border-radius:13px;padding:13px}.user-main{display:flex;justify-content:space-between;gap:12px;align-items:center}.user-stats{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px}.stat-chip{background:#17243a;color:#b9c6d8;padding:4px 8px;border-radius:8px;font-size:11px}.user-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}.admin-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}.summary-card{background:#0d1728;border:1px solid #23314a;border-radius:11px;padding:12px}.summary-card strong{display:block;font-size:18px;margin-top:4px}.ledger{display:grid;gap:7px;margin-top:12px}.ledger-item{padding:11px 12px;border:1px solid #23314a;background:#0d1728;border-radius:10px}.positive{color:#34d399}.negative{color:#fb7185}.detail-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.detail-card{background:#0d1728;border:1px solid #23314a;border-radius:13px;padding:14px}.detail-card h4{margin:0 0 10px}.detail-value{font-size:24px;font-weight:800}.detail-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}@media(max-width:720px){.admin-dashboard{grid-template-columns:1fr}.admin-panel{padding:12px}.admin-create>*{flex-basis:100%}.user-main{align-items:flex-start;flex-direction:column}.user-actions .btn{flex:1;min-width:100px}.admin-summary{grid-template-columns:1fr 1fr}.detail-grid{grid-template-columns:1fr}}
AM Downloader
搜索 · 下载 · WebDAV 同步
@@ -38,7 +38,7 @@ async function toggleUser(id,status){const u=adminUsersCache.find(x=>x.id===id); async function revokeBatch(id){try{await api('/admin/redeem/'+id+'/revoke',{method:'POST'});loadRedeemAdmin()}catch(e){alert('撤销失败:'+e.message)}} function hideLogin(){document.getElementById('loginOverlay').style.display='none'} -async function initAuth(){try{const x=await api('/auth/me');const u=x.user;window.currentUser=u;window.isAdmin=u.role==='admin';document.getElementById('userPill').textContent=u.username+' · '+u.role;document.getElementById('settings').style.display=u.role==='admin'?'':'none';document.getElementById('adminNav').style.display=u.role==='admin'?'':'none';document.getElementById('mobileAdminNav').style.display=u.role==='admin'?'':'none';document.querySelectorAll('[data-view=\"settings\"]').forEach(x=>x.style.display=u.role==='admin'?'':'none');const c=await api('/credits');document.getElementById('userPill').textContent=u.username+' · '+u.role+' · 积分 '+c.balance+' / 可用 '+c.available;hideLogin();return true}catch(e){showLogin();return false}} +async function initAuth(){try{const x=await api('/auth/me');const u=x.user;window.currentUser=u;window.isAdmin=u.role==='admin';document.getElementById('userPill').textContent=u.username+' · '+u.role;document.getElementById('settings').style.display=u.role==='admin'?'':'none';document.getElementById('adminNav').style.display=u.role==='admin'?'':'none';document.getElementById('mobileAdminNav').style.display=u.role==='admin'?'':'none';document.getElementById('accountAdminEntry').style.display=u.role==='admin'?'':'none';document.querySelectorAll('[data-view=\"settings\"]').forEach(x=>x.style.display=u.role==='admin'?'':'none');const c=await api('/credits');document.getElementById('userPill').textContent=u.username+' · '+u.role+' · 积分 '+c.balance+' / 可用 '+c.available;hideLogin();return true}catch(e){showLogin();return false}} document.querySelectorAll('[data-admin-view]').forEach(b=>b.addEventListener('click',()=>showAdminPanel('admin'+b.dataset.adminView.charAt(0).toUpperCase()+b.dataset.adminView.slice(1)+'Panel')));document.querySelectorAll('.admin-back').forEach(b=>b.addEventListener('click',()=>showAdminPanel('adminDashboard')));document.querySelectorAll('[data-role-filter]').forEach(b=>b.addEventListener('click',()=>{document.querySelectorAll('[data-role-filter]').forEach(x=>x.classList.remove('active'));b.classList.add('active');adminRoleFilter=b.dataset.roleFilter;renderAdminUsers()}));$('backToUsers').addEventListener('click',()=>showAdminPanel('adminUsersPanel')); $('loginForm').addEventListener('submit',async e=>{e.preventDefault();$('loginError').textContent='登录中…';try{const x=await fetch('/api/auth/login',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({username:$('loginUser').value.trim(),password:$('loginPass').value})});if(!x.ok)throw new Error('用户名或密码错误');await initAuth();go(location.hash.slice(1)||'home');loadRecent();loadAccount()}catch(e){$('loginError').textContent=e.message}}); $('logoutBtn').addEventListener('click',async()=>{try{await api('/auth/logout',{method:'POST'})}finally{showLogin()}});