From bf816bce02c189792503bacf59b33b6cc4a4b502 Mon Sep 17 00:00:00 2001 From: chengma Date: Mon, 10 Aug 2026 10:05:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=BB=E5=8A=A1=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E6=94=B9=E4=B8=BA=E9=A1=B6=E9=83=A8=E5=B1=85?= =?UTF-8?q?=E4=B8=AD=20(#87)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pdd_ui_event.py | 6 +++--- client/test/test_pdd_ui_event.py | 4 ++++ docs/client/05-ui-specification.md | 6 +++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/client/src/pdd_ui_event.py b/client/src/pdd_ui_event.py index 765a544..6583539 100644 --- a/client/src/pdd_ui_event.py +++ b/client/src/pdd_ui_event.py @@ -513,7 +513,7 @@ class PDDTaskPageEvent(QObject): content=content, isClosable=True, duration=ERROR_FEEDBACK_DURATION_MS, - position=InfoBarPosition.TOP_RIGHT, + position=InfoBarPosition.TOP, parent=self._page, ) self._replace_rerun_feedback(bar) @@ -801,7 +801,7 @@ class PDDTaskPageEvent(QObject): content=content, isClosable=True, duration=ERROR_FEEDBACK_DURATION_MS, - position=InfoBarPosition.TOP_RIGHT, + position=InfoBarPosition.TOP, parent=self._page, ) self._claim_feedback = bar @@ -840,7 +840,7 @@ class PDDTaskPageEvent(QObject): content=content, isClosable=True, duration=ERROR_FEEDBACK_DURATION_MS, - position=InfoBarPosition.TOP_RIGHT, + position=InfoBarPosition.TOP, parent=self._page, ) self._device_feedback = bar diff --git a/client/test/test_pdd_ui_event.py b/client/test/test_pdd_ui_event.py index d144fe4..b4e9e60 100644 --- a/client/test/test_pdd_ui_event.py +++ b/client/test/test_pdd_ui_event.py @@ -11,6 +11,7 @@ from unittest.mock import patch os.environ.setdefault("QT_QPA_PLATFORM", "offscreen") from PyQt5.QtWidgets import QApplication +from qfluentwidgets import InfoBarPosition from src.android_device_service import AndroidDeviceSearchError from src.pdd_ui import PDDTaskPage @@ -468,6 +469,7 @@ class PDDTaskPageEventTest(unittest.TestCase): events._show_rerun_error("重新采集失败", "测试错误") second = events._rerun_feedback self.assertIsNot(first, second) + self.assertEqual(second.position, InfoBarPosition.TOP) self.assertEqual(second.duration, ERROR_FEEDBACK_DURATION_MS) close_buttons = [ @@ -502,6 +504,7 @@ class PDDTaskPageEventTest(unittest.TestCase): second = events._claim_feedback self.assertIsNot(first, second) + self.assertEqual(second.position, InfoBarPosition.TOP) self.assertEqual(second.duration, ERROR_FEEDBACK_DURATION_MS) self.assertGreaterEqual(second.minimumWidth(), ERROR_FEEDBACK_MIN_WIDTH) self.assertGreaterEqual(second.minimumHeight(), ERROR_FEEDBACK_MIN_HEIGHT) @@ -616,6 +619,7 @@ class PDDTaskPageEventTest(unittest.TestCase): events._show_device_unavailable("第二条") second = events._device_feedback self.assertIsNot(first, second) + self.assertEqual(second.position, InfoBarPosition.TOP) self.assertEqual(second.duration, ERROR_FEEDBACK_DURATION_MS) self.assertGreaterEqual(second.minimumWidth(), ERROR_FEEDBACK_MIN_WIDTH) self.assertGreaterEqual(second.minimumHeight(), ERROR_FEEDBACK_MIN_HEIGHT) diff --git a/docs/client/05-ui-specification.md b/docs/client/05-ui-specification.md index 2c85384..90fc5b6 100644 --- a/docs/client/05-ui-specification.md +++ b/docs/client/05-ui-specification.md @@ -70,7 +70,7 @@ - 补交本地 Outbox 不依赖手机,可以在 Android 设备断开时继续执行。 - 执行本地任务或向 Admin 领取新任务前,工作线程必须用 `adb devices -l` 检查已保存的精确设备号。USB 和 Wi-Fi 设备都只接受 `device` 状态。 - 设备未连接、`offline`、`unauthorized` 或 ADB 检查失败时,立即停止本轮和自动获取;不得领取新任务,也不得启动本地任务。 -- 采集、采购、重新采集和设备错误使用较大的 `InfoBar` 提示,5 秒后自动关闭,并提供明显的“关闭提示”按钮。设备错误另外提供“打开设置”;重复错误替换旧提示,不得堆叠。完整错误原因保留在底部状态区。 +- 采集、采购、重新采集和设备错误使用较大的 `InfoBar` 提示,显示在软件窗口顶部水平居中,5 秒后自动关闭,并提供明显的“关闭提示”按钮。设备错误另外提供“打开设置”;重复错误替换旧提示,不得堆叠。完整错误原因保留在底部状态区。 ### 4.2 搜索与筛选 @@ -295,8 +295,8 @@ class TaskTableModel(QAbstractTableModel): | 领取到新任务 | 更新表格和状态区,不弹模态框 | | 暂时没有可领取的任务 | 只更新状态区,**不要连续弹提示** | | 搜索无结果 | 表格空状态和清除条件入口 | -| Admin 暂时离线 | 较大信息条,5 秒后自动关闭;底部保留错误,本地数据继续可用 | -| 设备断开 | 较大信息条,提供打开设置和关闭提示,5 秒后自动关闭 | +| Admin 暂时离线 | 窗口顶部居中的较大信息条,5 秒后自动关闭;底部保留错误,本地数据继续可用 | +| 设备断开 | 窗口顶部居中的较大信息条,提供打开设置和关闭提示,5 秒后自动关闭 | | 任务运行 | 底部状态区和必要进度,不阻塞整个窗口 | | 任务失败 | 行状态、详情和信息条,不显示原始堆栈 | | 多个订单候选 | 状态改为“需要人工处理”,打开详情决策 |