From aac5c5d1778202a31c825fc97c54a7fd5d4ff6e6 Mon Sep 17 00:00:00 2001 From: chengma Date: Thu, 9 Jul 2026 16:06:13 +0800 Subject: [PATCH] =?UTF-8?q?T-574=20=E4=BC=98=E5=8C=96=E5=B0=81=E9=9D=A2?= =?UTF-8?q?=E7=94=BB=E5=BB=8A=E4=BF=9D=E5=AD=98=E5=8F=8D=E9=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/gui/tabs/generate.py | 22 +++++++++++++++++++--- docs/tasks/T-574.md | 12 ++++++++++-- tests/test_gui.py | 6 ++++++ 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/app/gui/tabs/generate.py b/app/gui/tabs/generate.py index 761d4e3..4150a49 100644 --- a/app/gui/tabs/generate.py +++ b/app/gui/tabs/generate.py @@ -137,8 +137,11 @@ class CoverGalleryDialog(QDialog): self.regenerate_button.clicked.connect(self.regenerate_cover) button_layout.addWidget(self.regenerate_button) button_layout.addStretch(1) + self.save_hint_label = QLabel("") + self.save_hint_label.setObjectName("coverGallerySaveHintLabel") + button_layout.addWidget(self.save_hint_label) self.save_button = QPushButton("保存") - self.cancel_button = QPushButton("取消") + self.cancel_button = QPushButton("关闭") self.save_button.clicked.connect(self.save_selection) self.cancel_button.clicked.connect(self.reject) button_layout.addWidget(self.save_button) @@ -297,6 +300,8 @@ class CoverGalleryDialog(QDialog): def _select_candidate(self, candidate_path): self.selected_path = candidate_path self.save_button.setEnabled(True) + if not _same_file(candidate_path, self.current_path): + self._set_save_hint("") self._update_status() def _update_status(self): @@ -322,14 +327,16 @@ class CoverGalleryDialog(QDialog): self.status_label.setText("已选择新的生成封面,保存后用于后续更新蝦皮") def save_selection(self, checked=False): - return self._save_selected_cover(close_on_success=True) + return self._save_selected_cover(close_on_success=False, show_success_hint=True) - def _save_selected_cover(self, close_on_success=False): + def _save_selected_cover(self, close_on_success=False, show_success_hint=False): if not self.selected_path: QMessageBox.warning(self, "封面画廊", "请先选择一张生成封面") return False if _same_file(self.selected_path, self.current_path): self.changed = False + if show_success_hint: + self._set_save_hint("已保存为本次更新封面") if close_on_success: self.accept() return True @@ -338,6 +345,7 @@ class CoverGalleryDialog(QDialog): try: db.update_generated_cover(self.task.id, self.selected_path, path=self.db_path) except Exception as exc: + self._set_save_hint("") QMessageBox.warning(self, "封面画廊", f"保存当前封面失败:{exc}") return False fresh_task = db.get_task(self.task.id, path=self.db_path) @@ -346,13 +354,20 @@ class CoverGalleryDialog(QDialog): self.visible_tasks[self.task_index] = fresh_task self.current_path = _normalize_file_path(self.selected_path) self.changed = True + self._rebuild_candidate_items() + self._sync_initial_selection() self._update_status() + if show_success_hint: + self._set_save_hint("已保存为本次更新封面") if self.gallery_updated_callback is not None: self.gallery_updated_callback(self.task) if close_on_success: self.accept() return True + def _set_save_hint(self, message): + self.save_hint_label.setText(str(message or "")) + def regenerate_cover(self, checked=False): if self.regenerate_thread is not None: return False @@ -574,6 +589,7 @@ class CoverGalleryDialog(QDialog): self.account = self._account_for_task(task) self.current_path = _normalize_file_path(getattr(self.task, "new_cover_path", None)) self.selected_path = None + self._set_save_hint("") self.candidates = image_paths.list_task_cover_candidates(self.image_root, self.task, account=self.account) self._rebuild_candidate_items() self._sync_initial_selection() diff --git a/docs/tasks/T-574.md b/docs/tasks/T-574.md index 4eb4744..2e143ce 100644 --- a/docs/tasks/T-574.md +++ b/docs/tasks/T-574.md @@ -3,7 +3,7 @@ id: T-574 title: ②封面画廊保存后停留并提示已保存 phase: 7 deps: [T-573] -status: TODO +status: DONE created: 2026-07-09 --- @@ -63,4 +63,12 @@ created: 2026-07-09 ## 执行记录 -(做完在这里写:改了什么文件、跑了什么验证命令及结果、关键决策。) +- 2026-07-09:已完成。 + - `app/gui/tabs/generate.py`:封面画廊底部新增保存提示 label;「保存」后不再关闭弹窗,成功写入本地 `new_cover_path` 后显示「已保存为本次更新封面」,并重建候选项刷新「当前生效封面」标记;原「取消」按钮改为「关闭」,仍走原关闭/未保存保护逻辑。 + - `tests/test_gui.py`:更新封面画廊保存测试,覆盖保存后弹窗不退出、DB 生效、提示文案显示、关闭按钮文案以及新候选项立即标记为当前生效。 + - 验证通过: + - `py -3.10 -m unittest tests.test_gui` + - `python -m ruff check app tests main.py` + - `py -3.10 -m compileall app main.py` + - `py -3.10 -m unittest discover -s tests` + - `git diff --check` diff --git a/tests/test_gui.py b/tests/test_gui.py index 8bdeb0a..f4d7c89 100644 --- a/tests/test_gui.py +++ b/tests/test_gui.py @@ -2368,6 +2368,12 @@ class GuiTests(TempDirMixin, unittest.TestCase): self.assertEqual("generated", updated.stage) self.assertEqual("pending", updated.status) self.assertTrue(dialog.changed) + self.assertEqual(0, dialog.result()) + self.assertEqual("关闭", dialog.cancel_button.text()) + self.assertEqual("已保存为本次更新封面", dialog.save_hint_label.text()) + self.assertEqual(os.path.abspath(selected), dialog.current_path) + self.assertTrue(dialog.candidate_buttons[selected].isChecked()) + self.assertEqual("当前生效", dialog.candidate_buttons[selected].text()) self.assert_removed(temp_dir)