From fca01798e2642a2d408b96c4512331fc0c0ef15b Mon Sep 17 00:00:00 2001 From: skycurtain Date: Tue, 15 Sep 2026 01:06:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(web):=20=E7=AE=A1=E7=90=86=E9=9D=A2?= =?UTF-8?q?=E4=B8=89=E9=A1=B5=EF=BC=88=E9=98=B6=E6=AE=B5=207=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - key 管理:清单 8 列 + 展开行(总额度 / 模型限制 / 401 计数 / 额度新鲜度 / 停用来源)+ 状态徽章三面孔(运行中 / 已停用 / 已失效 + tooltip);登记弹窗(三类失败文案);停用弹确认、启用直接执行 - 购买记录:清单 8 列 + 右侧抽屉表单(登记 / 编辑 / 补录共用;期间顺序校验);核对提示(未登记订阅提示条 + 观测折叠区 + 补录预填订阅 ID 与观测额度) - 换算参数:时间线两列 + 「当前生效」标记 + 页首说明(纯只读) - 修复:补 n-config-provider 中文 locale(naive-ui 默认英文按钮);两处表格 scroll-x(列宽被压缩致表头截断) - 走查:Playwright 15 步全操作通过(含三类登记结果、确认弹窗、补录与 CRUD) --- apps/web/src/App.vue | 19 +- apps/web/src/components.d.ts | 11 + apps/web/src/views/manage/ApiKeysView.vue | 271 ++++++++++++++- apps/web/src/views/manage/PurchasesView.vue | 353 +++++++++++++++++++- apps/web/src/views/manage/QpuView.vue | 74 +++- docs/design/实施计划.md | 4 +- 6 files changed, 707 insertions(+), 25 deletions(-) diff --git a/apps/web/src/App.vue b/apps/web/src/App.vue index ac5c81b..f80d2d4 100644 --- a/apps/web/src/App.vue +++ b/apps/web/src/App.vue @@ -1,16 +1,19 @@ diff --git a/apps/web/src/views/manage/PurchasesView.vue b/apps/web/src/views/manage/PurchasesView.vue index 3d8205b..2ab5806 100644 --- a/apps/web/src/views/manage/PurchasesView.vue +++ b/apps/web/src/views/manage/PurchasesView.vue @@ -1,12 +1,355 @@ + + diff --git a/apps/web/src/views/manage/QpuView.vue b/apps/web/src/views/manage/QpuView.vue index f18c48b..2b39187 100644 --- a/apps/web/src/views/manage/QpuView.vue +++ b/apps/web/src/views/manage/QpuView.vue @@ -1,12 +1,78 @@ + + diff --git a/docs/design/实施计划.md b/docs/design/实施计划.md index 001e12b..b607473 100644 --- a/docs/design/实施计划.md +++ b/docs/design/实施计划.md @@ -7,7 +7,7 @@ | 状态 | 定稿(2026-09-14;**进度表随 loop 持续更新**) | | 关联 | `docs/design/API契约.md` · `docs/design/同步引擎设计.md` · `docs/design/交互设计.md` · 四张表字段设计 · `AGENTS.md`(命令) | | 范围 | 阶段划分、每批验收标准、loop 机制与推进规则;技术细节一律以设计文档为准 | -| 当前进度 | 阶段 0–6 已完成;下一批:**阶段 7**(前端管理面:口令门帘 + 侧边栏 + 三页) | +| 当前进度 | 阶段 0–7 已完成;下一批:**阶段 8**(收尾:部署文档 + 端到端走查 + 文档状态更新) | --- @@ -64,7 +64,7 @@ | 4 | **同步引擎**:tick(5 分钟 + 防重入 + 启动即跑)· 日志整批事务入库 · 额度采集 · QPU 采样 · 401 状态机(N=3)· **seed 脚本**(§6) | 库中出现数据(seed 或真实采集);`[sync]` 日志符合引擎设计;401 状态机单测(连续 401 → 摘除且 `disabled_source = auto_401`) | ✅ 2026-09-15(45 项单测绿;seed 灌入 984 条日志 + QPU 基线 + 示例购买;引擎实测——幂等重跑新增 0 条、摘要日志符合设计、**401 端到端:1→2→3 次摘除且摘除后不再轮询**) | | 5 | **查看面数据面**:`logs/query` + `summary` + 折算链(按购买期间分段取尺) | curl 实测:字段齐全、`meta.data_until` 取最慢、金额按购买分段累加;**无归属购买的行 `amount_rmb = null` 且计入 `unpriced_count`**(2026-09-14 定) | ✅ 2026-09-15(56 项单测绿;curl 17 步——明细字段齐全 / 分页 / type 过滤 / 参数校验 6 类 400 / 未收录 200 空结果 / `data_until` 取最慢 / 金额按归属购买折算、未折算行 `null` + `unpriced_count` 计数正确) | | 6 | **前端 `/usage-log`**:筛选区(key 标签 + datetimerange + 快捷项)· 卡片 · 表格 + 展开行 · 分页器 · 六种状态模式 | 浏览器实测:seed 数据走一遍;六态逐一可见(加载 / 初始 / 未收录 / 无记录 / 同步中 / 失败);金额为 `null` 显示「—」 | ✅ 2026-09-15(Playwright + 系统 Chrome 逐态断言:初始 / 加载 / 查询(卡片 984 · 298,041,838 · 4.90)/ 展开行 / 翻页 / 未收录 / 无记录 / 同步中 / 失败,无 console 错误;金额 `null` 显示「—」并伴未折算提示条) | -| 7 | **前端管理面**:口令门帘 + 侧边栏 + 三页(key 管理 / 购买记录含核对提示与补录 / 换算参数) | 浏览器实测:登记、启停、CRUD、补录、时间线全操作 | ☐ | +| 7 | **前端管理面**:口令门帘 + 侧边栏 + 三页(key 管理 / 购买记录含核对提示与补录 / 换算参数) | 浏览器实测:登记、启停、CRUD、补录、时间线全操作 | ✅ 2026-09-15(Playwright 走查 15 步:错口令 → 门帘提示 / 正确口令进入 / 展开行 / 登记三类结果(拒绝 · 成功 · 已登记)/ 停用(确认弹窗)与启用 / 核对提示 / 补录(预填订阅 ID 与观测额度)/ 编辑 / 删除(确认弹窗)/ 换算参数「当前生效」/ 返回查看面;顺带补 naive-ui 中文 locale 与表格横向滚动) | | 8 | **收尾**:部署文档(`docs/delivery/`)· 端到端走查 · 文档状态更新(设计文档 → 已实现) | 一条命令链可部署(前后端独立 + 后端单实例注记);走查无阻 | ☐ | ## 4. 待定问题