Files
Axi_Omron/docs/superpowers/specs/2026-04-16-axi-omron-ui-design.md
yunxiao.zhu 49f113dcf3 feat: 初始化 PCB 检测 WPF 应用程序
* 创建 AxiOmron.PcbCheck 项目主框架及解决方案
* 添加 Dashboard 和系统设置页面
* 实现 Modbus TCP PLC、扫码枪、SFTP 查询等核心服务
* 集成 Andon 报警、工作流托管服务与日志配置
* 补充项目文档和 UI 设计规范
2026-04-17 10:43:51 +08:00

128 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Axi Omron PCB Check - UI 美化设计文档
## 目标
`AxiOmron.PcbCheck` 的 WPF 界面引入 HandyControl (3.5.1) 进行美化,视觉风格与参考程序(`Daimler_PCB_Check_Client`)保持一致,降低后续维护成本。
## 当前状态
- 项目为 .NET 8 WPF 应用,当前无第三方 UI 库。
- 主要界面文件:
- `MainWindow.xaml`:顶部标题栏 + 两个导航按钮 + Frame 容器。
- `Views/Pages/DashboardPage.xaml`:状态卡片、操作按钮、日志表格、最近处理记录。
- `Views/Pages/SystemSettingsPage.xaml`TabControl 配置表单。
- 参考程序已使用 `HandyControl` 3.5.1,并采用 `SkinDefault` 主题 + `PrimaryBrush` 等内置资源。
## 设计细节
### 1. 引入 HandyControl 包
-`AxiOmron.PcbCheck.csproj` 中添加 `PackageReference Include="HandyControl" Version="3.5.1"`
-`App.xaml``Application.Resources` 中合并两个资源字典:
- `pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml`
- `pack://application:,,,/HandyControl;component/Themes/Theme.xaml`
- 引入 HandyControl 命名空间 `xmlns:hc="https://handyorg.github.io/handycontrol"` 到需要使用高级控件的页面(如主窗口)。
### 2. MainWindow.xaml
- **标题栏**:背景改用 `DynamicResource {x:Static hc:ResourceToken.PrimaryBrush}`(与参考程序一致)。
- **标题文字**:字号 20、白色、加粗、左边距 20。
- **导航按钮**:使用 `Style="{StaticResource ButtonPrimary}"`(参考程序样式),字号 18、加粗、适当内边距保持“首页 / 系统设置”两个按钮。
- **窗口尺寸**:保持现有 Width=1600 / Height=950 / MinWidth=1400 / MinHeight=860居中启动。
- **Frame 容器**:不变,继续承载 `DashboardPage``SystemSettingsPage`
### 3. DashboardPage.xaml
- **页面背景**:移除硬编码 `#0F172A`,改由外层窗口/页面背景统一,或显式设为 `{DynamicResource {x:Static hc:ResourceToken.BackgroundBrush}}`
- **操作按钮**:将现有自定义 `PrimaryButtonStyle` 替换为 HandyControl 的 `ButtonPrimary`,保持命令绑定不变。
- **状态卡片**
- 将现有 `Border` 卡片样式替换为 HandyControl 的 `Card``hc:Card`)或保留 `Border` 但统一使用主题色。
- 推荐做法:使用 `hc:Card`,设置 `BorderThickness="0"`,内部保持 `StackPanel` + `TextBlock` 结构。
- 标题字体16-18加粗数值字体14-16。
- **数据表格**
- 日志 `DataGrid` 与最近处理记录 `DataGrid` 保留,但移除硬编码行背景色、前景色、边框色,使用系统默认或浅色主题下的 DataGrid 样式。
- 列宽与绑定不变。
- **流程状态区**:将“流程状态”卡片改为 `hc:Card` 高亮展示,错误信息使用红色文字(不变)。
#### Dashboard 下半区布局方案确认
- 已确认采用 **方案 A双栏中枢布局**
- 设计目标:
- 消除当前页面下半区的大面积空白。
- 强化“当前板状态”和“过程追踪”两个核心视觉中心。
- 将运行日志降为辅助信息,而不是和主业务区争抢注意力。
- 布局原则:
- 左侧承担“当前状态 + 运行日志”主视角,右侧承担“处理记录 + 追踪摘要”副视角。
- 下半区不再平均切成多个小卡片,而是改为“少块、大面、强层级”。
- 通过不同卡片高度、标题层级、留白和分组,建立更清晰的信息优先级。
#### Dashboard 下半区具体布局
- **整体分栏**
- 下半区采用 `1.3 : 0.9` 左右双栏。
- 左栏为主工作区,右栏为过程追踪区。
- **左栏上部**
- 使用两个并排摘要卡片。
- 卡片 1`当前二维码 + 结果码 / 报警码`
- 卡片 2`关键标志 + 扫码次数 + SFTP 次数`
- 当前二维码信息作为左栏上部的第一视觉重点,字体明显大于普通统计值。
- **左栏下部**
- 放置 `最近运行日志`,占据左栏主要高度。
- DataGrid 保留,但应提升表头、行高、内边距和空状态表现,避免“开发态表格感”过强。
- **右栏上部**
- 放置 `最近处理记录摘要`,展示:
- 最近触发时间
- 最近完成时间
- 最后刷新时间
- 该区域应做成信息摘要卡,而不是散落的三行文字。
- **右栏下部**
- 放置 `最近处理记录列表`
- 列表可以保留 DataGrid但视觉上应更轻重点突出时间、条码、结果三列。
- 若 HandyControl 样式允许,可适当弱化网格线,提升卡片式整洁感。
#### Dashboard 下半区视觉风格约束
- 不新增花哨装饰,不改为互联网运营后台风格,保持工业桌面应用的稳重感。
- 卡片层次应依靠以下手段建立,而不是依赖过多边框:
- 标题字号差异
- 数值字号差异
- 卡片阴影和圆角
- 区块留白
- 轻量分隔
- `关键标志` 建议改为更有秩序的纵向状态列表,保留圆点语义,但需统一间距、字号、对齐。
- `结果码 / 报警码` 不再作为独立弱卡片存在,应并入主摘要区,提高信息密度。
- `最近处理记录``最近运行日志` 必须形成主次关系:
- 主日志区更宽,更适合排查问题。
- 处理记录区更紧凑,更适合回看节拍与结果。
#### 本次改造范围
- 仅重构 `DashboardPage.xaml` 的下半区布局与视觉层级。
- 不修改 ViewModel 属性命名、命令绑定和业务逻辑。
- 不新增复杂动画、主题切换、图表控件或第三方可视化组件。
- 若需要新增局部样式或页面资源,应优先放在页面内,避免污染全局资源。
### 4. SystemSettingsPage.xaml
- **TabControl**:使用 HandyControl 的 `TabControl` 样式(默认已覆盖),或显式使用 `hc:TabControl`
- **表单项**
- 将大量 `Label + TextBox` 组合替换为 `hc:TextBoxExtend`,设置 `hc:InfoElement.Title="标题"``hc:InfoElement.TitlePlacement="Left"`
- 这样可以去掉自定义 `FieldLabelStyle``FieldTextBoxStyle`,减少代码量。
- 每个 Tab 内部保持 `ScrollViewer` + `Grid` 两列布局(标题列 + 输入列)。
- **复选框**:使用 `CheckBox` 即可HandyControl 已提供默认样式。
- **底部操作栏**:保留“重新加载 / 保存配置”两个按钮,样式改为 `ButtonPrimary``ButtonDefault`(或保持默认),与参考程序一致。
### 5. 数据绑定与代码影响
- 所有 ViewModel 命令、属性绑定保持不变。
- 不需要修改 `.cs` 文件,除非控件类型变更导致需要调整命名引用(如 `Border` -> `hc:Card` 不影响后台代码)。
- 自定义 `BooleanToBrushConverter` 继续保留并在 `DashboardPage` 使用。
### 6. 构建与验证
- 添加包后执行 `dotnet restore`
- 编译项目,确认无 XAML 资源加载异常。
- 启动应用,检查:
1. 主窗口标题栏颜色与按钮样式正常。
2. Dashboard 卡片、表格显示正常,无布局错位。
3. SystemSettings 各 Tab 表单输入框带有 HandyControl 样式(圆角、焦点效果)。
4. 各页面切换无异常。
## 排除项(本次不做)
- 不改写业务逻辑、ViewModel、服务层。
- 不引入 HandyControl 的高级控件Growl、Timeline、Pagination 等),避免过度设计。
- 不替换为其他 UI 库MahApps、MaterialDesign、WPFUI 等)。