Files

66 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-698
title: 会员信息移入 Windows 原生标题栏
phase: 7
deps: [T-697]
status: DONE
created: 2026-07-23
---
## 问题 / 背景
T-697 已移除 Tabs 上方重复的应用名称,但仍保留一整行应用内会员状态栏。用户希望把账号、套餐和有效期直接加载到 Windows 原生窗口标题的应用名称后面,不再在 Tabs 上方占用独立区域。
该调整会让会员摘要同时出现在窗口标题、任务栏和 Alt+Tab 中;这是本次需求明确接受的展示范围。API Key、接口地址、原始错误和支付信息仍不得进入窗口标题。
## 方案
### 1. 原生窗口标题
- 默认、正在检测、未配置、无订阅、到期、撤销、账号禁用、Key 无效、网络异常和旧服务兼容状态,窗口标题只显示 `display_name()`。
- 订阅有效时显示:`应用名称 | 账号名 · 套餐名 · 有效至日期`。
- 宽限期显示:`应用名称 | 账号名 · 套餐名 · 宽限至日期`。
- 账号、套餐文本只使用 `SubscriptionStatus` 已归一化的安全字段;标题不得包含 API Key、`manage_url`、`notice_id`、接口路径或原始响应。
- 状态从有效切换为异常、重新检测或配置变更时,立即恢复纯应用名称,避免显示陈旧会员信息。
### 2. 删除 Tabs 上方状态行
- 删除 `subscriptionStatusLabel`、`appHeader` 及其布局;中央区域直接从六个 Tabs 开始,不保留空白占位。
- 保留 Windows 原生窗口标题、图标、窗口拖动、任务栏和 Alt+Tab 行为。
- 检测中、观察模式异常、正式门禁原因和设置保存反馈统一由现有底部状态栏显示中文信息。
### 3. 订阅行为不变
- T-696 继续保持“真实检测、观察模式不限制使用”;本任务不启用正式门禁。
- 启动异步检查、保存设置后重查、陈旧回调隔离、新提交放行和 `notice_id` 模态框抑制逻辑不变。
- 标题更新只在 GUI 主线程处理,不让 Worker 直接操作窗口。
## 验收要点
- 初始窗口标题仅为当前 `display_name()`,Tabs 上方不再存在 `appHeader` 或 `subscriptionStatusLabel`。
- 有效“测试”套餐返回后,窗口标题包含账号、套餐“测试”和有效期。
- 宽限状态使用“宽限至”;异常或重新检测时立即恢复纯应用名称。
- 检测中和异常原因仍能在底部状态栏看到,观察模式下所有工作流继续可用。
- 窗口标题不包含 API Key、接口地址、会员中心地址、通知标识或原始错误。
- 自动验证:
- 主窗口原生标题与订阅状态定向 GUI 测试
- `py -3.10 -m unittest discover -s tests`
- `py -3.10 -m ruff check app tests main.py`
- `py -3.10 -m compileall app main.py`
- `git diff --check`
## 边界(不改什么)
- 不自定义或隐藏 Windows 原生标题栏,不实现无边框窗口。
- 不修改 cmhub 订阅接口、状态解析、套餐、支付、会员中心或服务端授权。
- 不启用客户端正式门禁,不修改六个业务 Tab、CDP 或蝦皮流程。
- 不在底部状态栏重复长期展示有效账号和套餐;有效摘要以窗口标题为准。
## 执行记录
- 2026-07-23:删除 `subscriptionStatusLabel`、`appHeader` 及其布局,主窗口中央区域直接从六个 Tabs 开始,不保留顶部空白状态行。
- 新增主线程原生标题更新方法:有效状态显示“应用名称 | 账号 · 套餐 · 有效至日期”,宽限状态显示“宽限至日期”;账号、套餐和日期做单行空白归一化。开始重新检测及任一非有效状态会立即恢复纯应用名称。
- 检测中、观察模式异常和正式门禁原因继续由底部状态栏展示;T-696 的真实查询、观察放行、保存后重查、陈旧结果隔离和通知抑制逻辑不变。窗口标题不读取或显示 API Key、接口/会员中心地址、通知标识和原始错误。
- 更新架构、路由和 GUI 回归测试,覆盖顶部状态行不存在、有效/宽限标题、异常重置、检测中反馈及敏感字段不进入标题。
- 验证通过:主窗口定向 GUI 测试 5 项、`py -3.10 -m unittest discover -s tests`(683 项)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`git diff --check`。