Files
cmshoppe/docs/tasks/T-675.md
T

65 lines
5.1 KiB
Markdown
Raw 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-675
title: 更新蝦皮左键双击打开或聚焦商品详情页
status: DONE
phase: 7
deps: [T-672]
created: 2026-07-20
---
# T-675 更新蝦皮左键双击打开或聚焦商品详情页
## 问题 / 背景
③「更新蝦皮」当前只能通过开始更新流程进入商品详情页。运营需要在真正提交前人工查看某条待更新商品时,缺少快捷入口。直接复用 `editor.open_product()` 不安全:它即使找到已有商品 tab 仍会执行 `Page.navigate`,可能刷新用户正在手工编辑、尚未保存的页面。
## 方案
- ③任务表新增仅限**左键双击**的查看行为;右键双击不得触发,避免干扰右键菜单。双击只处理当前命中行;更新或结果回写运行中不执行,并给出中文状态提示。
- 新增专用的“打开或聚焦商品详情页”业务方法与后台 Worker,不能复用会重新导航的 `editor.open_product()`。所有 CDP 连接、target 枚举、新建 tab 和页面等待均在 `QThread` 中执行,主线程只更新状态。
- 按任务别名定位对应账号和该账号 Chrome/CDP 端口。账号 Chrome 未启动、CDP 不可访问或账号不存在时,只提示用户前往④启动并登录;不得自动启动 Chrome、不填登录信息、不绕过验证码。
- 在对应账号 Chrome 内按商品详情页的精确 URL 规则查找现有 target:存在时仅 `Page.bringToFront` 聚焦,不重新导航、不刷新、不等待页面重载,避免丢失用户未保存的人工编辑;不存在时才新建前台 tab 打开该商品详情页,并按现有商品页就绪规则等待成功或返回脱敏中文错误。
- 无论复用还是新建,完成后关闭 CDP WebSocket 连接但不关闭浏览器 tab;不读取标题/图片、不写 SQLite、不请求 AI、不上传图片、不点击「更新」。成功状态栏显示商品 ID、账号和“已聚焦现有页面”或“已打开新页面”。
- 若新建页因未登录、商品失效、无权限或页面就绪失败而出错,沿用现有 toast 捕获和中文错误归类;只清理本轮自动创建的失败 tab,复用用户 tab 绝不关闭。
## 验收标准
- [ ] 左键双击③行会在对应账号 Chrome 中聚焦已存在的同商品详情页;不会调用导航、不会刷新原页面、不会创建重复 tab。
- [ ] 没有现有详情页时只新建一个前台商品详情 tab,成功后保留该 tab;不会改任务、Excel、图片或线上商品。
- [ ] 右键双击不触发打开;更新/回写运行中、无选中任务、账号不存在、Chrome/CDP 不可用、未登录和商品页失败均显示中文结果且 GUI 不冻结。
- [ ] 不自动启动缺失 Chrome;不自动登录、不填写凭证、不绕过验证码。
- [ ] 新建页的失败清理和 toast 错误处理符合既有商品页 CDP 约定;复用用户 tab 不关闭。
- [ ] 单元/GUI 测试覆盖现有 tab 聚焦、新建 tab、错误分支、左键限制、线程启动参数和不写库。
## 测试与文档
- `tests/test_editor_login.py` 或等价纯逻辑测试覆盖精确 target 匹配、复用不导航、新建与失败清理。
- `tests/test_workers.py` 覆盖专用 Worker 的账号/CDP 错误归类与不写库。
- `tests/test_gui.py` 覆盖左键双击、右键双击忽略、运行中禁用和成功/失败状态提示。
- 更新 `docs/04-architecture.md`、`docs/api.md`、`docs/routes.md` 的③人工查看商品页约定。
## 验证
```bash
py -3.10 -m unittest discover -s tests -p "test_editor_login.py"
py -3.10 -m unittest discover -s tests -p "test_workers.py"
py -3.10 -m unittest discover -s tests -p "test_gui.py"
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
```
## 非目标
- 不复用或修改③真实更新的上传、拖拽、点击更新和关闭 tab 逻辑。
- 不自动启动 Chrome、自动登录、批量打开商品页或批量预检。
- 不在双击时采集商品数据、生成内容、修改 SQLite、回写 Excel 或提交线上更新。
## 执行记录
- 新增 `editor.open_or_focus_product_tab()`:按账号区域域名与 `/portal/product/<商品ID>` 精确匹配已有 page target;命中时仅聚焦,不导航或刷新;缺失时前台新建并复用既有就绪/toast 失败处理。完成后始终断开 CDP WebSocket,成功页与用户既有页均保留;失败时仅清理本轮新建 target。
- 新增 `ProductTabOpenWorker` 与③任务表左键双击入口:只检查已存在账号与已运行 Chrome/CDP,不自动启动或登录,不读写任务、Excel、图片、AI、运行日志或线上商品;右键双击不触发,更新或结果回写期间给出中文状态提示。
- 已更新 `docs/04-architecture.md`、`docs/api.md`、`docs/routes.md` 的人工查看页面约定。
- 验证通过:`py -3.10 -m unittest discover -s tests -p "test_editor_login.py"`(64 项)、`test_workers.py`(16 项)、`test_gui.py`(209 项)、全量 `py -3.10 -m unittest discover -s tests`(633 项)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`git diff --check`。