Skip to content

脚本与事件

SceneV 3D 的脚本与事件能力用于处理数据过滤、条件判断、对象联动和复杂业务动作。在线设计器加载了 Monaco 编辑器资源,说明脚本配置是 3D 设计器的重要能力之一。

1. 使用场景

场景说明
数据过滤将接口、MQTT、ThingsBoard 返回的数据整理为统一结构
状态判断根据温度、压力、在线状态、告警等级计算模型状态
事件回调点击模型、进入场景、数据刷新后执行自定义逻辑
动作编排按条件触发视角切换、弹框、显隐、动画和跳转
外部集成调用业务接口、打开外部页面、传递设备 ID 或 token

2. 脚本编写原则

  • 输入数据可能为空,脚本要先做空值判断。
  • 返回结构要稳定,字段名不要频繁变化。
  • 不要在高频刷新中写复杂循环或大量 DOM 操作。
  • 业务编码和模型编码要保持一致。
  • 脚本中不要写死环境地址,优先通过变量或配置传入。

3. 数据过滤脚本

数据过滤脚本用于把原始数据转换为场景绑定数据。

javascript
const source = Array.isArray(e) ? e : [e];

return source.map((item) => {
  const temperature = Number(item.temperature || 0);
  const alarmLevel = temperature > 80 ? 2 : temperature > 60 ? 1 : 0;

  return {
    id: item.deviceId,
    label: item.deviceName || item.deviceId,
    value: {
      status: item.online ? "running" : "offline",
      temperature,
      alarmLevel
    }
  };
});

4. 条件动作

条件动作适合把数据变化映射到视觉和交互表现。

条件动作
status === "offline"模型置灰,标签显示离线
alarmLevel === 1显示黄色预警状态
alarmLevel >= 2红色高亮并打开告警面板
temperature > 80播放闪烁动画并定位到设备
点击模型展示设备详情面板

5. 事件类型

常见事件可按触发来源分组:

来源事件
场景场景加载完成、场景销毁、视角切换完成
模型点击、选中、取消选中、鼠标移入、鼠标移出
数据数据源连接成功、数据更新、数据异常
UI按钮点击、弹框打开、弹框关闭
外部系统URL 参数变化、业务消息推送、iframe 通信

6. 事件编排示例

点击设备打开详情

text
模型点击 -> 读取模型编码 -> 查找设备数据 -> 设置选中状态 -> 打开详情面板

建议详情面板展示:

  • 设备名称
  • 运行状态
  • 实时指标
  • 告警信息
  • 最后更新时间
  • 外部系统入口

告警自动定位

text
数据更新 -> 判断告警等级 -> 设置模型高亮 -> 切换相机视角 -> 打开告警面板

这种联动适合大屏值守场景,但要控制触发频率,避免告警频繁推送导致相机不停跳转。

7. 与业务系统通信

如果 SceneV 3D 嵌入在业务系统中,常见通信方式包括:

方式用途
URL 参数传递项目 ID、设备 ID、token、租户信息
localStorage读取登录态或临时配置
postMessageiframe 与父页面通信
HTTP API查询详情、创建工单、确认告警
WebSocket接收业务系统推送的实时消息

8. 调试建议

  • 先在少量模型上验证脚本,再复制到同类对象。
  • 对关键分支使用日志输出,确认输入和返回值。
  • 预览模式下检查脚本是否会阻塞渲染。
  • 对外部接口调用设置失败兜底。
  • 高频数据脚本只做轻量转换,复杂计算放到服务端处理。