feat: persist template/batch-mode, per-aspect resets, de-dup template actions
§17.1 Preferences persistence: - Wire the previously-unused config_service; remember and restore the last-selected template and last batch mode. main_window loads config, distributes initial values, then persists on change (save-on-change). - template_panel: template_changed signal, select_template, current_template_state. queue_panel: set_batch_mode + batch_mode_changed. §17.2 Independent resets: - Replace the combined reset and 归零 with per-section 位置/尺寸/旋转 reset buttons (quiet ghost styling) that restore only their own aspect to the selected template. Size reset changes width/height only, leaving X/Y. Button de-dup: - Remove the export panel's 应用为模板 / 重置为模板 — literal duplicates of the template panel's 另存为 / 重置为模板. Template actions now live only in the template area; the export panel handles output only. Docs: PRD (6.6/6.9/9/10), architecture (4.12), UI design (7.x/10), development-rules (6, single-home actions + consistent naming), tasks.md (17). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -164,6 +164,8 @@
|
||||
- 模板的 `width_ratio` / `height_ratio` 定义衣服上的**目标框**,而非强制拉伸尺寸。已知印花原始尺寸时,印花按自身宽高比缩放后 contain 进目标框并居中,不被拉伸变形;未知印花尺寸时退化为铺满目标框。
|
||||
- 内置模板尺寸以贴近真实印花占比为准(例如正方形模板约为衣服宽度的 1/3),避免印花占据过大面积。
|
||||
- 选中的模板是**粘性**的:在预览区切换衣服或切换印花时,印花不应丢失,应按当前选中模板基于新的衣服/印花尺寸重新计算落位,而非回退到画布的写死默认值。已手动微调的项不受影响,仍使用其自身参数。
|
||||
- **记住上次选择的模板**:程序退出前持久化当前选中的模板,下次启动自动恢复选中该模板。若该模板为自定义模板且已被删除,则回退到第一个内置模板。
|
||||
- 提供 `位置` / `尺寸` / `旋转` **三项独立的重置**,分别只把对应参数还原为当前选中模板的值(位置→模板居中位置;尺寸→模板目标框内适配的大小;旋转→模板角度,通常为 0),三者互不影响;不再使用单一的合并重置。未选模板或未加载衣服/印花时,重置不可用。
|
||||
|
||||
### 6.7 自定义模板
|
||||
|
||||
@@ -203,6 +205,7 @@
|
||||
要求:
|
||||
|
||||
- 用户可以选择批量模式。
|
||||
- **记住上次选择的批量模式**:程序退出前持久化当前批量模式,下次启动自动恢复;持久化值非法时回退到默认模式(全组合)。
|
||||
- 批量导出使用当前模板或当前编辑参数。
|
||||
- 显示合成进度。
|
||||
- 支持取消批量任务。
|
||||
@@ -308,6 +311,26 @@ AutoPrint/
|
||||
}
|
||||
```
|
||||
|
||||
应用配置建议(`app_config.json`,记录用户偏好,缺失或损坏时使用安全默认值):
|
||||
|
||||
```json
|
||||
{
|
||||
"output_format": "PNG",
|
||||
"output_quality": 95,
|
||||
"output_dir": "",
|
||||
"last_garment_dir": "",
|
||||
"last_print_dir": "",
|
||||
"last_template": "正方形模板",
|
||||
"last_batch_mode": "full_combo"
|
||||
}
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
- `last_template`:上次选中的模板名称,用于启动恢复。
|
||||
- `last_batch_mode`:上次选择的批量模式(取 `BatchMode` 枚举值,如 `full_combo` / `many_garments` / `many_prints` / `one_to_one`)。
|
||||
- 偏好的读取、分发与「改一次存一次」由主窗口集中处理,UI 控件不直接读写配置文件。
|
||||
|
||||
## 10. 验收标准
|
||||
|
||||
- 可以加载衣服图片文件夹和印花图片文件夹。
|
||||
@@ -318,6 +341,8 @@ AutoPrint/
|
||||
- 可以旋转印花并同步角度。
|
||||
- 可以选择内置模板并应用到预览。
|
||||
- 可以保存和复用自定义模板。
|
||||
- 程序重启后自动恢复上一次选择的模板和批量模式。
|
||||
- 可以分别把印花的位置、尺寸、旋转独立重置为当前选中模板的值。
|
||||
- 可以导出当前单张合成图。
|
||||
- 可以按多衣服 × 单印花模式批量导出。
|
||||
- 可以按单衣服 × 多印花模式批量导出。
|
||||
|
||||
@@ -88,6 +88,9 @@
|
||||
- 用户通过参数输入框修改坐标、尺寸、角度后,预览必须同步更新。
|
||||
- 批量处理时界面不能长时间无响应。
|
||||
- 失败、缺文件、格式不支持、导出失败等情况必须给出用户可理解的提示。
|
||||
- 同一个动作只应有一个入口;确需在多处触发时,必须使用同一个名称,且指向同一个实现。
|
||||
- 「某个动作放在哪个面板」是一次性决定,不在每个面板各自重复设置。
|
||||
- 逐面板实现 UI 后,应做一次跨面板整体走查,确认没有重复入口或同义不同名的按钮。
|
||||
|
||||
禁止事项:
|
||||
|
||||
@@ -96,6 +99,7 @@
|
||||
- 禁止让用户只能通过拖拽完成精确定位,必须保留参数输入能力。
|
||||
- 禁止批量处理期间阻塞主界面且没有进度反馈。
|
||||
- 禁止使用含糊错误提示,例如只显示“失败”。
|
||||
- 禁止同一个动作在不同面板出现重复入口,或用不同名称表示同一个动作(例如「另存为」与「应用为模板」)。
|
||||
|
||||
## 7. 配置与模板规则
|
||||
|
||||
|
||||
@@ -240,11 +240,15 @@ BatchResult
|
||||
- 读取和保存应用配置。
|
||||
- 管理默认配置。
|
||||
- 在配置损坏或缺失时提供安全默认值。
|
||||
- 持久化用户偏好:输出设置、上次选择的模板(`last_template`)、上次选择的批量模式(`last_batch_mode`)等。
|
||||
|
||||
由主窗口集中使用:启动时加载一次并把初值分发给各面板,面板选择变化时「改一次存一次」回写。各 UI 控件不直接读写配置文件,避免分散解析。
|
||||
|
||||
禁止:
|
||||
|
||||
- 禁止在多个模块中重复解析同一个配置文件。
|
||||
- 禁止启动时无提示清空用户配置。
|
||||
- 禁止 UI 控件绕过本服务直接读写配置文件。
|
||||
|
||||
### 4.13 `services/template_service.py`
|
||||
|
||||
|
||||
+25
-7
@@ -189,6 +189,14 @@ Shift 锁比例
|
||||
|
||||
右侧参数栏用于模板、位置、尺寸、旋转和输出设置。
|
||||
|
||||
`位置`、`尺寸`、`旋转` 三个分区各自在**分区标题栏右侧**放一个小型 `重置` 按钮(`↺` 图标 + 文字),只把本分区参数还原为当前选中模板的对应值,三者互不影响:
|
||||
|
||||
- 位置重置 → 还原为模板的居中位置(X / Y)。
|
||||
- 尺寸重置 → 还原为模板目标框内适配的大小(宽 / 高)。
|
||||
- 旋转重置 → 还原为模板角度(通常为 0)。
|
||||
|
||||
未选模板或未加载衣服/印花时三个重置按钮置灰。视觉层级见第 10 节「重置类按钮」。
|
||||
|
||||
### 7.1 模板区域
|
||||
|
||||
控件:
|
||||
@@ -196,6 +204,7 @@ Shift 锁比例
|
||||
- 模板下拉框。
|
||||
- `保存` 按钮。
|
||||
- `另存为` 按钮。
|
||||
- `重置为模板` 按钮(把印花参数一次性整体还原为所选模板)。
|
||||
|
||||
示例模板:
|
||||
|
||||
@@ -216,6 +225,7 @@ Shift 锁比例
|
||||
|
||||
- `X 坐标` 数字输入框。
|
||||
- `Y 坐标` 数字输入框。
|
||||
- 分区标题右侧的 `重置` 按钮(还原 X / Y 为模板值)。
|
||||
|
||||
要求:
|
||||
|
||||
@@ -230,6 +240,7 @@ Shift 锁比例
|
||||
- `宽度` 数字输入框。
|
||||
- `高度` 数字输入框。
|
||||
- `锁定宽高比例` 复选框。
|
||||
- 分区标题右侧的 `重置` 按钮(仅还原宽 / 高为模板值,位置 X / Y 不变)。
|
||||
|
||||
要求:
|
||||
|
||||
@@ -243,7 +254,7 @@ Shift 锁比例
|
||||
控件:
|
||||
|
||||
- `角度` 数字输入框。
|
||||
- `归零` 按钮(紧邻角度输入框,一键将角度还原为 0,即拉直印花)。
|
||||
- 分区标题右侧的 `重置` 按钮(还原角度为模板值,即拉直印花)。
|
||||
- `左旋 90°` 按钮。
|
||||
- `右旋 90°` 按钮。
|
||||
|
||||
@@ -253,7 +264,7 @@ Shift 锁比例
|
||||
- 支持负角度。
|
||||
- 顶部旋转控制点拖动后同步角度输入框。
|
||||
- 按钮旋转后同步预览和角度输入框。
|
||||
- 参数栏底部提供 `重置位置 / 尺寸 / 角度` 按钮,将三者一并还原为当前所选模板(与导出区的 `重置为模板` 等效,就近放在参数编辑处)。
|
||||
- 旋转分区标题的 `重置` 已覆盖「拉直」需求,不再单独提供 `归零` 按钮;也不再提供合并的 `重置位置 / 尺寸 / 角度` 按钮,统一由三个分区各自的独立重置取代。
|
||||
|
||||
### 7.5 输出设置区域
|
||||
|
||||
@@ -291,14 +302,12 @@ Shift 锁比例
|
||||
主要按钮:
|
||||
|
||||
- `导出当前单张`
|
||||
- `应用为模板`
|
||||
- `重置为模板`
|
||||
|
||||
要求:
|
||||
|
||||
- `导出当前单张` 使用主按钮样式。
|
||||
- 其他按钮使用次级按钮样式。
|
||||
- 当前缺少衣服图或印花图时,导出按钮应禁用。
|
||||
- 导出面板只负责输出与导出;模板相关操作(保存 / 另存为 / 重置为模板)统一放在模板区域(7.1),不在导出面板重复设置,避免同一动作出现两次。
|
||||
|
||||
## 8. 底部合成队列
|
||||
|
||||
@@ -447,8 +456,17 @@ Microsoft YaHei
|
||||
按钮层级(一套主色,按角色克制使用):
|
||||
|
||||
- **主按钮**:主色填充、白字。用于每个区域「推动流程前进」的唯一动作:左侧 `打开文件夹`、右侧 `导出当前单张`、底部 `开始批量导出`。三者分处不同区域,各自是本区域主操作,不互相竞争。
|
||||
- **次按钮**:白底、主色描边与文字。用于有意义但非主线的动作,如 `重置位置 / 尺寸 / 角度`、`应用为模板`。
|
||||
- **辅助按钮**:浅灰底、细边框。用于就地微调类动作,如 `浏览…`、排序、`左旋 / 右旋 / 归零`。
|
||||
- **次按钮**:白底、主色描边与文字。用于有意义但非主线的动作,如 `应用为模板`、导出区的 `重置为模板`。
|
||||
- **辅助按钮**:浅灰底、细边框。用于就地微调类动作,如 `浏览…`、排序、`左旋 / 右旋`。
|
||||
- **重置类按钮**:最安静的一档(幽灵样式),用于 `位置 / 尺寸 / 旋转` 三个分区的独立重置。它们会重复出现且属于「纠正/撤销」类动作,不应占用常驻强调色;强调色只在悬停时短暂出现以表达意图。重置可逆,因此**不使用红色/警告色**。
|
||||
|
||||
```text
|
||||
重置类按钮(分区标题内的 ↺ 重置):
|
||||
静止:背景 透明 / #f7f7f7 图标+文字 #8a8a8a 无边框
|
||||
悬停:背景 #eaf3fc 图标+文字 #0078d4
|
||||
按下:背景 #d6e8f9
|
||||
禁用:文字 #c0c0c0 不响应悬停(未选模板或未加载图片时)
|
||||
```
|
||||
|
||||
避免所有按钮使用同一种灰色样式而丧失层级;同一动作在不同位置应使用一致的文案与层级。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user