chore: remove admin.html from repo
This commit is contained in:
-122
@@ -1,122 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<title>审核面板 - TurboSu</title>
|
||||
<style>
|
||||
:root{--accent:#3482FF;--radius-md:12px}
|
||||
.theme-dark{--bg:#000;--bg2:#242424;--bg3:#2D2D2D;--text:rgba(255,255,255,.9);--text2:rgba(255,255,255,.62);--text3:rgba(255,255,255,.42);--border:rgba(255,255,255,.08);--card:rgba(36,36,36,.82)}
|
||||
.theme-light{--bg:#fff;--bg2:#f7f7f7;--bg3:#f0f0f0;--text:#000;--text2:#8C93B0;--text3:#959595;--border:rgba(0,0,0,.08);--card:rgba(255,255,255,.82)}
|
||||
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
|
||||
body{font-family:-apple-system,'PingFang SC',sans-serif;background:var(--bg);color:var(--text);padding:24px;max-width:960px;margin:0 auto}
|
||||
h1{font-size:24px;font-weight:700;margin-bottom:8px}
|
||||
h2{font-size:18px;font-weight:600;margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--border)}
|
||||
.hint{font-size:12px;color:var(--text3);margin-bottom:20px}
|
||||
.login{max-width:360px;margin:100px auto;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:24px}
|
||||
.login h3{margin-bottom:16px}
|
||||
input{padding:10px;border:1px solid var(--border);border-radius:8px;background:var(--bg3);color:var(--text);width:100%;margin-bottom:10px;font-size:14px}
|
||||
.btn{padding:10px 20px;border-radius:8px;font-size:14px;font-weight:500;border:none;cursor:pointer;margin:2px}
|
||||
.btn-primary{background:var(--accent);color:#fff}
|
||||
.btn-success{background:#34C759;color:#fff}
|
||||
.btn-danger{background:#E94634;color:#fff}
|
||||
.btn-sm{padding:6px 14px;font-size:12px}
|
||||
.item{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:16px;margin-bottom:10px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
|
||||
.item-info{flex:1;min-width:200px}
|
||||
.item-name{font-weight:600;font-size:14px}
|
||||
.item-meta{font-size:12px;color:var(--text3);margin-top:4px}
|
||||
.badge{display:inline-block;padding:2px 8px;border-radius:8px;font-size:11px;font-weight:500}
|
||||
.badge-pending{background:rgba(255,159,10,.15);color:#FF9F0A}
|
||||
.badge-approved{background:rgba(52,199,89,.12);color:#34C759}
|
||||
.tabs{display:flex;gap:8px;margin-bottom:16px}
|
||||
.tab{padding:8px 16px;border-radius:8px;cursor:pointer;border:1px solid var(--border);background:var(--bg2);color:var(--text2);font-size:14px}
|
||||
.tab.active{background:var(--accent);color:#fff;border-color:var(--accent)}
|
||||
.loading{color:var(--text3);padding:40px;text-align:center}
|
||||
.empty{color:var(--text3);padding:40px;text-align:center}
|
||||
footer{padding:20px 0;text-align:center;color:var(--text3);font-size:12px;margin-top:40px;border-top:1px solid var(--border)}
|
||||
footer a{color:var(--accent)}
|
||||
</style>
|
||||
</head>
|
||||
<body class="theme-dark">
|
||||
<div id="login-view">
|
||||
<div class="login">
|
||||
<h3>管理员登录</h3>
|
||||
<input id="auth-email" type="email" placeholder="管理员邮箱">
|
||||
<input id="auth-pass" type="password" placeholder="密码" onkeydown="if(event.key==='Enter')login()">
|
||||
<button class="btn btn-primary" onclick="login()">登录</button>
|
||||
<div id="login-err" style="color:#E94634;font-size:13px;margin-top:8px"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="main-view" style="display:none">
|
||||
<h1>内容审核</h1>
|
||||
<p class="hint">仪表盘和场景上传审核面板</p>
|
||||
<div class="tabs">
|
||||
<button class="tab active" id="tab-pending" onclick="showTab('pending')">待审核</button>
|
||||
<button class="tab" id="tab-approved" onclick="showTab('approved')">已通过</button>
|
||||
<span style="flex:1"></span>
|
||||
<button class="btn btn-sm" onclick="logout()" style="background:var(--bg2);color:var(--text2)">退出</button>
|
||||
</div>
|
||||
<div id="content"></div>
|
||||
</div>
|
||||
|
||||
<footer>TurboSu 审核面板</footer>
|
||||
|
||||
<script>
|
||||
let TOKEN='', TAB='pending';
|
||||
|
||||
async function login(){
|
||||
const email=document.getElementById('auth-email').value;
|
||||
const pass=document.getElementById('auth-pass').value;
|
||||
try{
|
||||
const res=await fetch('/api/collections/_superusers/auth-with-password',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({identity:email,password:pass})});
|
||||
const data=await res.json();
|
||||
if(data.token){TOKEN=data.token;document.getElementById('login-view').style.display='none';document.getElementById('main-view').style.display='block';loadItems()}
|
||||
else document.getElementById('login-err').textContent=data.message||'登录失败';
|
||||
}catch(e){document.getElementById('login-err').textContent='连接失败'}
|
||||
}
|
||||
|
||||
function logout(){TOKEN='';document.getElementById('login-view').style.display='';document.getElementById('main-view').style.display='none'}
|
||||
|
||||
function showTab(t){TAB=t;document.getElementById('tab-pending').classList.toggle('active',t==='pending');document.getElementById('tab-approved').classList.toggle('active',t==='approved');loadItems()}
|
||||
|
||||
async function loadItems(){
|
||||
const el=document.getElementById('content');el.innerHTML='<div class="loading">加载中...</div>';
|
||||
const pending=TAB==='pending'?'true':'false';
|
||||
try{
|
||||
const [d,r1]=await Promise.all([fetch('/api/collections/dashboards/records?filter=(dashb_pending='+pending+')',{headers:{'Authorization':'Bearer '+TOKEN}}),fetch('/api/collections/scenes/records?filter=(dashb_pending='+pending+')',{headers:{'Authorization':'Bearer '+TOKEN}})]);
|
||||
const dash=(await d.json()).items||[],scenes=(await r1.json()).items||[];
|
||||
let html='';
|
||||
if(dash.length){html+='<h2>仪表盘 ('+dash.length+')</h2>'+dash.map(item=>itemHtml(item,'dashboards')).join('')}
|
||||
else html+='<h2>仪表盘</h2><div class="empty">暂无</div>';
|
||||
if(scenes.length||TAB==='approved'){html+='<h2>场景 ('+scenes.length+')</h2>'+scenes.map(item=>itemHtml(item,'scenes')).join('')}
|
||||
else html+='<h2>场景</h2><div class="empty">暂无</div>';
|
||||
el.innerHTML=html;
|
||||
}catch(e){el.innerHTML='<div class="empty">加载失败</div>'}
|
||||
}
|
||||
|
||||
function itemHtml(item,col){
|
||||
const isScene=col==='scenes';
|
||||
return `<div class="item">
|
||||
<div class="item-info">
|
||||
<div class="item-name">${isScene?'🎬':(item.icon||'📊')} ${item.name||'?'} <span style="color:var(--text3);font-weight:400">v${item.version||'1.0'}</span></div>
|
||||
<div class="item-meta">${item.author||''} · ${isScene?(item.game_id||''):(item.category||'')} · ${item.downloads||0} 下载 · <span class="badge badge-${TAB==='pending'?'pending':'approved'}">${TAB==='pending'?'待审核':'已通过'}</span></div>
|
||||
</div>
|
||||
<div style="display:flex;gap:4px;flex-shrink:0">
|
||||
${TAB==='pending'?`<button class="btn btn-sm btn-success" onclick="approve('${item.id}','${col}')">通过</button><button class="btn btn-sm btn-danger" onclick="reject('${item.id}','${col}')">驳回</button>`:''}
|
||||
${item.file?`<a class="btn btn-sm" style="background:var(--bg2);color:var(--text2);text-decoration:none" href="/api/files/${col}/${item.id}/${item.file}" download>下载</a>`:''}
|
||||
</div></div>`;
|
||||
}
|
||||
|
||||
async function approve(id,col){
|
||||
await fetch('/api/collections/'+col+'/records/'+id,{method:'PATCH',headers:{'Authorization':'Bearer '+TOKEN,'Content-Type':'application/json'},body:'{"dashb_pending":false}'});
|
||||
loadItems();
|
||||
}
|
||||
async function reject(id,col){
|
||||
if(!confirm('确定驳回?此操作将删除该内容'))return;
|
||||
await fetch('/api/collections/'+col+'/records/'+id,{method:'DELETE',headers:{'Authorization':'Bearer '+TOKEN}});
|
||||
loadItems();
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user