V2.0.0: 新增用户权限动态配置、会员套餐配置、数据包购买功能

新功能:
- 用户权限动态配置(翻译次数、页数限制)
- 会员套餐动态配置(名称、价格、周期)
- 数据包购买套餐管理
- 收入统计功能
- 数据包销售排行

技术更新:
- 新增 DynamicConfig 模型支持动态配置
- 新增 DataPackage 和 UserPackage 模型
- 后台管理增加数据包管理模块
This commit is contained in:
2026-04-07 23:26:53 +08:00
commit 2ef5e6da87
37 changed files with 6507 additions and 0 deletions

195
templates/pricing.html Normal file
View File

@@ -0,0 +1,195 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>会员套餐 - PDF翻译助手</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="/static/css/style.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand" href="/">📄 PDF翻译助手</a>
<div class="navbar-nav ms-auto">
<a class="nav-link" href="/">首页</a>
<a class="nav-link" href="/login">登录</a>
</div>
</div>
</nav>
<main class="container my-5">
<h2 class="text-center mb-5">会员套餐</h2>
<div class="row justify-content-center">
<!-- 基础会员 -->
<div class="col-md-4 mb-4">
<div class="card pricing-card h-100">
<div class="card-body text-center">
<h4 class="card-title">基础会员</h4>
<div class="price my-3">¥29<small>/月</small></div>
<ul class="features text-start">
<li>✅ 每日翻译50次</li>
<li>✅ 单文件最大100页</li>
<li>✅ 翻译历史记录</li>
<li>✅ 优先处理队列</li>
<li>✅ 导出PDF格式</li>
</ul>
<button class="btn btn-outline-primary w-100 mt-3">立即购买</button>
</div>
</div>
</div>
<!-- 专业会员 -->
<div class="col-md-4 mb-4">
<div class="card pricing-card h-100 border-primary">
<div class="card-header bg-primary text-white text-center">
<strong>推荐</strong>
</div>
<div class="card-body text-center">
<h4 class="card-title">专业会员</h4>
<div class="price my-3">¥99<small>/月</small></div>
<ul class="features text-start">
<li>✅ 每日翻译200次</li>
<li>✅ 单文件最大500页</li>
<li>✅ 所有基础会员功能</li>
<li>✅ 批量翻译</li>
<li>✅ 自定义术语库</li>
</ul>
<button class="btn btn-primary w-100 mt-3">立即购买</button>
</div>
</div>
</div>
<!-- 企业会员 -->
<div class="col-md-4 mb-4">
<div class="card pricing-card h-100">
<div class="card-body text-center">
<h4 class="card-title">企业会员</h4>
<div class="price my-3">¥999<small>/年</small></div>
<ul class="features text-start">
<li>✅ 翻译次数无限制</li>
<li>✅ 页数无限制</li>
<li>✅ 所有功能解锁</li>
<li>✅ 专属客服支持</li>
<li>✅ API接口调用</li>
</ul>
<button class="btn btn-outline-primary w-100 mt-3">联系购买</button>
</div>
</div>
</div>
</div>
<!-- 功能对比表 -->
<div class="card mt-5">
<div class="card-header">
<h4 class="mb-0">功能对比</h4>
</div>
<div class="card-body">
<table class="table table-striped">
<thead>
<tr>
<th>功能</th>
<th>访客</th>
<th>免费用户</th>
<th>基础会员</th>
<th>专业会员</th>
<th>企业会员</th>
</tr>
</thead>
<tbody>
<tr>
<td>每日翻译次数</td>
<td>3次</td>
<td>10次</td>
<td>50次</td>
<td>200次</td>
<td>无限制</td>
</tr>
<tr>
<td>单文件最大页数</td>
<td>20页</td>
<td>50页</td>
<td>100页</td>
<td>500页</td>
<td>无限制</td>
</tr>
<tr>
<td>翻译缓存</td>
<td class="text-success"></td>
<td class="text-success"></td>
<td class="text-success"></td>
<td class="text-success"></td>
<td class="text-success"></td>
</tr>
<tr>
<td>翻译历史</td>
<td class="text-danger"></td>
<td class="text-success"></td>
<td class="text-success"></td>
<td class="text-success"></td>
<td class="text-success"></td>
</tr>
<tr>
<td>重新翻译</td>
<td class="text-danger"></td>
<td class="text-success"></td>
<td class="text-success"></td>
<td class="text-success"></td>
<td class="text-success"></td>
</tr>
<tr>
<td>对比查看</td>
<td class="text-danger"></td>
<td class="text-success"></td>
<td class="text-success"></td>
<td class="text-success"></td>
<td class="text-success"></td>
</tr>
<tr>
<td>导出PDF</td>
<td class="text-danger"></td>
<td class="text-danger"></td>
<td class="text-success"></td>
<td class="text-success"></td>
<td class="text-success"></td>
</tr>
<tr>
<td>批量翻译</td>
<td class="text-danger"></td>
<td class="text-danger"></td>
<td class="text-danger"></td>
<td class="text-success"></td>
<td class="text-success"></td>
</tr>
<tr>
<td>自定义术语</td>
<td class="text-danger"></td>
<td class="text-danger"></td>
<td class="text-danger"></td>
<td class="text-success"></td>
<td class="text-success"></td>
</tr>
<tr>
<td>API调用</td>
<td class="text-danger"></td>
<td class="text-danger"></td>
<td class="text-danger"></td>
<td class="text-danger"></td>
<td class="text-success"></td>
</tr>
</tbody>
</table>
</div>
</div>
</main>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>