数据源配置
对看板而言, 最重要的是数据源, 在全局设置-自定义数据源配置中可以通过初始化函数initRootFormat,和周期性函数rootFormat来实现数据的获取.
js
// rootFormat函数:定时执行的数据获取函数
// 这个函数会按照设定的时间间隔(如5秒)自动执行
// 用于从服务器获取最新的数据并更新到rootData中
// 参数说明:
// - rootData: 当前的根数据
// - settings: 看板设置信息
// - wss: WebSocket连接对象
const rootFormat = async ({ rootData: _rootData, settings: _settings, wss: _wss }) => {
// 获取告警数据:从服务器请求最新的告警信息
// dashTools.defHttp.get 是框架提供的HTTP请求工具
// .catch(() => ({ data: [] })) 表示请求失败时返回空数组
const alarmResponse = await dashTools.defHttp
.get({
url: '/app/product_app_5fanuc/data/alarm?_order=-id',
})
.catch(() => ({ data: [] }));
// 获取计算数据:从服务器请求统计数据(如设备状态、产量等)
const calcResponse = await dashTools.defHttp
.get({
url: '/app/product_app_5fanuc/api/calc_data',
})
.catch(() => ({ data: {} }));
// 返回新的数据,这些数据会被合并到rootData中
return {
alarms: alarmResponse?.data ?? [], // 告警数据,如果为空则使用空数组
calc: calcResponse?.data ?? {}, // 计算数据,如果为空则使用空对象
};
};
// initRootFormat函数:页面初始化时执行一次的函数
// 用于设置WebSocket订阅、初始化配置等一次性操作
// 参数说明:
// - rootData: 当前的根数据
// - settings: 看板设置信息
// - wss: WebSocket连接对象
// - setRootData: 更新根数据的函数
const initRootFormat = ({ rootData, settings: _settings, wss, setRootData }) => {
// 获取设备配置列表:从rootData中提取设备信息
const _d = rootData?.appData?.config?.device || [];
// 为每个设备设置颜色并订阅WebSocket数据
_d.forEach((k) => {
// 为设备分配随机颜色,用于图表显示
k.color = dashTools.randomColor();
// 发送WebSocket订阅消息,订阅该设备的实时数据
// type: "subscribe" 表示订阅操作
// data.type: "deviceinfo" 表示订阅设备信息类型的数据
// param.code: 设备的唯一标识码
wss.send({
type: 'subscribe',
data: {
type: 'deviceinfo',
param: { code: k.code },
},
});
});
// 监听WebSocket消息:处理服务器推送的实时数据
wss?.subscribe((event) => {
try {
// 初始化输出对象
let output = { deviceinfo: {} };
// 检查是否是订阅数据的消息
if (event.type === 'subscribe_data') {
// 检查是否是设备信息类型的数据
if (event.data.type === 'deviceinfo') {
// 将设备数据存储到output中,以设备名为key
output.deviceinfo[event.data.data.device_name] = event.data.data;
}
}
// 更新根数据:将新的设备信息合并到rootData中
setRootData(output);
} catch (e) {
// 错误处理:如果数据处理出错,静默处理
//
}
});
};
// 导出函数:框架会调用这些函数
// - rootFormat: 定时执行,获取最新数据
// - initRootFormat: 页面加载时执行一次,初始化WebSocket订阅
return { rootFormat, initRootFormat };