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

3.9 KiB
Raw Blame History

id, title, status, phase, deps, created
id title status phase deps created
T-663 采集与生成范围确认弹窗可读性与语义色 TODO 7
T-662b
T-662c
2026-07-18

T-663 采集与生成范围确认弹窗可读性与语义色

问题 / 背景

①「导入采集」的商品状态范围确认目前直接使用 QMessageBox。三个较长中文按钮由平台样式横向安排,窗口未设置稳定最小宽度,在较窄窗口或高系统缩放下会截断选项文字。采集所有状态的商品 同时使用 DestructiveRole 和错误红色,视觉语义接近删除或不可逆操作;实际它只是扩大本轮采集范围,可能增加耗时但不消耗 AI 点数。②「生成所有状态的商品」也应使用一致的范围选择语义;它会额外消耗点数,但同样不是删除操作。

方案

  • 提供可复用的中文“商品状态范围”专用对话框,供①采集和②生成调用;不继续依赖 QMessageBox 的平台按钮横向排布。
  • 对话框使用稳定的最小内容宽度(不小于 520px)、可换行说明文字和纵向全宽按钮。窗口可随内容增大,不设置会导致文字再次被裁切的固定最大宽度;在 Windows 100%/125%/150% 缩放下三个按钮均完整显示。
  • 保持三项业务选择、返回值和键盘安全性不变:
    • ①:只采集状态正常的商品(默认) / 采集所有状态的商品 / 取消;
    • ②:只生成状态正常的商品(默认) / 生成所有状态的商品 / 取消;
    • 回车只触发默认“正常状态”选项,Esc/关闭触发取消;本轮选择不保存为下次默认值。
  • 默认“正常状态”选项使用现有主操作视觉;“所有状态”选项改为警示橙色描边(复用 COLOR_WARNING = #bc4c00),并使用非破坏性 ActionRole 或等价的自定义操作语义,不再使用 DestructiveRole、错误红或“危险”措辞;“取消”保持中性样式。
  • ①说明保留“可能增加采集时间,但不消耗 AI 点数”;②说明保留“非正常状态也会调用 AI,可能额外消耗点数”。成本和范围风险由说明文字清晰表达,不借用删除语义。
  • 保留既有按钮 objectName,或为替换后的按钮提供等价稳定 objectName,避免现有 GUI 自动化测试失效;两处调用只接收稳定策略代码 normal_only/all/None,不改变 Worker、状态检测、计划指纹、运行日志、计费和③更新蝦皮的逻辑。

验收标准

  • ①和②范围确认弹窗在常见 Windows 缩放下完整显示三项中文选项,不出现省略号、裁切或横向拥挤。
  • ①“所有状态”显示警示橙色描边而非红色;②采用同一语义色,默认正常选项仍最突出,取消为中性。
  • 默认选择、回车、Esc/关闭、三种返回值以及每轮不记忆范围策略的现有行为不回归。
  • ①“所有状态”不被呈现为删除/不可逆,仍明确提示只增加采集时间且不消耗 AI 点数;②仍明确提示可能额外消耗点数。
  • 不改 CollectWorker / GenerateWorker 的状态范围、任务计划、并发、重试、日志和计费行为;③更新蝦皮不受影响。

测试与文档

  • tests/test_gui.py 覆盖①②对话框最小宽度、三个完整按钮文案、默认焦点、回车/取消、两种范围返回值、警示色与非破坏性按钮角色。
  • 更新 docs/routes.md、docs/04-architecture.md 与 docs/api.md 中①②范围确认的显示与语义说明。

验证

py -3.10 -m unittest tests.test_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

非目标

  • 不新增商品状态筛选列、常驻范围设置或“强制更新异常商品”入口。
  • 不改变①采集或②生成是否处理异常商品的业务规则,不改变 cmhub 计费、数据库字段、CDP 或③更新蝦皮流程。

执行记录

  • 待实现。