Basic.tsx 3.52 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
import React, { useEffect, useState } from 'react';
import request from 'umi-request';
import moment from 'moment';
import HistoryInfo from '../index';

const Demo = () => {
  const [data, setData] = useState([]);
  const [series, setSeries] = useState([]);
  const [columns, setColumns] = useState([
    {
      title: '采集时间',
      dataIndex: 'time',
      key: 'time',
14
      width: 160,
15 16 17 18 19 20 21 22
    },
  ]);

  useEffect(() => {
    fetchData(initialParams);
  }, []);

  const fetchData = (params = {}) => {
涂茜's avatar
涂茜 committed
23
    request(baseUrl + '/PandaCore/Monitor/Device/SensorsDataForStation', {
24 25 26
      method: 'post',
      data: params,
    }).then((res) => {
涂茜's avatar
涂茜 committed
27
      let resData = res.data;
28 29
      let columnsData = resData.map((item, index) => {
        return {
涂茜's avatar
涂茜 committed
30
          title: `${item.equipmentName}-${item.sensorName}${
31 32 33 34 35 36
            item.unit ? '(' + item.unit + ')' : ''
          }`,
          dataIndex: `value${index + 1}`,
          key: `value${index + 1}`,
        };
      });
涂茜's avatar
涂茜 committed
37
      let tableData = resData[0].dataModel.map((item, index) => ({ key: index, time: item.pt }));
38 39 40
      tableData.forEach((item, i) => {
        resData.forEach((child, index) => {
          child.dataModel.forEach((value, j) => {
涂茜's avatar
涂茜 committed
41
            if (i === j) item[`value${index + 1}`] = value.pv;
42 43 44 45
          });
        });
      });
      setData(tableData);
涂茜's avatar
涂茜 committed
46
      setColumns(columnsData);
涂茜's avatar
涂茜 committed
47
      handleSeries(resData);
48 49 50
    });
  };

涂茜's avatar
涂茜 committed
51 52
  const handleSeries = (v) => {
    let resData = v;
53 54 55 56
    let seriesData = [];
    resData.forEach((item) => {
      let data = [];
      item.dataModel.forEach((child) => {
涂茜's avatar
涂茜 committed
57
        data.push([moment(child.pt).valueOf(), child.pv]);
58
      });
涂茜's avatar
涂茜 committed
59
      let obj = {
涂茜's avatar
涂茜 committed
60
        name: item.equipmentName + item.sensorName,
涂茜's avatar
涂茜 committed
61 62 63 64 65
        sensorName: item.sensorName,
        decimalPoint: item.decimalPoint,
        unit: item.unit,
        data: data,
      };
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
      seriesData.push(obj);
    });
    setSeries(seriesData);
  };

  const onChangeParams = (value = []) => {
    let params = initialParams;
    const { dateRange, ignoreOutliers, zoom, unit } = value;
    let requestArr = [];
    dateRange.forEach((item) => {
      let param = {
        ...params,
        stream: params.stream.map((child) => ({
          ...child,
          dateFrom: item.dateFrom,
          dateTo: item.dateTo,
        })),
        ignoreOutliers,
        zoom,
        unit,
      };
      requestArr.push(fetchData(param));
    });
    Promise.all(requestArr).then((values) => {
      console.log(values);
    });
  };

  return (
涂茜's avatar
涂茜 committed
95
    <div style={{ height: '800px' }}>
涂茜's avatar
涂茜 committed
96 97 98 99 100
      <HistoryInfo
        title={'指标曲线'}
        columns={columns}
        dataSource={data}
        chartOptions={{ series }}
涂茜's avatar
涂茜 committed
101
        tableProps={{ bordered: true, pagination: { pageSize: 20 } }}
涂茜's avatar
涂茜 committed
102 103 104 105
        onChange={onChangeParams}
        // defaultChecked={'fourHour'}
      />
    </div>
106 107 108 109 110
  );
};

export default Demo;

涂茜's avatar
涂茜 committed
111
const baseUrl = 'https://www.fastmock.site/mock/162c15dca15c4dba9ba51e0a0b76929b/api';
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134

const initialParams = {
  stream: [
    {
      stationCode: 'EGBF00000006',
      sensors: '出水瞬时流量,今日供水量,今日用电量',
      pointVersions: '二供泵房',
      dateFrom: '2021-03-15 16:01:21',
      dateTo: '2021-03-16 16:01:21',
    },
    {
      stationCode: 'EGJZ00007117',
      sensors: '进水压力,出水压力,泵1状态',
      pointVersions: '二供机组',
      dateFrom: '2021-03-15 16:01:21',
      dateTo: '2021-03-16 16:01:21',
    },
  ],
  ignoreOutliers: false, // 过滤异常值
  isVertical: false, // 是否展示竖表
  zoom: '', // 数据抽稀
  unit: '', // 数据抽稀 min h
};