feat: 重新执行支持当前行兜底 (#176)
This commit is contained in:
+30
-15
@@ -503,11 +503,11 @@ class PDDTaskPage(QWidget):
|
||||
self.invertSelectionButton.setEnabled(False)
|
||||
|
||||
self.rerunButton = PushButton(FIF.UPDATE, "重新采集", self)
|
||||
self.rerunButton.setAccessibleName("重新采集勾选的采集任务")
|
||||
self.rerunButton.setAccessibleName("重新采集勾选任务或当前任务")
|
||||
self.rerunButton.setEnabled(False)
|
||||
|
||||
self.purchaseRerunButton = PushButton(FIF.SHOPPING_CART, "重新采购", self)
|
||||
self.purchaseRerunButton.setAccessibleName("重新采购勾选的采购任务")
|
||||
self.purchaseRerunButton.setAccessibleName("重新采购勾选任务或当前任务")
|
||||
self.purchaseRerunButton.setEnabled(False)
|
||||
|
||||
self.resubmitButton = PushButton(FIF.SEND, "重新上报", self)
|
||||
@@ -802,16 +802,35 @@ class PDDTaskPage(QWidget):
|
||||
return
|
||||
if self._rerun_state != "idle":
|
||||
return
|
||||
task_ids = self.taskModel.checked_task_ids()
|
||||
if task_ids:
|
||||
self.rerunRequested.emit(task_ids)
|
||||
task_ids = self._rerun_target_task_ids()
|
||||
if not task_ids:
|
||||
self._show_missing_rerun_target()
|
||||
return
|
||||
self.rerunRequested.emit(task_ids)
|
||||
|
||||
def _request_purchase_rerun(self) -> None:
|
||||
if self._rerun_state != "idle":
|
||||
return
|
||||
task_ids = self.taskModel.checked_task_ids()
|
||||
if task_ids:
|
||||
self.purchaseRerunRequested.emit(task_ids)
|
||||
task_ids = self._rerun_target_task_ids()
|
||||
if not task_ids:
|
||||
self._show_missing_rerun_target()
|
||||
return
|
||||
self.purchaseRerunRequested.emit(task_ids)
|
||||
|
||||
def _rerun_target_task_ids(self) -> tuple[str, ...]:
|
||||
"""返回重新执行目标;勾选集优先,没有勾选时使用当前行。"""
|
||||
|
||||
checked_task_ids = self.taskModel.checked_task_ids()
|
||||
if checked_task_ids:
|
||||
return checked_task_ids
|
||||
|
||||
current_task_id = self.current_task_id()
|
||||
return (current_task_id,) if current_task_id else ()
|
||||
|
||||
def _show_missing_rerun_target(self) -> None:
|
||||
"""在没有勾选和当前行时给出可操作的中文提示。"""
|
||||
|
||||
self.statusLabel.setText("请勾选任务或单击选择一行")
|
||||
|
||||
def _request_resubmit(self) -> None:
|
||||
if self._resubmit_running or self._remove_running:
|
||||
@@ -852,19 +871,15 @@ class PDDTaskPage(QWidget):
|
||||
return
|
||||
|
||||
self.rerunButton.setText("重新采集")
|
||||
self.rerunButton.setAccessibleName("重新采集勾选的采集任务")
|
||||
self.rerunButton.setAccessibleName("重新采集勾选任务或当前任务")
|
||||
self.purchaseRerunButton.setText("重新采购")
|
||||
idle = not self._resubmit_running and not self._remove_running
|
||||
has_tasks = self.taskModel.data_row_count() > 0
|
||||
self.autoFetchButton.setEnabled(idle)
|
||||
self.selectAllButton.setEnabled(idle and has_tasks)
|
||||
self.invertSelectionButton.setEnabled(idle and has_tasks)
|
||||
self.rerunButton.setEnabled(
|
||||
idle and bool(self.taskModel.checked_task_ids())
|
||||
)
|
||||
self.purchaseRerunButton.setEnabled(
|
||||
idle and bool(self.taskModel.checked_task_ids())
|
||||
)
|
||||
self.rerunButton.setEnabled(idle and has_tasks)
|
||||
self.purchaseRerunButton.setEnabled(idle and has_tasks)
|
||||
self.resubmitButton.setEnabled(
|
||||
idle and bool(self.taskModel.checked_task_ids())
|
||||
)
|
||||
|
||||
@@ -232,6 +232,69 @@ class TaskTableModelCheckTests(unittest.TestCase):
|
||||
self.assertEqual(received, [("TASK-1", "TASK-2")])
|
||||
page.deleteLater()
|
||||
|
||||
def test_rerun_uses_current_row_when_no_task_is_checked(self):
|
||||
page = PDDTaskPage()
|
||||
page.set_tasks(
|
||||
[TaskRow("COL-1", "采集"), TaskRow("PUR-1", "采购")]
|
||||
)
|
||||
collect_requests = []
|
||||
purchase_requests = []
|
||||
page.rerunRequested.connect(collect_requests.append)
|
||||
page.purchaseRerunRequested.connect(purchase_requests.append)
|
||||
|
||||
page.taskTable.setCurrentIndex(page.taskModel.index(0, TITLE_COLUMN))
|
||||
page.rerunButton.click()
|
||||
page.taskTable.setCurrentIndex(page.taskModel.index(1, TITLE_COLUMN))
|
||||
page.purchaseRerunButton.click()
|
||||
|
||||
self.assertEqual(collect_requests, [("COL-1",)])
|
||||
self.assertEqual(purchase_requests, [("PUR-1",)])
|
||||
self.assertEqual(page.taskModel.checked_task_ids(), ())
|
||||
page.deleteLater()
|
||||
|
||||
def test_rerun_checked_tasks_take_priority_over_current_row(self):
|
||||
page = PDDTaskPage()
|
||||
page.set_tasks(
|
||||
[TaskRow("COL-1", "采集"), TaskRow("COL-2", "采集")]
|
||||
)
|
||||
received = []
|
||||
page.rerunRequested.connect(received.append)
|
||||
page.taskTable.setCurrentIndex(page.taskModel.index(0, TITLE_COLUMN))
|
||||
page.taskModel.setData(
|
||||
page.taskModel.index(1, CHECK_COLUMN),
|
||||
Qt.Checked,
|
||||
Qt.CheckStateRole,
|
||||
)
|
||||
|
||||
page.rerunButton.click()
|
||||
|
||||
self.assertEqual(received, [("COL-2",)])
|
||||
page.deleteLater()
|
||||
|
||||
def test_rerun_without_checked_or_current_task_shows_guidance(self):
|
||||
page = PDDTaskPage()
|
||||
page.set_tasks([TaskRow("COL-1", "采集")])
|
||||
page.taskTable.clearSelection()
|
||||
page.taskTable.setCurrentIndex(page.taskModel.index(-1, -1))
|
||||
|
||||
page.rerunButton.click()
|
||||
|
||||
self.assertEqual(
|
||||
page.statusLabel.text(), "请勾选任务或单击选择一行"
|
||||
)
|
||||
page.deleteLater()
|
||||
|
||||
def test_resubmit_and_remove_still_require_checked_tasks(self):
|
||||
page = PDDTaskPage()
|
||||
page.set_tasks([TaskRow("TASK-1", "采集")])
|
||||
page.taskTable.setCurrentIndex(page.taskModel.index(0, TITLE_COLUMN))
|
||||
|
||||
self.assertTrue(page.rerunButton.isEnabled())
|
||||
self.assertTrue(page.purchaseRerunButton.isEnabled())
|
||||
self.assertFalse(page.resubmitButton.isEnabled())
|
||||
self.assertFalse(page.removeButton.isEnabled())
|
||||
page.deleteLater()
|
||||
|
||||
def test_auto_fetch_text_and_keyword_width(self):
|
||||
page = PDDTaskPage()
|
||||
|
||||
|
||||
@@ -385,8 +385,8 @@ class PDDTaskPageEventTest(unittest.TestCase):
|
||||
events = PDDTaskPageEvent(page, self.repository)
|
||||
events.load_initial_tasks()
|
||||
|
||||
self.assertFalse(page.rerunButton.isEnabled())
|
||||
self.assertFalse(page.purchaseRerunButton.isEnabled())
|
||||
self.assertTrue(page.rerunButton.isEnabled())
|
||||
self.assertTrue(page.purchaseRerunButton.isEnabled())
|
||||
page.taskModel.setData(
|
||||
page.taskModel.index(0, 0), Qt.Checked, Qt.CheckStateRole
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user