chore: compact outfit run panel
This commit is contained in:
@@ -173,7 +173,7 @@ Excel 行 → `OutfitTask` 列表的转换由 `excel_service` 完成;核心只
|
|||||||
|
|
||||||
- **左栏(数据源 + 话术创作,~360px)**:`Excel` / `输出` 各为**行内一行**(标签 + 路径 + 浏览,省纵向空间);数据源概览(共 N 行 / 完成 / 待处理 / 失败);**加大的**穿搭生成话术编辑 +「保存话术」+「插入标题」;下方常驻**加大的最终生成要求预览**(内嵌、实时,标题行右侧放样本行下拉,含 §7.1 自动附加的输出要求)。AI 模型下拉不在此(见右栏)。
|
- **左栏(数据源 + 话术创作,~360px)**:`Excel` / `输出` 各为**行内一行**(标签 + 路径 + 浏览,省纵向空间);数据源概览(共 N 行 / 完成 / 待处理 / 失败);**加大的**穿搭生成话术编辑 +「保存话术」+「插入标题」;下方常驻**加大的最终生成要求预览**(内嵌、实时,标题行右侧放样本行下拉,含 §7.1 自动附加的输出要求)。AI 模型下拉不在此(见右栏)。
|
||||||
- **中栏(结果 + 明细)**:顶部「最近结果」缩略图条——**只展示已完成的人物效果图**,新图自动加到最左、首图标「最新」,单击看大图、右键开所在文件夹;下方「处理明细」表(行 / 标题 / 货号 / 衣服图 / 状态 / 结果或原因),按 Excel 行顺序,状态用 完成 / 失败 / 生成中 / 待处理 / 跳过 徽章。
|
- **中栏(结果 + 明细)**:顶部「最近结果」缩略图条——**只展示已完成的人物效果图**,新图自动加到最左、首图标「最新」,单击看大图、右键开所在文件夹;下方「处理明细」表(行 / 标题 / 货号 / 衣服图 / 状态 / 结果或原因),按 Excel 行顺序,状态用 完成 / 失败 / 生成中 / 待处理 / 跳过 徽章。
|
||||||
- **右栏(设置 + 运行,~400px)**:生成设置(重试失败行 + 并发数 / 新请求间隔 / 单任务冷却 / 失败重试 / 分辨率 / JPG 质量,**3 列 × 2 行**);其下 **AI 模型下拉**(来自 AI 模型配置);本次进度 + 统计(完成 / 失败 / 待处理);开始生成 / 停止生成;导出失败清单 / 打开输出目录;实时日志(含 §8 心跳行)。
|
- **右栏(设置 + 运行,~400px)**:生成设置标题与「重试上次失败的行」同排;并发数 / 新请求间隔 / 单任务冷却 / 失败重试 / 分辨率 / JPG 质量保持 **3 列 × 2 行**;`AI 模型` 标签与下拉框同排;本次进度 + 统计(完成 / 失败 / 待处理);开始生成 / 停止生成同排;导出失败清单 / 打开输出目录同排;节省的纵向空间给实时日志(含 §8 心跳行)。
|
||||||
|
|
||||||
> **设计取舍:不做"实时单图大预览"。** 这是"开了走人、回头抽查"的批量工具;单图实时预览在并发时会产生"该显示哪一行"的歧义。改为「最近结果缩略图条」——只展示已落地成品,既保留"早发现话术/模型不对、及时停掉改话术"的价值,又因只显示成品而消除并发歧义。
|
> **设计取舍:不做"实时单图大预览"。** 这是"开了走人、回头抽查"的批量工具;单图实时预览在并发时会产生"该显示哪一行"的歧义。改为「最近结果缩略图条」——只展示已落地成品,既保留"早发现话术/模型不对、及时停掉改话术"的价值,又因只显示成品而消除并发歧义。
|
||||||
|
|
||||||
|
|||||||
@@ -250,10 +250,15 @@ class AiOutfitPanel(QWidget):
|
|||||||
|
|
||||||
def _create_settings_group(self):
|
def _create_settings_group(self):
|
||||||
"""生成设置 group (lives in the right run column); two params per row."""
|
"""生成设置 group (lives in the right run column); two params per row."""
|
||||||
gen = QGroupBox("生成设置")
|
gen = QGroupBox()
|
||||||
gv = QVBoxLayout(gen)
|
gv = QVBoxLayout(gen)
|
||||||
|
|
||||||
|
header = QHBoxLayout()
|
||||||
|
header.addWidget(QLabel("生成设置"))
|
||||||
|
header.addStretch(1)
|
||||||
self._retry_failed_chk = QCheckBox("重试上次失败的行")
|
self._retry_failed_chk = QCheckBox("重试上次失败的行")
|
||||||
gv.addWidget(self._retry_failed_chk)
|
header.addWidget(self._retry_failed_chk)
|
||||||
|
gv.addLayout(header)
|
||||||
|
|
||||||
self._concurrency = QSpinBox()
|
self._concurrency = QSpinBox()
|
||||||
self._concurrency.setRange(1, 16)
|
self._concurrency.setRange(1, 16)
|
||||||
@@ -291,7 +296,10 @@ class AiOutfitPanel(QWidget):
|
|||||||
self._model_combo = QComboBox()
|
self._model_combo = QComboBox()
|
||||||
self._compact_combo(self._model_combo)
|
self._compact_combo(self._model_combo)
|
||||||
self._model_combo.activated.connect(self._on_model_activated)
|
self._model_combo.activated.connect(self._on_model_activated)
|
||||||
gv.addWidget(self._field("AI 模型", self._model_combo))
|
model_row = QHBoxLayout()
|
||||||
|
model_row.addWidget(QLabel("AI 模型"))
|
||||||
|
model_row.addWidget(self._model_combo, stretch=1)
|
||||||
|
gv.addLayout(model_row)
|
||||||
return gen
|
return gen
|
||||||
|
|
||||||
def _field(self, label_text, widget):
|
def _field(self, label_text, widget):
|
||||||
@@ -368,14 +376,16 @@ class AiOutfitPanel(QWidget):
|
|||||||
self._stats = QLabel("完成 0 · 失败 0 · 待处理 0")
|
self._stats = QLabel("完成 0 · 失败 0 · 待处理 0")
|
||||||
col.addWidget(self._stats)
|
col.addWidget(self._stats)
|
||||||
|
|
||||||
|
run_row = QHBoxLayout()
|
||||||
self._start_btn = QPushButton("开始生成")
|
self._start_btn = QPushButton("开始生成")
|
||||||
self._start_btn.setObjectName("primaryBtn")
|
self._start_btn.setObjectName("primaryBtn")
|
||||||
self._start_btn.clicked.connect(self._start)
|
self._start_btn.clicked.connect(self._start)
|
||||||
col.addWidget(self._start_btn)
|
run_row.addWidget(self._start_btn)
|
||||||
self._stop_btn = QPushButton("停止生成")
|
self._stop_btn = QPushButton("停止生成")
|
||||||
self._stop_btn.setEnabled(False)
|
self._stop_btn.setEnabled(False)
|
||||||
self._stop_btn.clicked.connect(self._stop)
|
self._stop_btn.clicked.connect(self._stop)
|
||||||
col.addWidget(self._stop_btn)
|
run_row.addWidget(self._stop_btn)
|
||||||
|
col.addLayout(run_row)
|
||||||
|
|
||||||
row = QHBoxLayout()
|
row = QHBoxLayout()
|
||||||
self._export_fail_btn = QPushButton("导出失败清单")
|
self._export_fail_btn = QPushButton("导出失败清单")
|
||||||
|
|||||||
Reference in New Issue
Block a user