From 6abe4decffcf89c9b70b9f111e0f82a6c34199a1 Mon Sep 17 00:00:00 2001 From: chengma Date: Mon, 20 Jul 2026 11:04:27 +0800 Subject: [PATCH] docs(tasks): add task delete and product tab tasks --- docs/tasks/T-674.md | 57 ++++++++++++++++++++++++++++++++++++++++++ docs/tasks/T-675.md | 61 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 docs/tasks/T-674.md create mode 100644 docs/tasks/T-675.md diff --git a/docs/tasks/T-674.md b/docs/tasks/T-674.md new file mode 100644 index 0000000..55f2536 --- /dev/null +++ b/docs/tasks/T-674.md @@ -0,0 +1,57 @@ +--- +id: T-674 +title: AI生成与更新蝦皮单条任务右键软删除 +status: TODO +phase: 7 +deps: [T-670, T-672] +created: 2026-07-20 +--- + +# T-674 AI生成与更新蝦皮单条任务右键软删除 + +## 问题 / 背景 + +T-670 已在①「导入采集」实现任务级软删除,但②「AI生成」没有右键删除入口,③「更新蝦皮」右键菜单只有「重置更新状态」。运营在后续工作流发现某一条不应继续生成或提交时,需要回到①才能删除,操作路径过长。 + +## 方案 + +- ②任务表启用中文右键菜单:右键先选中命中行,菜单只提供「删除本条记录」。②支持多选用于既有批量操作,但右键删除始终只作用于鼠标命中的一条,不新增批量删除。 +- ③保留既有「重置更新状态」,在其后增加分隔线和「删除本条记录」。两项均只作用于右键命中的当前行;删除不要求先重置更新状态。 +- 复用 `db.delete_task()` 与 T-670 的任务级软删除语义:确认框显示商品 ID、店铺、所属批次;若 `committed=1`,明确说明“仅删除本地记录,不会回滚蝦皮线上商品”;同时说明不删除原 Excel、本地图片或账号 Chrome 数据。 +- ②生成中,或③更新/结果回写中,菜单中的删除项禁用;数据库层继续拒绝 `running` 或已删除任务,防止界面竞态。取消、失败和重复删除均保留数据并给出中文提示。 +- 删除成功后刷新当前 Tab;通过既有主窗口工作流刷新回调同步①②③的批次、列表、筛选和统计。软删除记录不再进入采集、生成、更新、Excel 回写或默认统计。 + +## 验收标准 + +- [ ] ②、③右键空白处不弹业务操作;右键行会先选中该行,删除动作只处理该行。 +- [ ] ②显示「删除本条记录」;③同时显示「重置更新状态」和「删除本条记录」,两者语义互不改变。 +- [ ] 删除确认、取消、已提交线上提示、运行中禁用和删除成功后的跨 Tab 刷新与 T-670 一致。 +- [ ] 删除后任务在①②③均不可见,不能进入生成、更新或回写;原 Excel、本地图片、账号 Chrome 与蝦皮线上商品不受影响。 +- [ ] 不新增物理删除、恢复入口、批量删除或绕过 `db.delete_task()` 的直接 SQL。 + +## 测试与文档 + +- `tests/test_gui.py` 覆盖②/③右键选中、菜单项、确认/取消、已提交提示、运行中禁用、软删除后刷新和不影响其他任务。 +- `tests/test_db.py` 复用或补充 `delete_task()` 既有保护回归。 +- 更新 `docs/routes.md`、`docs/api.md` 的②/③任务表交互说明。 + +## 验证 + +```bash +py -3.10 -m unittest discover -s tests -p "test_gui.py" +py -3.10 -m unittest discover -s tests -p "test_db.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 +``` + +## 非目标 + +- 不新增批量删除、恢复已删除记录、图片目录清理或 Excel 行物理删除。 +- 不改变「重置更新状态」的现有本地状态语义。 +- 不改 CDP、账号登录、AI/CMHub 或线上商品更新流程。 + +## 执行记录 + +- 待实现。 diff --git a/docs/tasks/T-675.md b/docs/tasks/T-675.md new file mode 100644 index 0000000..066c022 --- /dev/null +++ b/docs/tasks/T-675.md @@ -0,0 +1,61 @@ +--- +id: T-675 +title: 更新蝦皮左键双击打开或聚焦商品详情页 +status: TODO +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 或提交线上更新。 + +## 执行记录 + +- 待实现。