useAssembleData.hook.ts 1.1 KB
/**
 * 此hook的作用是 ws 组装图表需要的数据格式
 * @param data {'wendu':[[xxxxxx,xxxx]]}
 * @returns keys:[xx,xx,xx] record:{'x':'xx'}
 */
import { isNullOrUnDef } from '@/utils/external/is'
import dayjs from 'dayjs'

export const useAssembleDataHooks = (data: Record<string, string | [number, string]>, dimensions: string[],attrName?:string[]) => {
  const formatValueToNumber = (value: string | number, defaultValue = 0) =>
    isNaN(value as number) ? defaultValue : Number(value)
  const tempObj: Recordable = {}
  dimensions
    .filter(f => f !== 'ts')
    .forEach((item: string) => {
      Object.assign(tempObj, {
        [item]: data[item]
      })
    })
  const keys = Object.keys(tempObj)
  const record = keys.reduce((prev, next,index) => {
    const [latest] = data[next] || []
    if (isNullOrUnDef(latest)) return prev
    const [ts, value] = latest as unknown as string[]
    //把值转为number类型 wendu:"23" 转为 wendu:23
    return { ...prev, ts: dayjs(ts).format('YYYY-MM-DD HH:mm:ss'),[ attrName![index]]: formatValueToNumber(value) }
  }, {})

  return {
    keys,
    record
  }
}