fix(product-suite): finalize sorting after drag

This commit is contained in:
chengma
2026-07-23 09:36:00 +08:00
parent 03b9bbab78
commit 8706151e23
5 changed files with 127 additions and 18 deletions
+6 -2
View File
@@ -3,7 +3,7 @@ id: T-693
title: 商品套图连续拖放丢失显示修复
phase: 7
deps: [T-692]
status: TODO
status: DONE
created: 2026-07-23
---
@@ -58,4 +58,8 @@ T-692 已避免 Qt 默认内部投放复制同一图片项,但用户连续把
## 执行记录
- 待实现。
- 2026-07-23 完成。
- `ProductOriginalList` 新增单轮拖拽生命周期状态:开始时冻结原图 ID 集合,`dropEvent()` 仅以受控移动更新列表并保存待提交顺序,无效投放直接拒绝;`super().startDrag()` 返回后先清除旧拖拽项引用,再发送一次 `orderChanged`。因此页面写库和 `_refresh_originals()` 清空重建列表时,Qt 已不再持有上一轮拖拽源。
- 提交前同时校验当前列表、待提交顺序和拖拽开始快照的数量、唯一性与 ID 集合;原地释放、无拖拽源、重复 ID、列表中途变化和排序锁定均不提交。SQLite 服务层的完整集合与重复 ID 校验保持不变。
- 扩展列表级测试,确认移动发生时不会提前发信号,拖拽结束才发送一次;新增项目级连续换主图回归,依次把4张参考图移到第一位,每轮确认5张原图全部保留、标签连续、数据库在结束拖拽前不变且结束后与界面一致。同步更新 `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`(109项)、`py -3.10 -m unittest discover -s tests`(676项)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`。离屏 PySide6 仍有字体目录和插件能力告警,但无测试失败。