Files
blog/write-go/cmd/writeserver/admin_page.html
T
2026-06-01 17:57:22 +08:00

68 lines
3.5 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
<title>WriteServer - Blog CMS</title>
<style>
:root{color-scheme:dark;--bg:#0f172a;--card:#1e293b;--text:#e2e8f0;--muted:#94a3b8;--accent:#38bdf8;--accent-hover:#7dd3fc;--danger:#fca5a5;--success:#86efac;--line:#334155}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;min-height:100vh;padding:24px}
.container{max-width:900px;margin:0 auto}
h1{font-size:22px;font-weight:700;margin-bottom:4px}
.sub{font-size:14px;color:var(--muted);margin-bottom:24px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;margin-bottom:24px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:20px}
.card-title{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px}
.card-value{font-size:28px;font-weight:700}
.card-value.blue{color:var(--accent)}
.links{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:24px}
a.btn{display:inline-block;padding:10px 20px;border-radius:8px;font-size:14px;font-weight:600;text-decoration:none;transition:all 0.15s}
a.btn-primary{background:var(--accent);color:#0f172a}
a.btn-primary:hover{background:var(--accent-hover)}
a.btn-secondary{background:transparent;border:1px solid var(--line);color:var(--text)}
a.btn-secondary:hover{background:rgba(255,255,255,0.05)}
.status{display:flex;align-items:center;gap:8px;font-size:14px;margin-bottom:16px}
.dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.dot.green{background:var(--success);box-shadow:0 0 6px var(--success)}
.quick{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.ql{padding:5px 12px;border-radius:6px;background:rgba(255,255,255,0.04);border:1px solid var(--line);color:var(--accent);text-decoration:none;font-size:12px;font-weight:500}
.ql:hover{background:rgba(255,255,255,0.08)}
.footer{margin-top:32px;text-align:center;font-size:12px;color:var(--muted)}
</style>
</head>
<body>
<div class="container">
<h1>WriteServer</h1>
<p class="sub">Blog CMS - Go Edition</p>
<div class="status"><div class="dot green"></div><span>Server running</span></div>
<div class="grid">
<div class="card"><div class="card-title">Posts</div><div class="card-value blue" id="posts">-</div></div>
<div class="card"><div class="card-title">RSS Feeds</div><div class="card-value" id="feeds">-</div></div>
<div class="card"><div class="card-title">Links</div><div class="card-value" id="links">-</div></div>
<div class="card"><div class="card-title">Recycle Bin</div><div class="card-value" id="recycle">-</div></div>
</div>
<div class="links">
<a class="btn btn-primary" href="http://localhost:8017/">Open Admin Panel</a>
<a class="btn btn-secondary" href="/api/posts">API: Posts</a>
<a class="btn btn-secondary" href="/api/stats">API: Stats</a>
</div>
<div class="quick">
<a class="ql" href="/api/recycle">Recycle Bin</a>
<a class="ql" href="/api/rss/feeds">RSS Feeds</a>
<a class="ql" href="/api/rss/links">Links</a>
</div>
<div class="footer">WriteServer - Go</div>
</div>
<script>
fetch('/api/stats').then(r=>r.json()).then(d=>{
document.getElementById('posts').textContent=d.posts||0;
document.getElementById('feeds').textContent=d.feeds||0;
document.getElementById('links').textContent=d.links||0;
});
fetch('/api/recycle').then(r=>r.json()).then(d=>{
document.getElementById('recycle').textContent=Array.isArray(d.items)?d.items.length:0;
});
</script>
</body>
</html>