|
1 |
| -import React from 'react' |
| 1 | +import React, { useEffect, useState } from 'react' |
2 | 2 |
|
3 |
| -import { WaterLevelPond } from '@jiaminghi/data-view-react' |
| 3 | +import { Charts, WaterLevelPond } from '@jiaminghi/data-view-react' |
4 | 4 |
|
5 | 5 | import './WaterLevelChart.less'
|
| 6 | +import httpGet from '../../service/request' |
6 | 7 |
|
7 |
| -const config = { |
8 |
| - data: [45], |
9 |
| - shape: 'round', |
10 |
| - waveHeight: 25, |
11 |
| - waveNum: 2, |
| 8 | +let data = [100, 98.3, 91.1, 99.3, 99.5, 100, 99] |
| 9 | +let xAxis = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] |
| 10 | + |
| 11 | +function getConfig() { |
| 12 | + return { |
| 13 | + data: [data[0].toFixed(2)], |
| 14 | + shape: 'round', |
| 15 | + waveHeight: 25, |
| 16 | + waveNum: 2, |
| 17 | + formatter: '{value}%', |
| 18 | + } |
| 19 | +} |
| 20 | + |
| 21 | +function getOption() { |
| 22 | + return { |
| 23 | + color: ['#ffffff'], |
| 24 | + title: { |
| 25 | + text: '可用率趋势', |
| 26 | + }, |
| 27 | + xAxis: { |
| 28 | + name: '时间', |
| 29 | + data: xAxis, |
| 30 | + }, |
| 31 | + yAxis: { |
| 32 | + name: '销售额', |
| 33 | + data: 'value', |
| 34 | + max: 100, |
| 35 | + }, |
| 36 | + series: [ |
| 37 | + { |
| 38 | + data: data, |
| 39 | + type: 'line', |
| 40 | + lineArea: { |
| 41 | + show: true, |
| 42 | + gradient: ['rgba(55, 162, 218, 0.6)', 'rgba(55, 162, 218, 0)'], |
| 43 | + }, |
| 44 | + }, |
| 45 | + ], |
| 46 | + } |
12 | 47 | }
|
13 | 48 |
|
14 | 49 | export default () => {
|
15 |
| - return ( |
16 |
| - <div id="water-level-chart"> |
17 |
| - <div className="water-level-chart-title">计划资金累计完成情况</div> |
| 50 | + const [options, setOptions] = useState({}) |
| 51 | + const [config, setConfig] = useState({}) |
| 52 | + useEffect(() => { |
| 53 | + createData() |
| 54 | + getAvailability() |
| 55 | + |
| 56 | + const timer = setInterval(createData, 3000) |
| 57 | + const availabilityTimer = setInterval(getAvailability, 60000) |
18 | 58 |
|
19 |
| - <div className="water-level-chart-details"> |
20 |
| - 累计完成<span>235,680</span>元 |
| 59 | + return () => { |
| 60 | + clearInterval(timer) |
| 61 | + clearInterval(availabilityTimer) |
| 62 | + } |
| 63 | + }, []) |
| 64 | + |
| 65 | + function createData() { |
| 66 | + setOptions(getOption()) |
| 67 | + setConfig(getConfig()) |
| 68 | + } |
| 69 | + |
| 70 | + return ( |
| 71 | + <> |
| 72 | + <div id="availability-chart"> |
| 73 | + <Charts option={options} /> |
21 | 74 | </div>
|
| 75 | + <div id="water-level-chart"> |
| 76 | + <div className="water-level-chart-title">当前服务可用率</div> |
22 | 77 |
|
23 |
| - <div className="chart-container"> |
24 |
| - <WaterLevelPond config={config} /> |
| 78 | + <div className="chart-container"> |
| 79 | + <WaterLevelPond config={config} /> |
| 80 | + </div> |
25 | 81 | </div>
|
26 |
| - </div> |
| 82 | + </> |
27 | 83 | )
|
28 | 84 | }
|
| 85 | + |
| 86 | +function getAvailability() { |
| 87 | + httpGet('https://api.hduhelp.com/aggregating/metric/availability').then(r => { |
| 88 | + xAxis = r |
| 89 | + .slice(0, 15) |
| 90 | + .reverse() |
| 91 | + .map(item => item.Time) |
| 92 | + data = r |
| 93 | + .slice(0, 15) |
| 94 | + .reverse() |
| 95 | + .map(item => item.Value * 100) |
| 96 | + }) |
| 97 | +} |
0 commit comments