Files
cmshoppe/docs/tasks/T-652.md
T

67 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-652
title: 商品套图生成设置下拉框防滚轮误改
phase: 7
deps: []
status: DONE
created: 2026-07-17
---
## 问题 / 背景
⑥「商品套图」左侧生成设置的「平台、站点、语言、比例」目前使用普通 `QComboBox`。鼠标指针停在下拉框上时,用户滚动滚轮想浏览配置区页面,会触发 Qt 默认行为并直接修改当前选项,可能导致平台、输出语言或图片比例在未察觉时变化。
这些参数会影响套图提示词和生图请求,属于影响生成结果与成本的设置。滚轮悬停改值不符合用户的显式操作预期。
## 方案
### 1. 只限制⑥生成设置的闭合下拉框滚轮行为
- 仅处理 `ProductSuiteTab` 的平台、站点、语言、比例四个生成设置下拉框;不全局修改所有 `QComboBox`,不影响账号选择、历史店铺筛选、设置页模型别名等其他业务控件;
- 下拉框处于闭合状态时,忽略鼠标滚轮导致的选项切换,并将滚动事件交给外层配置滚动区,使页面继续自然上下滚动;
- 下拉列表已展开时,滚轮只用于浏览下拉选项列表,不能在未点击/未明确键盘确认的情况下静默提交新的当前值;
- 保留鼠标点击选择、`Alt+↓` 打开、方向键/回车等明确键盘操作;不得通过 `Qt.NoFocus` 粗暴禁用焦点,避免破坏键盘操作和无障碍能力;
- 使用局部 `QComboBox` 子类或只安装在这四个控件上的事件过滤器,避免散落的重复条件判断。
### 2. 保持设置持久化和生成语义
- 滚轮被忽略时不得触发 `_on_settings_changed()`、不写项目设置、不改变生成数量、提示词预览、历史或当前任务状态;
- 用户通过鼠标/键盘明确选中后,沿用现有设置归一化、项目保存和新任务最近设置记忆逻辑;
- 不改变平台、站点、语言、比例的可选值、默认值、布局、提示词变量或 cmhub 请求参数。
### 3. 测试与文档
- `tests/test_product_suite_gui.py`:向四个闭合下拉框发送 wheel event,断言当前值不变且外层 `suiteConfigScroll` 可继续滚动;鼠标选择和键盘选择仍会改变值并按原逻辑持久化;
- 覆盖下拉展开时滚轮仅浏览候选项、不因悬停静默提交的行为;
- 同步更新 `docs/routes.md` 的⑥生成设置交互说明;无需新增 SVG 效果图;
- 运行:
```bash
py -3.10 -m unittest tests.test_product_suite_gui
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 的下拉框滚轮行为不受影响。
- [ ] 不影响套图生成、AI帮写、cmhub、SQLite、历史、导出、Shopee CDP、采集或更新蝦皮。
## 边界(不改什么)
- 不全局重写 Qt 滚轮事件,不新增全局 event filter。
- 不修改平台、站点、语言、比例的选项、默认值、提示词结构、生成数量、模型选择或价格逻辑。
- 不修改其他 Tab 的下拉框、快捷键、鼠标选择、账号管理或设置模块。
## 执行记录
- 2026-07-17:根据生成设置下拉框滚轮误改问题创建任务。待实现。
- 2026-07-17:开始实现仅限商品套图四个生成设置下拉框的防滚轮误改交互。
- 2026-07-17:已新增局部 `SuiteSettingsComboBox`。平台、站点、语言、比例在闭合时把滚轮转交给 `suiteConfigScroll`,展开时转交候选列表;鼠标和键盘选择保持不变。验证:`py -3.10 -m unittest discover -s tests`(578 项通过)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`git diff --check` 通过。