thingsboard 自定义动作JS编程

在 ThingsBoard 中实现 自定义动作(Custom Action)的 JavaScript 编程,主要通过“Custom action (with HTML template)”方式完成,适用于创建弹窗、编辑实体、控制设备等交互行为。

实现步骤(以添加设备或资产为例)

1、进入部件编辑模式 → 点击“+”添加动作。

2、选择动作来源(如:Widget header button 或 Action cell button)。

3、动作类型选择:Custom action (with HTML template)

4、配置四个标签页:
Resources:引入外部 JS/CSS(可选);
CSS:自定义样式;
HTML:弹窗或交互界面结构;
JavaScript:核心逻辑代码。

 5、JavaScript 示例:添加设备/资产弹窗逻辑(精简版)

    var targetStateId = '';// 防止 entityLabel 为 nullif (entityLabel) {                               //entityLabel 是否包含“用电保护器” if (entityLabel.includes('用电保护器')) {targetStateId = 'state_air';             // 用电保护器} else if (entityLabel.includes('数字量')) {targetStateId = 'state_output';          // 数字量输入输出}else if (entityLabel.includes('DTU')) {targetStateId = 'state_dtu';          // DTU}}/* 2. 可选:额外参数,随状态一起带过去 */const params = {entityId: entityId.id,entityName: entityName,entityLabel: entityLabel};/* 3. 获取仪表盘所有已定义的状态列表 *///const states = widgetContext.dashboardCtrl.dashboard.configuration.states || {};//alert(JSON.stringify(states, null, 2));if (targetStateId) {widgetContext.stateController.openState(targetStateId, params, true);} else {widgetContext.showErrorToast('状态 "' + targetStateId + '" 未定义。');}

“自定义动作(Custom Action)” 的 JS 编程不是“炫技”,而是解决实际业务痛点的关键手段。它的好处和解决的问题可以总结为:


✅ 1. 解决“标准动作”无法满足的业务需求

  • 痛点:ThingsBoard 自带的动作(如“打开仪表盘”、“打开详情”)只能做固定的事情,无法处理复杂业务逻辑。

  • 例子

    • 点击按钮后需要弹窗输入设备参数(如 SIM 卡号、固件版本)再保存;

    • 点击“报警确认”按钮时,需要调用外部 API(钉钉/微信)通知运维人员;

    • 点击“重启设备”按钮时,需要先弹窗确认,再下发 RPC 命令并记录日志。


✅ 2. 解决“多步骤交互”问题

  • 痛点:标准动作是“一步完成”,而实际业务需要“多步交互”(如表单验证、异步加载数据)。

  • 例子

    • 添加设备时,先选择设备类型 → 动态加载对应的属性模板 → 再填写参数 → 最后保存;

    • 点击“批量下发配置”时,先选择配置模板 → 再选择目标设备 → 最后确认执行。


✅ 3. 解决“跨系统集成”问题

  • 痛点:ThingsBoard 无法直接调用外部系统(如 ERP、CRM、工单系统)。

  • 例子

    • 点击“创建工单”按钮时,调用 Jira/ServiceNow API 创建问题单;

    • 点击“同步库存”按钮时,调用 ERP 接口获取最新库存数据并更新 ThingsBoard 属性。


✅ 4. 解决“用户体验差”问题

  • 痛点:标准动作的弹窗样式固定,无法根据品牌或业务需求定制。

  • 例子

    • 自定义弹窗的标题、按钮颜色、布局,使其符合公司 UI 规范;

    • 在弹窗中嵌入图表(如历史数据趋势)辅助用户决策。


✅ 5. 解决“重复劳动”问题

  • 痛点:多个仪表盘需要相同的“添加/编辑”功能,但标准动作无法复用。

  • 例子

    • 封装一个“通用设备添加弹窗”,所有仪表盘只需引用,无需重复造轮子;

    • 将复杂逻辑(如设备注册流程)封装成可复用的自定义动作模板。


✅ 6. 解决“权限控制”问题

  • 痛点:标准动作无法根据用户角色动态控制按钮显隐。

  • 例子

    • 只有“管理员”角色才能看到“删除设备”按钮;

    • 只有“维修工程师”角色才能看到“远程调试”按钮。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93387.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 简单接口角色授权检查实现

一、背景与目标在Spring Boot应用开发中,接口级别的权限控制是系统安全的重要组成部分。本文将介绍一种简单直接的接口角色授权检查实现方案,适合快速开发和安全合规检查场景。二、技术方案概述本方案采用自定义注解拦截器的方式实现,具有以下…

PytorchLightning最佳实践日志篇

在 PyTorch Lightning(PL)中,日志系统是 “炼丹” 过程中复现实验、对比效果、排查问题的核心工具。结合实际工程经验,总结以下最佳实践和技巧,帮助提升实验效率: 一、日志工具的选择与配置 PL 通过统一的s…

基于JavaWeb的兼职发布平台的设计与实现

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7数据库工具:Navicat12开发软件:eclipse/myeclipse/ideaMaven包:Maven3.6系统展示系统首页用户登录招聘信…

Linux学习--C语言(指针3)

1.指针函数和函数指针1.1 指针函数指针函数是函数&#xff0c;函数的返回值是指针不能返回局部变量的地址指针函数返回的地址可以作为下一个函数调用的参数1.2 函数指针函数指针是指针&#xff0c;指针指向一个函数#include <stdio.h>int Add(int x, int y) {return x y…

【JAVA EE初阶】多线程(上)

目录 1.预备知识 1.1 冯诺依曼体系结构&#xff1a; 1.2 现代CPU主要关心指标&#xff08;和日常开发密切相关的&#xff09; 1.3 计算机中&#xff0c;一个汉字占几个字节&#xff1f; 1.4 Windows和Linux的区别 1.5 PCB的一些关键要点 2.线程和进程 2.1 创建线程的写法…

用互联网思维扩展电商后台的 CRUD 功能

一、自定义实现MyBatis-Plus逆向工程 多数据源的问题解决了&#xff0c;接下来开始进行实际开发时&#xff0c;你会发现&#xff0c;最麻烦的一件事情就是要创建与数据库表对应的POJO了。这些没什么难度&#xff0c;但是繁琐的内容会占据大量的开发时间。比如一个PmsProducr对…

无代码测试平台ATECLOUD全场景测试方案

ATECLOUD 智能云测试平台是有纳米软件开发的一款以无代码架构与弹性扩展体系为核心的自动化测试平台&#xff0c;通过数据模型驱动的创新设计&#xff0c;为研发、产线等多场景提供高效可控的测试解决方案。​无代码架构 ATECLOUD 打破传统技术壁垒&#xff0c;构建完全可视化的…

当 AI 重构审计流程,CISA 认证为何成为破局关键

在南京审计大学最新发布的《面向审计行业 DeepSeek 大模型操作指南》中&#xff0c;一组数据引发行业深思&#xff1a;通过自动化数据处理、智能风险识别和定制化报告生成&#xff0c;AI 大模型能帮助审计人员降低 40% 以上的人工成本&#xff0c;同时将风险识别准确率提升至 9…

NAT技术、代理服务器

NAT/NAPT技术NAT的全称是network address translation&#xff0c;网络地址转换。NAT 能在对外通信时够将源 IP 转为新源 IP&#xff0c;对内通信时将目的ip转换成新目的ip&#xff0c;实现这个操作&#xff0c;靠的是地址转换表但NAT的说法其实是不准确的&#xff0c;因为多个…

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-45,(知识点:负反馈的作用,基础理解,干扰和噪声的抑制)

目录 1、题目 2、解答 步骤一&#xff1a;明确负反馈的作用原理 步骤二&#xff1a;逐一分析选项 3、相关知识点 一、负反馈的基本原理 二、负反馈对干扰和噪声的抑制机制 三、选项分析与答案 四、扩展思考&#xff1a;如何抑制不同位置的干扰&#xff1f; 总结 题目…

Flutter蓝牙BLE开发完全指南(内含高级功能扩展)

Flutter蓝牙BLE开发完全指南 我将为您提供一个完整的Flutter蓝牙BLE实现方案,包含UI设计、权限处理、设备扫描、连接通信等完整功能。 完整实现方案 1. 添加依赖与权限配置 pubspec.yaml dependencies:flutter:sdk: flutterflutter_blue_plus: ^1.10.0permission_handler…

使用 Canvas 替代 <video> 标签加载并渲染视频

在部分浏览器环境或业务场景下&#xff0c;直接使用 <video> 标签加载视频会出现首帧延迟的情况。以下方法通过 WebGPU Canvas 2D 将视频帧绘制到自定义 Canvas 上&#xff0c;让 <video> 只做解码&#xff0c;WebGPU 接管渲染&#xff0c;通过最小化对象创建 精…

基于Flask的智能停车场管理系统开发实践

在现代城市中&#xff0c;停车难已成为一个普遍问题。为了解决这一问题&#xff0c;我开发了一个基于Python Flask框架的智能停车场管理系统。该系统集成了车牌识别、车位状态监控、收费管理等多项功能&#xff0c;为停车场的智能化管理提供了完整的解决方案。系统功能概述该停…

【C#获取高精度时间】

在C#中&#xff0c;有几种方法可以获取高精度时间&#xff08;高分辨率时间戳&#xff09;&#xff0c;适用于性能测量、计时等需要高精度的场景。以下是几种常用方法&#xff1a; 1. 使用 Stopwatch 类&#xff08;推荐&#xff09; Stopwatch 类提供了最高精度的时间测量&…

Spring Boot + React 打造现代化高校成绩管理系统实战记录

作者: 笙囧同学 发布时间: 2025年7月 技术栈: Spring Boot 3.2.3 React 18 TypeScript 华为云GaussDB 项目类型: 全栈Web应用 开发周期: 30天 代码量: 15000 行 &#x1f4d6; 前言 大家好&#xff0c;我是笙囧同学&#xff01;&#x1f64b;‍♂️ 作为一名计算机科学与技…

形参表不匹配(BUG)

在您的代码中&#xff0c;存在两个主要问题导致"形参表中不匹配"的错误&#xff1a;erase() 函数中的成员变量名错误iterator erase(iterator pos) {// ...size--; // ❌ 错误&#xff1a;成员变量名为 _size 而非 sizereturn iterator(next); }修正&#xff1a;ite…

Spring循环依赖以及三个级别缓存

Spring循环依赖以及三个级别缓存 什么是循环依赖&#xff1f; 循环依赖&#xff0c;顾名思义&#xff0c;就是指两个或多个 Spring Bean 之间相互依赖&#xff0c;形成一个闭环。 最常见也是 Spring 能够“解决”的循环依赖是构造器注入 和 setter 注入 混合或单独使用时&…

《零基础入门AI:OpenCV图像预处理进一步学习》

本文全面讲解OpenCV图像预处理的七大核心技术&#xff08;插值方法、边缘填充、图像矫正&#xff08;透视变换&#xff09;、图像掩膜、ROI切割、图像添加水印、图像噪点消除&#xff09;&#xff0c;每个知识点都配有详细解释和实用代码示例&#xff0c;帮助初学者建立系统的图…

MongoDB的内存和核心数对于运行效率的影响

在 MongoDB 线上生产环境中&#xff0c;CPU&#xff08;核心&#xff09; 和 内存 是两大关键硬件资源&#xff0c;它们在不同的操作场景下发挥着核心作用&#xff0c;共同影响着数据库的性能、稳定性和扩展性。理解它们的作用场景至关重要&#xff0c;是容量规划、性能优化和故…

自己的SAPGUI尝试

为满足用户需求&#xff0c;博主做了一个台账管理程序&#xff0c;尝试用自己的程序做GUI&#xff0c;用SAP 系统做数据库。 运行了半年&#xff0c;程序很nice,用户每天都在高效的使用&#xff0c;已经有十几万的数据。 总结一下这次自己的GUI尝试&#xff0c;好处是C# WINFOR…