fix(product-suite): prevent duplicate drag sorting

This commit is contained in:
chengma
2026-07-23 09:18:18 +08:00
parent de8dbc7754
commit 1d2bb4489a
5 changed files with 117 additions and 14 deletions
+7 -2
View File
@@ -3,7 +3,7 @@ id: T-692
title: 商品套图原图拖放重复项修复
phase: 7
deps: [T-691]
status: TODO
status: DONE
created: 2026-07-23
---
@@ -54,4 +54,9 @@ T-691 为使参考图可以拖到第一位,给每个 `QListWidgetItem` 添加
## 执行记录
- 待实现。
- 2026-07-23 完成。
- 移除 T-691 对真实原图项追加的 `ItemIsDropEnabled`,避免 Qt 将拖到缩略图上的动作走默认复制/插入路径。`ProductOriginalList` 现在在 `startDrag()` 记录单一拖拽项,在内部 `dragEnter/dragMove/drop` 中只接受本列表来源的移动。
- 内部 drop 不再调用 `super().dropEvent()`:按目标缩略图和坐标计算插入行,以 `takeItem()` + `insertItem()` 移动原 `QListWidgetItem`;移动前后均检查 asset ID 唯一性,仅顺序实际变化时发送一次 `orderChanged`。原地释放、无拖拽源、跨列表和已存在异常重复 ID 都不回写排序。
- 外部文件 URL 拖入继续只发送 `filesDropped`;拉取或生成中的锁定逻辑、SQLite 服务层重复 ID 最后防线、主图刷新样式和历史 job 快照均未改动。已同步 `docs/04-architecture.md` 与 `docs/routes.md`。
- 新增 GUI 回归覆盖第二张移到第一张、向后移动、原地释放、无拖拽源和已有重复 ID 防御;现有项目级测试继续验证 SQLite 排序、主图标签和外部文件导入隔离。
- 验证通过:`py -3.10 -m unittest tests.test_product_suite_gui tests.test_image_studio tests.test_product_suite`(108项)、`py -3.10 -m unittest discover -s tests`(675项)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`git diff --check`。离屏 PySide6 有字体目录/插件告警,但无测试失败。