2026-07-20 11:04:27 +08:00
|
|
|
|
---
|
|
|
|
|
|
id: T-675
|
|
|
|
|
|
title: 更新蝦皮左键双击打开或聚焦商品详情页
|
2026-07-20 11:22:26 +08:00
|
|
|
|
status: DONE
|
2026-07-20 11:04:27 +08:00
|
|
|
|
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 或提交线上更新。
|
|
|
|
|
|
|
|
|
|
|
|
## 执行记录
|
|
|
|
|
|
|
2026-07-20 11:22:26 +08:00
|
|
|
|
- 新增 `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`。
|