feat(gui): add task deletion menus

This commit is contained in:
chengma
2026-07-20 11:12:01 +08:00
parent 6abe4decff
commit 9f43e5547a
7 changed files with 358 additions and 6 deletions
+79 -4
View File
@@ -39,6 +39,7 @@ class ApplyTab(QWidget):
status_callback=None,
open_accounts_callback=None,
open_settings_callback=None,
refresh_workflow_callback=None,
):
super().__init__(parent)
self.config = appconfig.load_config() if config is None else config
@@ -47,6 +48,7 @@ class ApplyTab(QWidget):
self.status_callback = status_callback
self.open_accounts_callback = open_accounts_callback
self.open_settings_callback = open_settings_callback
self.refresh_workflow_callback = refresh_workflow_callback
self.apply_worker = None
self.apply_thread = None
self.result_write_back_worker = None
@@ -357,18 +359,91 @@ class ApplyTab(QWidget):
def show_task_context_menu(self, position):
index = self.task_table.indexAt(position)
if index.isValid():
self.task_table.setCurrentIndex(index)
menu = QMenu(self)
if not index.isValid():
return
self.task_table.selectRow(index.row())
self.task_table.setCurrentIndex(index)
task = self.model.task_at(index.row())
if task is None:
return
menu = QMenu(self.task_table)
reset_action = menu.addAction("重置更新状态")
reset_action.setEnabled(
self.apply_thread is None
and self.result_write_back_thread is None
and self._selected_task() is not None
and getattr(task, "status", "") != "running"
)
reset_action.triggered.connect(self.reset_apply_status)
menu.addSeparator()
delete_action = menu.addAction("删除本条记录")
delete_action.setEnabled(
self.apply_thread is None
and self.result_write_back_thread is None
and getattr(task, "status", "") != "running"
)
delete_action.triggered.connect(self.delete_selected_task)
menu.exec(self.task_table.viewport().mapToGlobal(position))
def delete_selected_task(self, checked=False):
if self.apply_thread is not None or self.result_write_back_thread is not None:
self._set_status("更新或回写正在进行,不能删除记录", level="warning")
return
task = self._selected_task()
if task is None:
self._set_status("请选择要删除的记录", level="warning")
return
if getattr(task, "status", "") == "running":
self._set_status("任务正在处理,不能删除", level="warning")
return
batch = db.get_batch(task.batch_id, path=self.db_path)
batch_text = self._batch_label(batch) if batch is not None else task.batch_id
lines = [
"确定要删除本条本地记录吗?",
f"商品ID:{task.item_id}",
f"店铺:{self.model.account_name_for(task)}({task.alias})",
f"所属批次:{batch_text}",
]
if int(getattr(task, "committed", 0) or 0) == 1:
lines.extend(
[
"",
"该商品已提交过蝦皮。本次仅删除本地记录,不会回滚蝦皮线上商品。",
]
)
lines.extend(
[
"",
"删除后,该记录不会出现在①、②、③的列表、筛选、采集、生成、更新或回写范围。",
"不会删除原 Excel、本地图片或账号 Chrome 数据。",
]
)
answer = QMessageBox.question(
self,
"删除本条记录",
"\n".join(lines),
QMessageBox.Yes | QMessageBox.No,
QMessageBox.No,
)
if answer != QMessageBox.Yes:
self._set_status("已取消删除本条记录")
return
try:
result = db.delete_task(
task.id,
reason="用户在更新蝦皮页删除单条记录",
path=self.db_path,
)
except Exception as exc:
QMessageBox.warning(self, "删除本条记录", str(exc))
self._set_status(f"删除本条记录失败:{exc}", level="danger")
return
self.refresh_tasks()
if self.refresh_workflow_callback is not None:
self.refresh_workflow_callback()
message = f"已删除本地记录:商品 {result['item_id']}"
self._set_status(message, level="success")
QMessageBox.information(self, "删除本条记录", message)
def reset_apply_status(self, checked=False):
if self.apply_thread is not None or self.result_write_back_thread is not None:
self._set_status("更新或回写正在进行,不能重置")