feat(web): 新增更新日志、服务条款、隐私政策页面;关于页更新日志链接修正
- web/dist/changelog/ 版本历史页,收录 v1.0.0–v1.0.29 全部发版记录 - web/dist/terms/ 服务条款页(付费/授权/数据/免责等) - web/dist/privacy/ 隐私政策页(数据收集/使用/共享/用户权利等) - 全站页脚补充 更新日志、服务条款、隐私政策三个链接 - about_screen 「更新日志」按钮链接由 /downloads/ 改为 /changelog/ - 新增 backend/cmd/issue 工具,用于签发指定门店的授权码 token Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+128
-128
@@ -224,9 +224,9 @@ ul.todo-list { list-style: none; margin: 0; padding: 0; }
|
||||
<div class="header-meta">生成于 2026-06-10 · 真相源 todo/todo.json</div>
|
||||
<div class="stats">
|
||||
<div class="stat-pill"><strong>24</strong>全部</div>
|
||||
<div class="stat-pill"><strong>4</strong>待开始</div>
|
||||
<div class="stat-pill"><strong>1</strong>开发中</div>
|
||||
<div class="stat-pill"><strong>5</strong>待验收</div>
|
||||
<div class="stat-pill"><strong>2</strong>待开始</div>
|
||||
<div class="stat-pill"><strong>2</strong>开发中</div>
|
||||
<div class="stat-pill"><strong>6</strong>待验收</div>
|
||||
<div class="stat-pill"><strong>14</strong>已验收</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -269,7 +269,7 @@ ul.todo-list { list-style: none; margin: 0; padding: 0; }
|
||||
|
||||
<div class="section-block" id="section-open">
|
||||
<div class="section-title st-open" data-toggle="open">
|
||||
📋 待开始 <span class="s-count">4</span>
|
||||
📋 待开始 <span class="s-count">2</span>
|
||||
<span class="s-arrow">▴ 收起</span>
|
||||
</div>
|
||||
<div class="section-list-wrap " id="list-wrap-open">
|
||||
@@ -303,34 +303,6 @@ ul.todo-list { list-style: none; margin: 0; padding: 0; }
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-open"
|
||||
data-id="22"
|
||||
data-level="low"
|
||||
data-status="open"
|
||||
data-tier=""
|
||||
data-tags="前端,Web,文档">
|
||||
<div class="card-header">
|
||||
<span class="item-title">关于我们页文档/更新日志链接更新,Web 新增版本历史页</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-open">待开始</span>
|
||||
<span class="tag t-low">一般 / 优化</span>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item-desc">1. 客户端「关于我们」页面的「打开文档」「更新日志」链接指向需更新为正确地址。2. Web 营销站新增版本更新页面(/changelog 或 /download/),从 CHANGELOG.md 自动渲染,展示所有历史版本更新记录。</div>
|
||||
|
||||
<div class="card-footer">
|
||||
<div class="tag-row"><span class="tag t-tag" data-tag="前端">前端</span> <span class="tag t-tag" data-tag="Web">Web</span> <span class="tag t-tag" data-tag="文档">文档</span></div>
|
||||
<div class="item-meta">
|
||||
<span class="meta-date">🕐 2026-06-08</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-open"
|
||||
data-id="23"
|
||||
data-level="low"
|
||||
@@ -355,20 +327,58 @@ ul.todo-list { list-style: none; margin: 0; padding: 0; }
|
||||
<div class="item-meta">
|
||||
<span class="meta-date">🕐 2026-06-08</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-block" id="section-doing">
|
||||
<div class="section-title st-doing" data-toggle="doing">
|
||||
🔨 开发中 <span class="s-count">2</span>
|
||||
<span class="s-arrow">▴ 收起</span>
|
||||
</div>
|
||||
<div class="section-list-wrap " id="list-wrap-doing">
|
||||
<ul class="todo-list" id="list-doing">
|
||||
|
||||
<li class="todo-card s-doing"
|
||||
data-id="22"
|
||||
data-level="low"
|
||||
data-status="doing"
|
||||
data-tier=""
|
||||
data-tags="前端,Web,文档">
|
||||
<div class="card-header">
|
||||
<span class="item-title">关于我们页文档/更新日志链接更新,Web 新增版本历史页</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-doing">开发中</span>
|
||||
<span class="tag t-low">一般 / 优化</span>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item-desc">1. 客户端「关于我们」页面的「打开文档」「更新日志」链接指向需更新为正确地址。2. Web 营销站新增版本更新页面(/changelog 或 /download/),从 CHANGELOG.md 自动渲染,展示所有历史版本更新记录。</div>
|
||||
|
||||
<div class="card-footer">
|
||||
<div class="tag-row"><span class="tag t-tag" data-tag="前端">前端</span> <span class="tag t-tag" data-tag="Web">Web</span> <span class="tag t-tag" data-tag="文档">文档</span></div>
|
||||
<div class="item-meta">
|
||||
<span class="meta-date">🕐 2026-06-08</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-open"
|
||||
<li class="todo-card s-doing"
|
||||
data-id="24"
|
||||
data-level="low"
|
||||
data-status="open"
|
||||
data-status="doing"
|
||||
data-tier=""
|
||||
data-tags="Web,文档">
|
||||
<div class="card-header">
|
||||
<span class="item-title">服务条款与隐私政策页面</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-open">待开始</span>
|
||||
<span class="tag status-badge s-doing">开发中</span>
|
||||
<span class="tag t-low">一般 / 优化</span>
|
||||
|
||||
|
||||
@@ -389,101 +399,9 @@ ul.todo-list { list-style: none; margin: 0; padding: 0; }
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-block" id="section-doing">
|
||||
<div class="section-title st-doing" data-toggle="doing">
|
||||
🔨 开发中 <span class="s-count">1</span>
|
||||
<span class="s-arrow">▴ 收起</span>
|
||||
</div>
|
||||
<div class="section-list-wrap " id="list-wrap-doing">
|
||||
<ul class="todo-list" id="list-doing">
|
||||
|
||||
<li class="todo-card s-doing"
|
||||
data-id="21"
|
||||
data-level="mid"
|
||||
data-status="doing"
|
||||
data-tier=""
|
||||
data-tags="前端,后端,安全,文档">
|
||||
<div class="card-header">
|
||||
<span class="item-title">授权信息功能方案设计</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-doing">开发中</span>
|
||||
<span class="tag t-high">重要</span>
|
||||
|
||||
<span class="tag sub-progress-badge">0/8 子任务</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item-desc">完整方案设计,涵盖:界面设计与交互、前端实现方案、后端接口与数据模型、安全策略(防盗用、防滥用、授权校验)等。需产出设计文档后再进入开发阶段。</div>
|
||||
<div class="subtask-block">
|
||||
<div class="subtask-header">
|
||||
<span class="subtask-label">子任务</span>
|
||||
<span class="subtask-progress-text">0 / 8 完成</span>
|
||||
<div class="subtask-progress-bar"><div class="subtask-progress-fill" style="width:0%"></div></div>
|
||||
</div>
|
||||
<ul class="subtask-list"><li class="subtask-item s-open" data-sid="21A">
|
||||
<span class="sub-icon s-open">○</span>
|
||||
<span class="sub-sid">21A</span>
|
||||
<span class="sub-title">后端:Ed25519 签发验签工具 + GenerateKey 修复</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-open">待开始</span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-open" data-sid="21B">
|
||||
<span class="sub-icon s-open">○</span>
|
||||
<span class="sub-sid">21B</span>
|
||||
<span class="sub-title">数据库:license_devices 表 + licenses 表改造</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-open">待开始</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-pending" title="21A 未完成">21A</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-open" data-sid="21C">
|
||||
<span class="sub-icon s-open">○</span>
|
||||
<span class="sub-sid">21C</span>
|
||||
<span class="sub-title">后端:注册自动签发 30 天 trial license</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-open">待开始</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-pending" title="21A 未完成">21A</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-open" data-sid="21D">
|
||||
<span class="sub-icon s-open">○</span>
|
||||
<span class="sub-sid">21D</span>
|
||||
<span class="sub-title">后端:LicenseGuard 中间件 + JWT claim 扩展</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-open">待开始</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-pending" title="21B 未完成">21B</span><span class="dep-badge dep-pending" title="21C 未完成">21C</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-open" data-sid="21E">
|
||||
<span class="sub-icon s-open">○</span>
|
||||
<span class="sub-sid">21E</span>
|
||||
<span class="sub-title">前端:license model/repository/device_id 采集</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-open">待开始</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-pending" title="21A 未完成">21A</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-open" data-sid="21F">
|
||||
<span class="sub-icon s-open">○</span>
|
||||
<span class="sub-sid">21F</span>
|
||||
<span class="sub-title">前端:激活与设备管理 UI(授权 Tab 重构)</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-open">待开始</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-pending" title="21D 未完成">21D</span><span class="dep-badge dep-pending" title="21E 未完成">21E</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-open" data-sid="21G">
|
||||
<span class="sub-icon s-open">○</span>
|
||||
<span class="sub-sid">21G</span>
|
||||
<span class="sub-title">前端:gating 横幅 + 到期弹窗(app_shell 注入)</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-open">待开始</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-pending" title="21D 未完成">21D</span><span class="dep-badge dep-pending" title="21E 未完成">21E</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-open" data-sid="21H">
|
||||
<span class="sub-icon s-open">○</span>
|
||||
<span class="sub-sid">21H</span>
|
||||
<span class="sub-title">端到端验证:phase 切换 + 签名拒绝 + 多设备上限</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-open">待开始</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-pending" title="21D 未完成">21D</span><span class="dep-badge dep-pending" title="21F 未完成">21F</span><span class="dep-badge dep-pending" title="21G 未完成">21G</span></span></div>
|
||||
</li></ul>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<div class="tag-row"><span class="tag t-tag" data-tag="前端">前端</span> <span class="tag t-tag" data-tag="后端">后端</span> <span class="tag t-tag" data-tag="安全">安全</span> <span class="tag t-tag" data-tag="文档">文档</span></div>
|
||||
<div class="item-meta">
|
||||
<span class="meta-date">🕐 2026-06-08</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-block" id="section-done">
|
||||
<div class="section-title st-done" data-toggle="done">
|
||||
🔍 待验收 <span class="s-count">5</span>
|
||||
🔍 待验收 <span class="s-count">6</span>
|
||||
<span class="s-arrow">▴ 收起</span>
|
||||
</div>
|
||||
<div class="section-list-wrap " id="list-wrap-done">
|
||||
@@ -573,6 +491,88 @@ ul.todo-list { list-style: none; margin: 0; padding: 0; }
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-done"
|
||||
data-id="21"
|
||||
data-level="low"
|
||||
data-status="done"
|
||||
data-tier=""
|
||||
data-tags="前端,后端,安全,文档">
|
||||
<div class="card-header">
|
||||
<span class="item-title">授权信息功能方案设计</span>
|
||||
<div class="card-badges">
|
||||
<span class="tag status-badge s-done">待验收</span>
|
||||
<span class="tag t-low">一般 / 优化</span>
|
||||
|
||||
<span class="tag sub-progress-badge">8/8 子任务</span>
|
||||
<button class="reject-btn" data-id="21" data-title="授权信息功能方案设计">拒绝验收</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item-desc">完整方案设计,涵盖:界面设计与交互、前端实现方案、后端接口与数据模型、安全策略(防盗用、防滥用、授权校验)等。需产出设计文档后再进入开发阶段。</div>
|
||||
<div class="subtask-block">
|
||||
<div class="subtask-header">
|
||||
<span class="subtask-label">子任务</span>
|
||||
<span class="subtask-progress-text">8 / 8 完成</span>
|
||||
<div class="subtask-progress-bar"><div class="subtask-progress-fill" style="width:100%"></div></div>
|
||||
</div>
|
||||
<ul class="subtask-list"><li class="subtask-item s-done" data-sid="21A">
|
||||
<span class="sub-icon s-done">✓</span>
|
||||
<span class="sub-sid">21A</span>
|
||||
<span class="sub-title">后端:Ed25519 签发验签工具 + GenerateKey 修复</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-done">待验收</span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-done" data-sid="21B">
|
||||
<span class="sub-icon s-done">✓</span>
|
||||
<span class="sub-sid">21B</span>
|
||||
<span class="sub-title">数据库:license_devices 表 + licenses 表改造</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-done">待验收</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-done" title="21A 已完成">21A</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-done" data-sid="21C">
|
||||
<span class="sub-icon s-done">✓</span>
|
||||
<span class="sub-sid">21C</span>
|
||||
<span class="sub-title">后端:注册自动签发 30 天 trial license</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-done">待验收</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-done" title="21A 已完成">21A</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-done" data-sid="21D">
|
||||
<span class="sub-icon s-done">✓</span>
|
||||
<span class="sub-sid">21D</span>
|
||||
<span class="sub-title">后端:LicenseGuard 中间件 + JWT claim 扩展</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-done">待验收</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-done" title="21B 已完成">21B</span><span class="dep-badge dep-done" title="21C 已完成">21C</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-done" data-sid="21E">
|
||||
<span class="sub-icon s-done">✓</span>
|
||||
<span class="sub-sid">21E</span>
|
||||
<span class="sub-title">前端:license model/repository/device_id 采集</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-done">待验收</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-done" title="21A 已完成">21A</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-done" data-sid="21F">
|
||||
<span class="sub-icon s-done">✓</span>
|
||||
<span class="sub-sid">21F</span>
|
||||
<span class="sub-title">前端:激活与设备管理 UI(授权 Tab 重构)</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-done">待验收</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-done" title="21D 已完成">21D</span><span class="dep-badge dep-done" title="21E 已完成">21E</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-done" data-sid="21G">
|
||||
<span class="sub-icon s-done">✓</span>
|
||||
<span class="sub-sid">21G</span>
|
||||
<span class="sub-title">前端:gating 横幅 + 到期弹窗(app_shell 注入)</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-done">待验收</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-done" title="21D 已完成">21D</span><span class="dep-badge dep-done" title="21E 已完成">21E</span></span></div>
|
||||
</li>
|
||||
<li class="subtask-item s-done" data-sid="21H">
|
||||
<span class="sub-icon s-done">✓</span>
|
||||
<span class="sub-sid">21H</span>
|
||||
<span class="sub-title">端到端验证:phase 切换 + 签名拒绝 + 多设备上限</span>
|
||||
<div class="sub-badges"><span class="tag tier-2">二级</span><span class="tag status-badge s-done">待验收</span><span class="dep-section"><span class="dep-label">依赖:</span><span class="dep-badge dep-done" title="21D 已完成">21D</span><span class="dep-badge dep-done" title="21F 已完成">21F</span><span class="dep-badge dep-done" title="21G 已完成">21G</span></span></div>
|
||||
</li></ul>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<div class="tag-row"><span class="tag t-tag" data-tag="前端">前端</span> <span class="tag t-tag" data-tag="后端">后端</span> <span class="tag t-tag" data-tag="安全">安全</span> <span class="tag t-tag" data-tag="文档">文档</span></div>
|
||||
<div class="item-meta">
|
||||
<span class="meta-date">🕐 2026-06-08</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="todo-card s-done"
|
||||
data-id="25"
|
||||
data-level="low"
|
||||
|
||||
+13
-13
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "酒库管理系统 — 项目 TODO",
|
||||
"updated_at": "2026-06-09T16:15:09.789Z"
|
||||
"updated_at": "2026-06-10T14:49:02.179Z"
|
||||
},
|
||||
"seq": 28,
|
||||
"items": [
|
||||
@@ -277,7 +277,7 @@
|
||||
"id": 21,
|
||||
"title": "授权信息功能方案设计",
|
||||
"desc": "完整方案设计,涵盖:界面设计与交互、前端实现方案、后端接口与数据模型、安全策略(防盗用、防滥用、授权校验)等。需产出设计文档后再进入开发阶段。",
|
||||
"level": "mid",
|
||||
"level": "low",
|
||||
"tags": [
|
||||
"前端",
|
||||
"后端",
|
||||
@@ -288,14 +288,14 @@
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null,
|
||||
"status": "doing",
|
||||
"status": "done",
|
||||
"subtasks": [
|
||||
{
|
||||
"sid": "21A",
|
||||
"title": "后端:Ed25519 签发验签工具 + GenerateKey 修复",
|
||||
"tier": 2,
|
||||
"deps": [],
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"created_at": "2026-06-09T16:14:58.628Z"
|
||||
},
|
||||
{
|
||||
@@ -305,7 +305,7 @@
|
||||
"deps": [
|
||||
"21A"
|
||||
],
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"created_at": "2026-06-09T16:15:09.490Z"
|
||||
},
|
||||
{
|
||||
@@ -315,7 +315,7 @@
|
||||
"deps": [
|
||||
"21A"
|
||||
],
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"created_at": "2026-06-09T16:15:09.541Z"
|
||||
},
|
||||
{
|
||||
@@ -326,7 +326,7 @@
|
||||
"21B",
|
||||
"21C"
|
||||
],
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"created_at": "2026-06-09T16:15:09.590Z"
|
||||
},
|
||||
{
|
||||
@@ -336,7 +336,7 @@
|
||||
"deps": [
|
||||
"21A"
|
||||
],
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"created_at": "2026-06-09T16:15:09.639Z"
|
||||
},
|
||||
{
|
||||
@@ -347,7 +347,7 @@
|
||||
"21D",
|
||||
"21E"
|
||||
],
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"created_at": "2026-06-09T16:15:09.689Z"
|
||||
},
|
||||
{
|
||||
@@ -358,7 +358,7 @@
|
||||
"21D",
|
||||
"21E"
|
||||
],
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"created_at": "2026-06-09T16:15:09.739Z"
|
||||
},
|
||||
{
|
||||
@@ -370,7 +370,7 @@
|
||||
"21F",
|
||||
"21G"
|
||||
],
|
||||
"status": "open",
|
||||
"status": "done",
|
||||
"created_at": "2026-06-09T16:15:09.789Z"
|
||||
}
|
||||
]
|
||||
@@ -389,7 +389,7 @@
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null,
|
||||
"status": "open"
|
||||
"status": "doing"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
@@ -419,7 +419,7 @@
|
||||
"done": false,
|
||||
"completed_at": null,
|
||||
"version": null,
|
||||
"status": "open"
|
||||
"status": "doing"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
|
||||
Reference in New Issue
Block a user