feat(pay): 支付跳转功能

- 账号管理:补充订阅状态管理、TeamManager上传说明
 - 新增「支付升级」功能模块描述
 - 系统设置:补充 CPA配置和 TeamManager配置项
This commit is contained in:
cnlimiter
2026-03-16 17:04:54 +08:00
parent c5ab1747c6
commit 19eb172eee
18 changed files with 1174 additions and 3 deletions

View File

@@ -57,6 +57,7 @@
<a href="/" class="nav-link">注册</a>
<a href="/accounts" class="nav-link active">账号管理</a>
<a href="/email-services" class="nav-link">邮箱服务</a>
<a href="/payment" class="nav-link">支付</a>
<a href="/settings" class="nav-link">设置</a>
</div>
<button class="theme-toggle" onclick="theme.toggle()" title="切换主题">
@@ -126,6 +127,12 @@
<button class="btn btn-success" id="batch-upload-cpa-btn" disabled title="批量上传到CPA">
☁️ 上传CPA
</button>
<button class="btn btn-info" id="batch-check-sub-btn" disabled title="批量检测订阅状态">
🔍 检测订阅
</button>
<button class="btn btn-success" id="batch-upload-tm-btn" disabled title="批量上传到Team Manager">
🚀 上传TM
</button>
<button class="btn btn-danger" id="batch-delete-btn" disabled>
🗑️ 批量删除
</button>
@@ -157,13 +164,14 @@
<th style="width: 120px;">邮箱服务</th>
<th style="width: 80px;">状态</th>
<th style="width: 80px;">CPA</th>
<th style="width: 80px;">订阅</th>
<th style="width: 140px;">最后刷新</th>
<th style="width: 150px;">操作</th>
<th style="width: 170px;">操作</th>
</tr>
</thead>
<tbody id="accounts-table">
<tr>
<td colspan="9">
<td colspan="11">
<div class="empty-state">
<div class="skeleton skeleton-text" style="width: 60%;"></div>
<div class="skeleton skeleton-text" style="width: 80%;"></div>

View File

@@ -18,6 +18,7 @@
<a href="/" class="nav-link">注册</a>
<a href="/accounts" class="nav-link">账号管理</a>
<a href="/email-services" class="nav-link active">邮箱服务</a>
<a href="/payment" class="nav-link">支付</a>
<a href="/settings" class="nav-link">设置</a>
</div>
<button class="theme-toggle" onclick="theme.toggle()" title="切换主题">

View File

@@ -106,6 +106,7 @@
<a href="/" class="nav-link active">注册</a>
<a href="/accounts" class="nav-link">账号管理</a>
<a href="/email-services" class="nav-link">邮箱服务</a>
<a href="/payment" class="nav-link">支付</a>
<a href="/settings" class="nav-link">设置</a>
</div>
<button class="theme-toggle" onclick="theme.toggle()" title="切换主题">

147
templates/payment.html Normal file
View File

@@ -0,0 +1,147 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>支付升级 - OpenAI 注册系统</title>
<link rel="stylesheet" href="/static/css/style.css">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>💳</text></svg>">
<style>
.plan-cards {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
margin-bottom: 20px;
}
.plan-card {
border: 2px solid var(--border-color);
border-radius: 8px;
padding: 20px;
cursor: pointer;
transition: border-color 0.2s, box-shadow 0.2s;
text-align: center;
}
.plan-card:hover {
border-color: var(--primary-color);
}
.plan-card.selected {
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(99,102,241,0.15);
}
.plan-card h3 { margin: 0 0 8px; font-size: 1.2rem; }
.plan-card p { margin: 0; color: var(--text-secondary); font-size: 0.9rem; }
.team-options { display: none; }
.team-options.show { display: block; }
.link-box {
display: none;
margin-top: 16px;
}
.link-box.show { display: block; }
.link-text {
width: 100%;
font-family: var(--font-mono);
font-size: 0.8rem;
padding: 10px;
border: 1px solid var(--border-color);
border-radius: 6px;
background: var(--bg-secondary);
color: var(--text-primary);
resize: vertical;
min-height: 80px;
}
</style>
</head>
<body>
<div class="container">
<!-- 导航栏 -->
<nav class="navbar">
<div class="nav-brand">
<h1>OpenAI 注册系统</h1>
</div>
<div class="nav-links">
<a href="/" class="nav-link">注册</a>
<a href="/accounts" class="nav-link">账号管理</a>
<a href="/email-services" class="nav-link">邮箱服务</a>
<a href="/payment" class="nav-link active">支付</a>
<a href="/settings" class="nav-link">设置</a>
</div>
<button class="theme-toggle" onclick="theme.toggle()" title="切换主题">🌙</button>
</nav>
<!-- 主内容区 -->
<main class="main-content">
<div class="page-header">
<h2>支付升级</h2>
<p class="subtitle">为账号生成 Plus 或 Team 订阅支付链接</p>
</div>
<div class="card">
<div class="card-header">
<h3>选择套餐</h3>
</div>
<div class="card-body">
<!-- 套餐选择 -->
<div class="plan-cards">
<div class="plan-card selected" id="plan-plus" onclick="selectPlan('plus')">
<h3>Plus</h3>
<p>个人订阅,$20/月</p>
</div>
<div class="plan-card" id="plan-team" onclick="selectPlan('team')">
<h3>Team</h3>
<p>团队订阅,按座位计费</p>
</div>
</div>
<!-- 账号选择 -->
<div class="form-group">
<label for="account-select">选择账号</label>
<select id="account-select" style="width:100%">
<option value="">-- 加载中... --</option>
</select>
</div>
<!-- Team 额外参数 -->
<div class="team-options" id="team-options">
<div class="form-row">
<div class="form-group">
<label for="workspace-name">工作区名称</label>
<input type="text" id="workspace-name" value="MyTeam" placeholder="MyTeam">
</div>
<div class="form-group">
<label for="seat-quantity">座位数量</label>
<input type="number" id="seat-quantity" value="5" min="1" max="100">
</div>
<div class="form-group">
<label for="price-interval">计费周期</label>
<select id="price-interval">
<option value="month">月付</option>
<option value="year">年付</option>
</select>
</div>
</div>
</div>
<!-- 操作区 -->
<div class="form-actions">
<button class="btn btn-primary" onclick="generateLink()">生成支付链接</button>
</div>
<!-- 链接结果 -->
<div class="link-box" id="link-box">
<label>支付链接</label>
<textarea class="link-text" id="link-text" readonly></textarea>
<div class="form-actions" style="margin-top:10px">
<button class="btn btn-secondary" onclick="copyLink()">复制链接</button>
<button class="btn btn-primary" onclick="openIncognito()">无痕打开浏览器</button>
</div>
<p class="hint" id="open-status"></p>
</div>
</div>
</div>
</main>
</div>
<script src="/static/js/utils.js"></script>
<script src="/static/js/payment.js"></script>
</body>
</html>

View File

@@ -18,6 +18,7 @@
<a href="/" class="nav-link">注册</a>
<a href="/accounts" class="nav-link">账号管理</a>
<a href="/email-services" class="nav-link">邮箱服务</a>
<a href="/payment" class="nav-link">支付</a>
<a href="/settings" class="nav-link active">设置</a>
</div>
<button class="theme-toggle" onclick="theme.toggle()" title="切换主题">
@@ -36,6 +37,7 @@
<div class="tabs">
<button class="tab-btn active" data-tab="proxy">🌐 代理设置</button>
<button class="tab-btn" data-tab="cpa">☁️ CPA上传</button>
<button class="tab-btn" data-tab="team-manager">🚀 Team Manager</button>
<button class="tab-btn" data-tab="outlook">📮 Outlook配置</button>
<button class="tab-btn" data-tab="registration">⚙️ 注册配置</button>
<button class="tab-btn" data-tab="email-code">📧 验证码配置</button>
@@ -269,6 +271,44 @@
</div>
</div>
<!-- Team Manager 设置 -->
<div class="tab-content" id="team-manager-tab">
<div class="card">
<div class="card-header">
<h3>Team Manager 配置</h3>
<span class="hint">配置 Team Manager 账号导入功能</span>
</div>
<div class="card-body">
<form id="tm-form">
<div class="form-group">
<label>
<input type="checkbox" id="tm-enabled" name="enabled">
启用 Team Manager 上传
</label>
<p class="hint">启用后可在账号管理页面将账号导入 Team Manager 平台</p>
</div>
<div class="form-group">
<label for="tm-api-url">API URL</label>
<input type="text" id="tm-api-url" name="api_url" placeholder="例如: https://tm.example.com">
<p class="hint">Team Manager 平台的 API 地址</p>
</div>
<div class="form-group">
<label for="tm-api-key">API Key</label>
<input type="password" id="tm-api-key" name="api_key" placeholder="留空则保持原值" autocomplete="new-password">
<p class="hint">Team Manager 平台的认证 Key</p>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">💾 保存设置</button>
<button type="button" class="btn btn-secondary" id="test-tm-btn">🔌 测试连接</button>
</div>
</form>
</div>
</div>
</div>
<!-- Outlook 配置 -->
<div class="tab-content" id="outlook-tab">
<div class="card">