Page 与 Component 参考
Page 是操作员使用的 HMI 画面。Component 是 App 内可复用的视觉模板,主要用于 Repeater 等重复内容。需要创建完整画面时使用 Page;需要统一重复项的外观时使用 Component。
何时查这页
- 需要选择 Page、Component、Widget 或 Page method;
- 按钮、输入框或表格事件没有触发预期动作;
- 动态文本、对象状态、Variable 或 i18n 绑定不正确;
- Repeater 项之间互相影响,或 Component 输入不完整;
- 运行页的 Page / Widget 角色可见性不符合预期。
入口与核心对象
在 Resources → Pages 新建或打开 Page;Pages 下的 Components 分组管理 Component。选中画布空白处查看 Page 属性,选中 Widget 查看内容、布局、样式、动作和权限。
| 对象 | 作用 |
|---|---|
| Page | 一个可导航、可设为首页的运行画面 |
| Widget | 文本、按钮、输入、表格、图表、图片、视频、3D、上传等界面元素 |
| Page method | 由 Page 生命周期或 Widget 事件调用的界面逻辑 |
| Expression | 用 {{ ... }} 把 Widget 属性绑定到当前运行数据 |
| Component | 接收 props 并重复渲染统一结构的 App 级模板 |
| requiredRoles | 控制 Page 是否可访问,或 Widget 是否可见的 App role 列表 |
Page method
| 类型 | 适用场景 |
|---|---|
| Flow method | 调用 Object 或 Query、显示提示、条件判断和简单顺序动作 |
| TypeScript method | 复杂类型转换、组合返回值和需要代码表达的界面逻辑 |
在 Page 属性的 Methods 中创建方法,再从 Widget 的事件或 action 属性选择该方法。action 应是编辑器或 AI 生成的结构化方法绑定;不要把任意脚本文本直接粘贴到 action 字段。
Page method 应保持短小,并只做界面协调。稳定设备能力放在 Object,自带顺序、等待、超时和恢复的流程放在 Graph。
表达式与运行能力
常见入口如下:
| 入口 | Page 中的用途 |
|---|---|
QX.objects | 读取 Object 运行状态,或在方法中调用 Object / Graph 扩展方法 |
QX.variables | 读取 App Variable |
QX.queries | 从 Page method 调用 App 级 HTTP Query |
QX.widgets | 在当前 Page method 中访问已保存的 Widget |
QX.globals | 保存当前页面交互需要的轻量共享值 |
QX.actions | 导航和其他运行页交互动作 |
QX.i18n | 按当前运行页语言读取 App 翻译 |
示例:
{{ QX.variables.currentOrder }}
{{ QX.objects["station"].variables.runState }}
{{ QX.i18n.get("startButton") }}
表达式用于即时取值,不适合 await、长时间轮询或有副作用的设备操作。需要改变 Object 状态时,调用 Object 或 Graph method;需要写 App / Saved Variable 时,使用 Graph 的 Variable 节点或明确的后端能力。
Component 与 Repeater
Component 不是独立 Page,没有自己的运行入口。它定义重复项的视觉结构:
- 在 Component 中声明 props,并用
sampleProps检查设计效果。 - 在 Widget 属性和方法中通过
self.props使用完整输入;Repeater 项也可使用当前item和index。 - 在 Page 的 Repeater 中选择 Component,并传入每一项数据。
- 每个运行实例拥有独立的 Widget 和状态上下文,不要依赖另一个实例的内部 Widget。
典型 Component 包括工位卡片、报警条目、IO 状态行和任务标签。
权限
- Page 的
requiredRoles决定哪些 App user 可以打开该 Page。 - Widget 的
requiredRoles决定拥有对应角色的用户是否能看到该 Widget。 - 编辑器为了便于设计会显示全部 Page 和 Widget;权限要从运行页使用真实 App user 验证。
- 角色可见性是 UI 访问控制,不是设备 Safety 或后端操作授权。
关键规则
- 运行 Page 和 Component 的源码属于
DeviceFrontendruntime,不依赖编辑器画布才能执行。 - Page-local Query 不受支持;所有 Query 在 App Settings 中集中维护。
- Component 是独立 App 资源,不嵌入某个 Page 的数据结构。
- Page 方法和表达式只通过
QX使用运行能力,不依赖编辑器内部对象。 - 长时间设备动作、轮询和工艺联锁不要放在 Page method 中。
- 外部修改命中有未保存内容的 Tab 时,先处理冲突再保存。
如何验证
- 保存 Page / Component,确认 Problems 没有 Widget、method 或表达式错误。
- 在查看模式检查点击、输入、表格和 3D 等真实交互。
- 对 Component 使用不同
sampleProps,再用多条 Repeater 数据检查实例隔离。 - 确认需要的 Page 已设为首页或可以从其他 Page 导航到达。
- Start 或 Debug 后,从运行页检查数据刷新、动作结果、错误提示和多语言。
- 分别使用匿名用户、普通角色和 Admin 验证 Page / Widget 可见性。