Skip to content

数据源配置

对看板而言, 最重要的是数据源, 在全局设置-自定义数据源配置中可以通过初始化函数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 };