脚本与事件
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 | 读取登录态或临时配置 |
| postMessage | iframe 与父页面通信 |
| HTTP API | 查询详情、创建工单、确认告警 |
| WebSocket | 接收业务系统推送的实时消息 |
8. 调试建议
- 先在少量模型上验证脚本,再复制到同类对象。
- 对关键分支使用日志输出,确认输入和返回值。
- 预览模式下检查脚本是否会阻塞渲染。
- 对外部接口调用设置失败兜底。
- 高频数据脚本只做轻量转换,复杂计算放到服务端处理。