2020-12-01 19:29:56 +08:00
|
|
|
|
|
|
|
import ReactEcharts from 'echarts-for-react';
|
|
|
|
import echarts from 'echarts';
|
|
|
|
import React from 'react';
|
2020-12-02 19:10:04 +08:00
|
|
|
import { Button, DatePicker, Row } from 'antd';
|
|
|
|
import zhCN from 'antd/es/locale/zh_CN'; // 引入中文包
|
|
|
|
import {dateFormat, defaultDateFormat, TrendType} from './Base.js';
|
|
|
|
import config from '../Config.js';
|
2020-12-01 19:29:56 +08:00
|
|
|
|
2020-12-02 19:10:04 +08:00
|
|
|
const { RangePicker } = DatePicker;
|
2020-12-01 19:29:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
class Trend extends React.Component {
|
|
|
|
|
2020-12-02 19:10:04 +08:00
|
|
|
state = {
|
|
|
|
data: [],
|
|
|
|
type: {
|
|
|
|
current: TrendType.OneDate,
|
2020-12-01 19:29:56 +08:00
|
|
|
|
|
|
|
|
2020-12-02 19:10:04 +08:00
|
|
|
}
|
|
|
|
};
|
2020-12-01 19:29:56 +08:00
|
|
|
|
|
|
|
componentDidMount() {
|
2020-12-02 19:10:04 +08:00
|
|
|
var now = new Date()
|
|
|
|
this.selectDate( defaultDateFormat(now) )
|
2020-12-01 19:29:56 +08:00
|
|
|
}
|
|
|
|
|
2020-12-02 19:10:04 +08:00
|
|
|
getOption(trendtype, data) {
|
|
|
|
|
|
|
|
var interval;
|
|
|
|
var fm ;
|
|
|
|
if(trendtype.current === TrendType.OneDate) {
|
|
|
|
interval = 3600 * 1000;
|
|
|
|
fm = function (value, index) {
|
|
|
|
var tp = new Date(value)
|
|
|
|
return tp.getFullYear() + "-" + (tp.getMonth() + 1) + "-" + tp.getDate() + " " + tp.getHours()
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
interval = 3600 * 1000 * 24;
|
|
|
|
fm = function (value, index) {
|
|
|
|
var tp = new Date(value)
|
|
|
|
return tp.getFullYear() + "-" + (tp.getMonth() + 1) + "-" + tp.getDate()
|
|
|
|
};
|
|
|
|
}
|
2020-12-01 19:29:56 +08:00
|
|
|
|
|
|
|
var option = {
|
|
|
|
tooltip: {
|
|
|
|
trigger: 'axis',
|
|
|
|
// position: function (pt) {
|
|
|
|
// console.log(pt);
|
|
|
|
// return [pt[0], '10%'];
|
|
|
|
// }
|
|
|
|
},
|
|
|
|
title: {
|
|
|
|
left: 'center',
|
|
|
|
text: '趋势数据',
|
|
|
|
},
|
2020-12-02 19:10:04 +08:00
|
|
|
legend: {
|
|
|
|
left: 'right',
|
|
|
|
data: [],
|
2020-12-01 19:29:56 +08:00
|
|
|
},
|
2020-12-02 19:10:04 +08:00
|
|
|
// toolbox: {
|
|
|
|
// feature: {
|
|
|
|
// dataZoom: {
|
|
|
|
// yAxisIndex: 'none'
|
|
|
|
// },
|
|
|
|
// restore: {},
|
|
|
|
// saveAsImage: {}
|
|
|
|
// }
|
|
|
|
// },
|
2020-12-01 19:29:56 +08:00
|
|
|
xAxis: {
|
|
|
|
type: 'time',
|
|
|
|
boundaryGap: false,
|
2020-12-02 19:10:04 +08:00
|
|
|
interval: interval,
|
2020-12-01 19:29:56 +08:00
|
|
|
// data: tsdata
|
2020-12-02 19:10:04 +08:00
|
|
|
axisLabel: {
|
|
|
|
formatter: fm,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
aria: {
|
|
|
|
show: true
|
2020-12-01 19:29:56 +08:00
|
|
|
},
|
|
|
|
yAxis: {
|
|
|
|
type: 'value',
|
2020-12-02 19:10:04 +08:00
|
|
|
// boundaryGap: [0, '100%']
|
|
|
|
axisLabel: {
|
|
|
|
formatter: function (value, index) {
|
|
|
|
if( typeof value == "number") {
|
|
|
|
if(value >= 100000000) {
|
|
|
|
return (value / 10000).toFixed(4) + "亿"
|
|
|
|
} else if(value >= 10000) {
|
|
|
|
return (value / 10000).toFixed(2) + "万"
|
|
|
|
} else {
|
|
|
|
return value
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
2020-12-01 19:29:56 +08:00
|
|
|
},
|
|
|
|
dataZoom: [{
|
|
|
|
type: 'inside',
|
|
|
|
start: 0,
|
|
|
|
end: 100
|
|
|
|
}, {
|
|
|
|
start: 0,
|
|
|
|
end: 100,
|
|
|
|
handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
|
2020-12-02 19:10:04 +08:00
|
|
|
handleSize: '100%',
|
2020-12-01 19:29:56 +08:00
|
|
|
handleStyle: {
|
|
|
|
color: '#fff',
|
|
|
|
shadowBlur: 3,
|
2020-12-02 19:10:04 +08:00
|
|
|
shadowColor: 'rgba(0, 0, 0, 0.8)',
|
2020-12-01 19:29:56 +08:00
|
|
|
shadowOffsetX: 2,
|
|
|
|
shadowOffsetY: 2
|
|
|
|
}
|
|
|
|
}],
|
|
|
|
series: [
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
2020-12-02 19:10:04 +08:00
|
|
|
|
|
|
|
for (var i = 0; i < data.length; i++) {
|
|
|
|
var d = data[i];
|
|
|
|
// var color = colors[i];
|
|
|
|
|
|
|
|
var tvalues = []
|
|
|
|
for (var value of d.values) {
|
|
|
|
tvalues.push([value.time_point * 1000, value.value])
|
|
|
|
}
|
|
|
|
|
|
|
|
tvalues.sort()
|
|
|
|
option.legend.data.push(d.name);
|
|
|
|
|
2020-12-01 19:29:56 +08:00
|
|
|
var sdata = {
|
|
|
|
name: d.name,
|
|
|
|
type: 'line',
|
|
|
|
smooth: true,
|
|
|
|
symbol: 'none',
|
|
|
|
sampling: 'average',
|
|
|
|
areaStyle: {
|
|
|
|
},
|
2020-12-02 19:10:04 +08:00
|
|
|
data: tvalues
|
2020-12-01 19:29:56 +08:00
|
|
|
}
|
|
|
|
option.series.push(sdata)
|
|
|
|
}
|
|
|
|
|
|
|
|
return option;
|
|
|
|
}
|
|
|
|
|
2020-12-02 19:10:04 +08:00
|
|
|
selectDate(date) {
|
|
|
|
fetch(`${config.trendurl}?date=${date}`).then((response) => {
|
|
|
|
if (response.ok) {
|
|
|
|
response.json().then((response) => {
|
|
|
|
if (response.code === 0) {
|
|
|
|
this.setState({ data: response.data.trends, type: {current: TrendType.OneDate} })
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2020-12-01 19:29:56 +08:00
|
|
|
|
2020-12-02 19:10:04 +08:00
|
|
|
selectRangeDate(start, end) {
|
|
|
|
fetch(`${config.trendurl}?start=${start}&end=${end}`).then((response) => {
|
|
|
|
if (response.ok) {
|
|
|
|
response.json().then((response) => {
|
|
|
|
if (response.code === 0) {
|
|
|
|
this.setState({ data: response.data.trends, type: {current: TrendType.RangeDate }})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2020-12-01 19:29:56 +08:00
|
|
|
|
2020-12-02 19:10:04 +08:00
|
|
|
render() {
|
2020-12-01 19:29:56 +08:00
|
|
|
|
2020-12-02 19:10:04 +08:00
|
|
|
const { data, type } = this.state;
|
2020-12-01 19:29:56 +08:00
|
|
|
return (
|
2020-12-02 19:10:04 +08:00
|
|
|
<div style={{height: "100%"}}>
|
|
|
|
<Row style={{marginLeft: "6%", marginBottom: "10px"}}>
|
|
|
|
<Button onClick={ () => this.selectDate(defaultDateFormat(new Date()))} >今天</Button>
|
|
|
|
<Button onClick={ () => {
|
|
|
|
var now = new Date();
|
|
|
|
var end = defaultDateFormat(now)
|
|
|
|
now -= 3600 * 24 * 1000 * 7
|
|
|
|
var start = defaultDateFormat(new Date(now))
|
|
|
|
this.selectRangeDate(start, end);
|
|
|
|
} }>7天</Button>
|
|
|
|
<Button >30天</Button>
|
|
|
|
<RangePicker size="small" style={{marginLeft: "5px"}} />
|
|
|
|
<DatePicker size="small" style={{marginLeft: "5px"}} />
|
|
|
|
</Row>
|
|
|
|
|
2020-12-01 19:29:56 +08:00
|
|
|
<ReactEcharts
|
|
|
|
notMerge={true}
|
|
|
|
lazyUpdate={true}
|
2020-12-02 19:10:04 +08:00
|
|
|
option={this.getOption(type, data)}
|
|
|
|
style={{ width: "100%", minHeight: "90vh" }}
|
2020-12-01 19:29:56 +08:00
|
|
|
/>
|
2020-12-02 19:10:04 +08:00
|
|
|
|
|
|
|
</ div>
|
2020-12-01 19:29:56 +08:00
|
|
|
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default Trend;
|