跳到主要内容

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,没有自己的运行入口。它定义重复项的视觉结构:

  1. 在 Component 中声明 props,并用 sampleProps 检查设计效果。
  2. 在 Widget 属性和方法中通过 self.props 使用完整输入;Repeater 项也可使用当前 itemindex
  3. 在 Page 的 Repeater 中选择 Component,并传入每一项数据。
  4. 每个运行实例拥有独立的 Widget 和状态上下文,不要依赖另一个实例的内部 Widget。

典型 Component 包括工位卡片、报警条目、IO 状态行和任务标签。

权限

  • Page 的 requiredRoles 决定哪些 App user 可以打开该 Page。
  • Widget 的 requiredRoles 决定拥有对应角色的用户是否能看到该 Widget。
  • 编辑器为了便于设计会显示全部 Page 和 Widget;权限要从运行页使用真实 App user 验证。
  • 角色可见性是 UI 访问控制,不是设备 Safety 或后端操作授权。

关键规则

  • 运行 Page 和 Component 的源码属于 DeviceFrontend runtime,不依赖编辑器画布才能执行。
  • Page-local Query 不受支持;所有 Query 在 App Settings 中集中维护。
  • Component 是独立 App 资源,不嵌入某个 Page 的数据结构。
  • Page 方法和表达式只通过 QX 使用运行能力,不依赖编辑器内部对象。
  • 长时间设备动作、轮询和工艺联锁不要放在 Page method 中。
  • 外部修改命中有未保存内容的 Tab 时,先处理冲突再保存。

如何验证

  1. 保存 Page / Component,确认 Problems 没有 Widget、method 或表达式错误。
  2. 在查看模式检查点击、输入、表格和 3D 等真实交互。
  3. 对 Component 使用不同 sampleProps,再用多条 Repeater 数据检查实例隔离。
  4. 确认需要的 Page 已设为首页或可以从其他 Page 导航到达。
  5. Start 或 Debug 后,从运行页检查数据刷新、动作结果、错误提示和多语言。
  6. 分别使用匿名用户、普通角色和 Admin 验证 Page / Widget 可见性。

相关教程与指南