fix(product-suite): own original image drag lifecycle

This commit is contained in:
chengma
2026-07-23 09:49:01 +08:00
parent e6fdb661fc
commit 7d39ab5c90
5 changed files with 191 additions and 28 deletions
+6 -2
View File
@@ -3,7 +3,7 @@ id: T-694
title: 商品套图拖放源项二次删除修复
phase: 7
deps: [T-693]
status: TODO
status: DONE
created: 2026-07-23
---
@@ -59,4 +59,8 @@ T-693 的测试直接调用 `_begin_internal_drag()`、`_move_dragged_item_to()`
## 执行记录
- 待实现。
- 2026-07-23 完成。
- `ProductOriginalList.startDrag()` 不再调用 `QAbstractItemView.startDrag(MoveAction)`,改为创建 source 为当前列表的 `QDrag`,使用私有 MIME 类型承载单张原图 ID,并复用缩略图作为拖拽视觉反馈。自定义 `dropEvent()` 仍是唯一执行 `takeItem()` + `insertItem()` 的位置,因此不会再由 Qt 基类二次删除移动源项。
- 拖拽进入、移动和投放同时校验当前列表来源及私有 MIME;外部文件 URL 仍走原导入路径。`QDrag.exec()` 返回后才提交待保存顺序,取消或结束时数量、唯一性、ID 集合异常均不写库,并通过独立 `orderRestoreRequested` 信号让页面从 SQLite 恢复原图及显示中文重试提示。
- 测试改为模拟完整 `startDrag()` 路径并控制 `QDrag.exec()`:覆盖单次移动不触发源端删除、连续4次更换主图后5张图片和连续标签保持完整、异常少项不发送排序信号,以及页面从 SQLite 自动恢复。同步更新 `docs/04-architecture.md` 与 `docs/routes.md`。
- 验证通过:`py -3.10 -m unittest tests.test_product_suite_gui tests.test_image_studio tests.test_product_suite`(112项)、`py -3.10 -m unittest discover -s tests`(679项)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`。离屏 PySide6 仍有字体目录和插件能力告警,但无测试失败。