重构:拆分 PDD 与设置页面 UI 模块 #3

Closed
opened 2026-08-06 12:04:03 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:重构
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / MVP
  • 阶段:1. UI 与工程骨架

要解决什么

当前 client/src/ui_main.py 同时包含 PDD 任务页、设备页、设置页和主窗口装配,页面职责与主窗口装配混在一起;pdd_ui.py 和 settings_ui.py 已有约束说明但还没有页面实现。随着后续页面扩展,继续堆在 ui_main.py 会增加初级程序员理解和修改成本。

做什么 / 不做什么

  • 做:
    • 将 PDDTaskPage 及其页面依赖移动到 client/src/pdd_ui.py;
    • 将 SettingsPage、现有设备设置相关页面及其页面依赖移动到 client/src/settings_ui.py;
    • 让 client/src/ui_main.py 只保留应用启动、主窗口、导航和页面装配;
    • 保持现有控件属性、objectName、导航顺序、窗口标题和可见界面行为不变。
  • 不做:
    • 不实现新的业务逻辑或事件绑定;
    • 不修改数据库、Admin 接口或 uiautomator2;
    • 不改变页面视觉、导航结构或设备页归并方案;
    • 不新增或升级依赖。

怎么做

  1. 保留 pdd_ui.py、settings_ui.py 顶部现有模块约束说明。
  2. 把页面类原样迁移到对应模块,并只导入页面实际需要的 Qt/Fluent 组件。
  3. ui_main.py 从页面模块导入页面类,只负责实例化与 addSubInterface 装配。
  4. 使用包内相对导入,入口继续由 client/buyer_main.py 启动。
  5. 通过语法检查和离屏冒烟测试验证导入、对象名称和主窗口创建。

预计修改文件:

  • client/src/ui_main.py
  • client/src/pdd_ui.py
  • client/src/settings_ui.py

验收标准

  • PDDTaskPage 只定义在 client/src/pdd_ui.py;
  • SettingsPage 和现有 DevicePage 只定义在 client/src/settings_ui.py;
  • client/src/ui_main.py 不再包含具体页面布局代码;
  • 页面 objectName、控件公开属性和导航装配保持不变;
  • 三个修改文件通过 Python 语法检查;
  • 离屏创建 MainWindow 打印 OK,且不连接设备、不执行自动化。

怎么验证

从 client/ 目录执行:

C:/Python310/python.exe -m py_compile src/ui_main.py src/pdd_ui.py src/settings_ui.py
$env:QT_QPA_PLATFORM="offscreen"
C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); assert w.pddTaskPage.objectName() == 'pddTaskPage'; assert w.devicePage.objectName() == 'devicePage'; assert w.settingsPage.objectName() == 'settingsPage'; print('OK'); app.quit()"
Remove-Item Env:QT_QPA_PLATFORM

风险和回退

主要风险是模块导入路径错误或迁移时遗漏页面依赖。通过语法检查和离屏创建窗口发现问题;需要回退时只回退本工单对应提交,不影响其他用户文件。

## 基本信息 - 类型:重构 - 父级大工单:#1 - 所属 MVP / 版本:#2 / MVP - 阶段:1. UI 与工程骨架 ## 要解决什么 当前 `client/src/ui_main.py` 同时包含 PDD 任务页、设备页、设置页和主窗口装配,页面职责与主窗口装配混在一起;`pdd_ui.py` 和 `settings_ui.py` 已有约束说明但还没有页面实现。随着后续页面扩展,继续堆在 `ui_main.py` 会增加初级程序员理解和修改成本。 ## 做什么 / 不做什么 - 做: - 将 `PDDTaskPage` 及其页面依赖移动到 `client/src/pdd_ui.py`; - 将 `SettingsPage`、现有设备设置相关页面及其页面依赖移动到 `client/src/settings_ui.py`; - 让 `client/src/ui_main.py` 只保留应用启动、主窗口、导航和页面装配; - 保持现有控件属性、`objectName`、导航顺序、窗口标题和可见界面行为不变。 - 不做: - 不实现新的业务逻辑或事件绑定; - 不修改数据库、Admin 接口或 uiautomator2; - 不改变页面视觉、导航结构或设备页归并方案; - 不新增或升级依赖。 ## 怎么做 1. 保留 `pdd_ui.py`、`settings_ui.py` 顶部现有模块约束说明。 2. 把页面类原样迁移到对应模块,并只导入页面实际需要的 Qt/Fluent 组件。 3. `ui_main.py` 从页面模块导入页面类,只负责实例化与 `addSubInterface` 装配。 4. 使用包内相对导入,入口继续由 `client/buyer_main.py` 启动。 5. 通过语法检查和离屏冒烟测试验证导入、对象名称和主窗口创建。 预计修改文件: - `client/src/ui_main.py` - `client/src/pdd_ui.py` - `client/src/settings_ui.py` ## 验收标准 - [x] `PDDTaskPage` 只定义在 `client/src/pdd_ui.py`; - [x] `SettingsPage` 和现有 `DevicePage` 只定义在 `client/src/settings_ui.py`; - [x] `client/src/ui_main.py` 不再包含具体页面布局代码; - [x] 页面 `objectName`、控件公开属性和导航装配保持不变; - [x] 三个修改文件通过 Python 语法检查; - [x] 离屏创建 `MainWindow` 打印 `OK`,且不连接设备、不执行自动化。 ## 怎么验证 从 `client/` 目录执行: ```powershell C:/Python310/python.exe -m py_compile src/ui_main.py src/pdd_ui.py src/settings_ui.py ``` ```powershell $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); assert w.pddTaskPage.objectName() == 'pddTaskPage'; assert w.devicePage.objectName() == 'devicePage'; assert w.settingsPage.objectName() == 'settingsPage'; print('OK'); app.quit()" Remove-Item Env:QT_QPA_PLATFORM ``` ## 风险和回退 主要风险是模块导入路径错误或迁移时遗漏页面依赖。通过语法检查和离屏创建窗口发现问题;需要回退时只回退本工单对应提交,不影响其他用户文件。
Author
Owner

实施完成,等待用户验收

最终实现

  • PDDTaskPage 已移动到 client/src/pdd_ui.py;
  • DevicePage、SettingsPage 已移动到 client/src/settings_ui.py;
  • client/src/ui_main.py 现在只负责应用启动、主窗口、导航和页面装配;
  • 页面 objectName、控件公开属性、导航顺序和可见行为保持不变;
  • 未修改数据库、Admin 接口、自动化逻辑或依赖。

验证结果

  • Python 语法检查:通过;
  • 离屏创建 MainWindow:通过,输出 OK;
  • 类定义位置检查:通过;
  • 测试没有连接设备、没有执行自动化。

环境输出 PyQt5 字体目录缺失警告,但不影响本次窗口创建和断言结果。

提交与归档

  • 实现提交:5916de4
  • 归档提交:956fc72
  • 本地归档:docs/task/3-拆分页面-ui-模块.md

未验证

未进行人工界面对比、真机操作、Windows 多缩放和主题切换测试。工单保持打开,状态为待用户验收。

## 实施完成,等待用户验收 ### 最终实现 - `PDDTaskPage` 已移动到 `client/src/pdd_ui.py`; - `DevicePage`、`SettingsPage` 已移动到 `client/src/settings_ui.py`; - `client/src/ui_main.py` 现在只负责应用启动、主窗口、导航和页面装配; - 页面 objectName、控件公开属性、导航顺序和可见行为保持不变; - 未修改数据库、Admin 接口、自动化逻辑或依赖。 ### 验证结果 - Python 语法检查:通过; - 离屏创建 MainWindow:通过,输出 `OK`; - 类定义位置检查:通过; - 测试没有连接设备、没有执行自动化。 环境输出 PyQt5 字体目录缺失警告,但不影响本次窗口创建和断言结果。 ### 提交与归档 - 实现提交:`5916de4` - 归档提交:`956fc72` - 本地归档:`docs/task/3-拆分页面-ui-模块.md` ### 未验证 未进行人工界面对比、真机操作、Windows 多缩放和主题切换测试。工单保持打开,状态为待用户验收。
Author
Owner

用户已于 2026-08-06 验收通过。关闭本单元任务,并同步更新 MVP #2 与大工单 #1 的任务清单。

用户已于 2026-08-06 验收通过。关闭本单元任务,并同步更新 MVP #2 与大工单 #1 的任务清单。
ila closed this issue 2026-08-06 14:03:27 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#3