Files

129 lines
6.7 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>后台管理 - Echo Tavern</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}" />
</head>
<body
class="admin-page"
data-user='{{ user | tojson | safe if user else "null" }}'
data-theme="{{ user.theme if user else 'dopamine' }}"
data-section="{{ admin_section or 'users' }}"
>
<header class="lobby-topbar">
<div class="brand-block">
<h1>后台管理</h1>
<p>管理员控制台:按分区配置与治理</p>
</div>
<div class="top-actions">
<span class="user-badge {% if user.avatar_url %}has-avatar{% endif %}" style="--avatar-color: {{ user.avatar_color }}; --avatar-url: url('{{ user.avatar_url }}')">
<i></i>{{ user.username }}(管理员)
</span>
<a class="link-btn" href="{{ url_for('season_admin_page') }}">赛季后台</a>
<a class="link-btn" href="{{ url_for('index') }}">返回大厅</a>
</div>
</header>
<main class="admin-grid">
<aside class="card admin-nav">
<a href="{{ url_for('admin_section_page', section='users') }}" class="{% if admin_section == 'users' %}active{% endif %}">用户权限</a>
<a href="{{ url_for('admin_section_page', section='rooms') }}" class="{% if admin_section == 'rooms' %}active{% endif %}">房间监控</a>
<a href="{{ url_for('admin_section_page', section='cards') }}" class="{% if admin_section == 'cards' %}active{% endif %}">游戏卡治理</a>
<a href="{{ url_for('admin_section_page', section='modules') }}" class="{% if admin_section == 'modules' %}active{% endif %}">模组治理</a>
<a href="{{ url_for('admin_section_page', section='badges') }}" class="{% if admin_section == 'badges' %}active{% endif %}">职业徽章</a>
<a href="{{ url_for('admin_section_page', section='activation_codes') }}" class="{% if admin_section == 'activation_codes' %}active{% endif %}">激活码</a>
<a href="{{ url_for('admin_section_page', section='shop_items') }}" class="{% if admin_section == 'shop_items' %}active{% endif %}">商品管理</a>
<a href="{{ url_for('admin_section_page', section='shop_orders') }}" class="{% if admin_section == 'shop_orders' %}active{% endif %}">订单管理</a>
<a href="{{ url_for('admin_section_page', section='points') }}" class="{% if admin_section == 'points' %}active{% endif %}">积分管理</a>
<a href="{{ url_for('admin_section_page', section='finance') }}" class="{% if admin_section == 'finance' %}active{% endif %}">财务统计</a>
<a href="{{ url_for('season_admin_page') }}">赛季后台</a>
<a href="{{ url_for('admin_section_page', section='oauth') }}" class="{% if admin_section == 'oauth' %}active{% endif %}">OAuth 配置</a>
</aside>
<section class="card admin-panel">
{% if admin_section == 'users' %}
<h2>用户权限管理</h2>
<div id="users-table" class="table-wrap"></div>
{% elif admin_section == 'rooms' %}
<h2>房间与游戏监控</h2>
<div id="rooms-table" class="table-wrap"></div>
{% elif admin_section == 'cards' %}
<h2>游戏卡治理</h2>
<div id="cards-table" class="table-wrap"></div>
{% elif admin_section == 'modules' %}
<h2>扩展模组治理</h2>
<div id="modules-table" class="table-wrap"></div>
{% elif admin_section == 'badges' %}
<h2>职业徽章配置</h2>
<p class="helper-text">这里配置长期成长职业徽章。保存后将实时影响徽章解锁与开局加成逻辑。</p>
<div id="badge-list" class="badge-config-list"></div>
<div class="admin-inline-actions">
<button id="badge-add" type="button" class="secondary-btn">新增徽章</button>
<button id="badge-reset" type="button" class="ghost-btn">恢复默认</button>
<button id="badge-save" type="button">保存徽章配置</button>
</div>
{% elif admin_section == 'activation_codes' %}
<h2>激活码管理</h2>
<div class="admin-inline-actions">
<button id="code-generate-btn" type="button" class="secondary-btn">批量生成激活码</button>
</div>
<div id="activation-codes-table" class="table-wrap"></div>
{% elif admin_section == 'shop_items' %}
<h2>商品管理</h2>
<div class="admin-inline-actions">
<button id="shop-item-create-btn" type="button" class="secondary-btn">新增商品</button>
</div>
<div id="shop-items-table" class="table-wrap"></div>
{% elif admin_section == 'shop_orders' %}
<h2>订单管理</h2>
<div id="shop-orders-table" class="table-wrap"></div>
{% elif admin_section == 'points' %}
<h2>积分管理</h2>
<div id="points-users-table" class="table-wrap"></div>
<h3 style="margin-top: 0.8rem;">积分流水</h3>
<div id="points-transactions-table" class="table-wrap"></div>
{% elif admin_section == 'finance' %}
<h2>财务统计</h2>
<div id="finance-summary" class="badge-config-list"></div>
{% else %}
<h2>Linux DO OAuth 配置</h2>
<form id="linuxdo-oauth-form">
<label for="linuxdo-enabled">启用 OAuth</label>
<select id="linuxdo-enabled" name="enabled">
<option value="false">关闭</option>
<option value="true">开启</option>
</select>
<label for="linuxdo-client-id">Client ID</label>
<input id="linuxdo-client-id" name="client_id" placeholder="请输入 client_id" />
<label for="linuxdo-client-secret">Client Secret</label>
<input id="linuxdo-client-secret" name="client_secret" type="password" placeholder="留空则保持不变" />
<label for="linuxdo-authorize-url">Authorize URL</label>
<input id="linuxdo-authorize-url" name="authorize_url" placeholder="https://connect.linux.do/oauth2/authorize" />
<label for="linuxdo-token-url">Token URL</label>
<input id="linuxdo-token-url" name="token_url" placeholder="https://connect.linux.do/oauth2/token" />
<label for="linuxdo-userinfo-url">Userinfo URL</label>
<input id="linuxdo-userinfo-url" name="userinfo_url" placeholder="https://connect.linux.do/api/user" />
<label for="linuxdo-scope">Scope</label>
<input id="linuxdo-scope" name="scope" placeholder="read" />
<button id="linuxdo-save" type="submit" class="secondary-btn">保存 OAuth 配置</button>
</form>
{% endif %}
</section>
</main>
<section id="status" class="status-banner"></section>
<script src="{{ url_for('static', filename='js/theme.js') }}"></script>
<script src="{{ url_for('static', filename='js/invite_notify.js') }}"></script>
<script src="{{ url_for('static', filename='js/admin.js') }}"></script>
</body>
</html>