feat(points,store): add activation recharge and full points commerce pages
This commit is contained in:
1 parent
f52cf53067
commit
81cc92efea
21 files changed
+4173
-70
No files matched your search
@@ -19,6 +19,8 @@
|
||||
{% if user %}
|
||||
<a class="link-btn" href="{{ url_for('user_profile_page', username=user.username) }}">我的主页</a>
|
||||
<a class="link-btn" href="{{ url_for('user_achievements_page', username=user.username) }}">我的成就</a>
|
||||
<a class="link-btn" href="{{ url_for('wallet_page') }}">积分中心</a>
|
||||
<a class="link-btn" href="{{ url_for('store_page') }}">积分商城</a>
|
||||
{% endif %}
|
||||
<a class="link-btn" href="{{ url_for('rooms_page') }}">联机大厅</a>
|
||||
<a class="link-btn" href="{{ url_for('leaderboard_page') }}">玩家排行</a>
|
||||
|
||||
@@ -32,6 +32,11 @@
|
||||
<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('admin_section_page', section='oauth') }}" class="{% if admin_section == 'oauth' %}active{% endif %}">OAuth 配置</a>
|
||||
</aside>
|
||||
|
||||
@@ -57,6 +62,29 @@
|
||||
<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">
|
||||
|
||||
@@ -13,6 +13,10 @@
|
||||
<p id="editor-page-subtitle">创建可复用的多人文字冒险卡,支持多状态条、结束条件与扩展系统。</p>
|
||||
</div>
|
||||
<div class="top-actions">
|
||||
{% if user %}
|
||||
<a class="link-btn" href="{{ url_for('wallet_page') }}">积分中心</a>
|
||||
<a class="link-btn" href="{{ url_for('store_page') }}">积分商城</a>
|
||||
{% endif %}
|
||||
<a class="link-btn" href="{{ url_for('plaza_page') }}">返回广场</a>
|
||||
<a class="link-btn" href="{{ url_for('index') }}">返回大厅</a>
|
||||
</div>
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
{% endif %}
|
||||
<a class="link-btn" href="{{ url_for('user_profile_page', username=user.username) }}">我的主页</a>
|
||||
<a class="link-btn" href="{{ url_for('user_achievements_page', username=user.username) }}">我的成就</a>
|
||||
<a class="link-btn" href="{{ url_for('wallet_page') }}">积分中心</a>
|
||||
<a class="link-btn" href="{{ url_for('store_page') }}">积分商城</a>
|
||||
<a class="link-btn" href="{{ url_for('rooms_page') }}">联机大厅</a>
|
||||
<a class="link-btn" href="{{ url_for('leaderboard_page') }}">玩家排行</a>
|
||||
<a class="link-btn" href="{{ url_for('plaza_page') }}">游戏卡广场</a>
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
{% if user %}
|
||||
<a class="link-btn" href="{{ url_for('user_profile_page', username=user.username) }}">我的主页</a>
|
||||
<a class="link-btn" href="{{ url_for('user_achievements_page', username=user.username) }}">我的成就</a>
|
||||
<a class="link-btn" href="{{ url_for('wallet_page') }}">积分中心</a>
|
||||
<a class="link-btn" href="{{ url_for('store_page') }}">积分商城</a>
|
||||
{% endif %}
|
||||
<a class="link-btn" href="{{ url_for('rooms_page') }}">联机大厅</a>
|
||||
<a class="link-btn" href="{{ url_for('index') }}">返回大厅</a>
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
{% if user %}
|
||||
<a class="link-btn" href="{{ url_for('user_profile_page', username=user.username) }}">我的主页</a>
|
||||
<a class="link-btn" href="{{ url_for('user_achievements_page', username=user.username) }}">我的成就</a>
|
||||
<a class="link-btn" href="{{ url_for('wallet_page') }}">积分中心</a>
|
||||
<a class="link-btn" href="{{ url_for('store_page') }}">积分商城</a>
|
||||
{% endif %}
|
||||
<a class="link-btn" href="{{ url_for('leaderboard_page') }}">玩家排行</a>
|
||||
<a class="link-btn" href="{{ url_for('rooms_page') }}">联机大厅</a>
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
{% if user %}
|
||||
<a class="link-btn" href="{{ url_for('user_profile_page', username=user.username) }}">我的主页</a>
|
||||
<a class="link-btn" href="{{ url_for('user_achievements_page', username=user.username) }}">我的成就</a>
|
||||
<a class="link-btn" href="{{ url_for('wallet_page') }}">积分中心</a>
|
||||
<a class="link-btn" href="{{ url_for('store_page') }}">积分商城</a>
|
||||
{% endif %}
|
||||
<a class="link-btn back-home-link" href="/">返回主页</a>
|
||||
<button id="invite-btn" class="secondary-btn" type="button">邀请链接</button>
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
{% if user %}
|
||||
<a class="link-btn" href="{{ url_for('user_profile_page', username=user.username) }}">我的主页</a>
|
||||
<a class="link-btn" href="{{ url_for('user_achievements_page', username=user.username) }}">我的成就</a>
|
||||
<a class="link-btn" href="{{ url_for('wallet_page') }}">积分中心</a>
|
||||
<a class="link-btn" href="{{ url_for('store_page') }}">积分商城</a>
|
||||
{% endif %}
|
||||
<a class="link-btn" id="summary-back-room" href="{{ url_for('room_page', room_id=room_id) }}">返回房间</a>
|
||||
<a class="link-btn" href="{{ url_for('rooms_page') }}">联机大厅</a>
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
{% if user %}
|
||||
<a class="link-btn" href="{{ url_for('user_profile_page', username=user.username) }}">我的主页</a>
|
||||
<a class="link-btn" href="{{ url_for('user_achievements_page', username=user.username) }}">我的成就</a>
|
||||
<a class="link-btn" href="{{ url_for('wallet_page') }}">积分中心</a>
|
||||
<a class="link-btn" href="{{ url_for('store_page') }}">积分商城</a>
|
||||
{% endif %}
|
||||
<a class="link-btn" href="{{ url_for('leaderboard_page') }}">玩家排行</a>
|
||||
<a class="link-btn" href="{{ url_for('plaza_page') }}">游戏卡广场</a>
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
<!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="store-page"
|
||||
data-user='{{ user | tojson | safe if user else "null" }}'
|
||||
data-theme="{{ user.theme if user else 'dopamine' }}">
|
||||
<header class="lobby-topbar">
|
||||
<div class="brand-block">
|
||||
<h1>积分商城</h1>
|
||||
<p>购买游戏卡、模组与装扮特权,消耗积分即时发放权益。</p>
|
||||
</div>
|
||||
<div class="top-actions">
|
||||
{% if user %}
|
||||
<a class="link-btn" href="{{ url_for('user_profile_page', username=user.username) }}">我的主页</a>
|
||||
<a class="link-btn" href="{{ url_for('wallet_page') }}">积分中心</a>
|
||||
<a class="link-btn" href="{{ url_for('user_achievements_page', username=user.username) }}">我的成就</a>
|
||||
{% endif %}
|
||||
<a class="link-btn" href="{{ url_for('plaza_page') }}">游戏卡广场</a>
|
||||
<a class="link-btn" href="{{ url_for('index') }}">返回大厅</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="plaza-grid">
|
||||
<section class="card">
|
||||
<h2>商品列表</h2>
|
||||
<form id="store-search-form">
|
||||
<label for="store-type">商品类型</label>
|
||||
<select id="store-type">
|
||||
<option value="">全部</option>
|
||||
<option value="game_card">游戏卡</option>
|
||||
<option value="module">扩展模组</option>
|
||||
<option value="decoration">装扮</option>
|
||||
<option value="privilege">功能特权</option>
|
||||
<option value="bundle">礼包</option>
|
||||
</select>
|
||||
<label for="store-q">关键词</label>
|
||||
<input id="store-q" maxlength="80" placeholder="输入商品名或描述关键词" />
|
||||
<button type="submit" class="secondary-btn">筛选</button>
|
||||
</form>
|
||||
<div id="store-items" class="cards-grid" style="margin-top: 0.8rem;"></div>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<h2>余额信息</h2>
|
||||
<div id="store-points" class="status-grid"></div>
|
||||
|
||||
<h2 style="margin-top: 1rem;">商品详情</h2>
|
||||
<div id="store-detail" class="profile-hero"></div>
|
||||
|
||||
<h2 style="margin-top: 1rem;">我的权益</h2>
|
||||
<ul id="store-entitlements" class="compact-list"></ul>
|
||||
|
||||
<h2 style="margin-top: 1rem;">最近订单</h2>
|
||||
<div id="store-orders" class="table-wrap"></div>
|
||||
</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/store.js') }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -19,6 +19,8 @@
|
||||
{% if user %}
|
||||
<a class="link-btn" href="{{ url_for('user_profile_page', username=user.username) }}">我的主页</a>
|
||||
<a class="link-btn" href="{{ url_for('user_achievements_page', username=user.username) }}">我的成就</a>
|
||||
<a class="link-btn" href="{{ url_for('wallet_page') }}">积分中心</a>
|
||||
<a class="link-btn" href="{{ url_for('store_page') }}">积分商城</a>
|
||||
{% endif %}
|
||||
<a class="link-btn" href="{{ url_for('rooms_page') }}">联机大厅</a>
|
||||
<a class="link-btn" href="{{ url_for('leaderboard_page') }}">返回排行</a>
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
<!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="wallet-page"
|
||||
data-user='{{ user | tojson | safe if user else "null" }}'
|
||||
data-theme="{{ user.theme if user else 'dopamine' }}">
|
||||
<header class="lobby-topbar">
|
||||
<div class="brand-block">
|
||||
<h1>积分中心</h1>
|
||||
<p>查看余额、兑换激活码、查询积分流水与订单记录。</p>
|
||||
</div>
|
||||
<div class="top-actions">
|
||||
{% if user %}
|
||||
<a class="link-btn" href="{{ url_for('user_profile_page', username=user.username) }}">我的主页</a>
|
||||
<a class="link-btn" href="{{ url_for('user_achievements_page', username=user.username) }}">我的成就</a>
|
||||
<a class="link-btn" href="{{ url_for('store_page') }}">积分商城</a>
|
||||
{% endif %}
|
||||
<a class="link-btn" href="{{ url_for('rooms_page') }}">联机大厅</a>
|
||||
<a class="link-btn" href="{{ url_for('index') }}">返回大厅</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="plaza-grid">
|
||||
<section class="card">
|
||||
<h2>账户概览</h2>
|
||||
<div id="wallet-balance" class="status-grid"></div>
|
||||
|
||||
<h2 style="margin-top: 1rem;">激活码充值</h2>
|
||||
<form id="redeem-form">
|
||||
<label for="redeem-code">输入激活码</label>
|
||||
<input id="redeem-code" maxlength="64" placeholder="例如 ETXXXXXXXXXXXX" required />
|
||||
<button type="submit">立即充值</button>
|
||||
</form>
|
||||
<p class="helper-text">同一激活码仅可使用一次,频繁尝试会触发风控。</p>
|
||||
|
||||
<h2 style="margin-top: 1rem;">到账提醒</h2>
|
||||
<ul id="wallet-rewards" class="compact-list"></ul>
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<h2>积分流水</h2>
|
||||
<div id="wallet-transactions" class="table-wrap"></div>
|
||||
|
||||
<h2 style="margin-top: 1rem;">我的订单</h2>
|
||||
<div id="wallet-orders" class="table-wrap"></div>
|
||||
</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/wallet.js') }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user