|
|
@@ -4,18 +4,24 @@
|
|
|
*/
|
|
|
|
|
|
import React, { Component } from 'react'
|
|
|
-import { Chart, Axis, Geom, Tooltip, Legend, Coord, Global } from 'bizgoblin'
|
|
|
+import { Chart, Interval, Axis, Tooltip, Geom } from 'bizcharts'
|
|
|
+import { fetchPostObj } from '../../../utils/common/fetchRequest'
|
|
|
+import { API } from '../../../configs/api.config'
|
|
|
+import { isObjEmpty } from '../../../utils/common/common.util'
|
|
|
+import { message } from 'antd'
|
|
|
|
|
|
export default class BarGraph extends Component {
|
|
|
|
|
|
constructor () {
|
|
|
super()
|
|
|
|
|
|
- this.state = {}
|
|
|
+ this.state = {
|
|
|
+ detailData: [],
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
componentDidMount () {
|
|
|
-
|
|
|
+ this.getChartData()
|
|
|
}
|
|
|
|
|
|
componentWillUnmount () {
|
|
|
@@ -24,66 +30,62 @@ export default class BarGraph extends Component {
|
|
|
|
|
|
render () {
|
|
|
let { chartData } = this.props
|
|
|
- let { data, title, valueDisp, keyDisp, unit } = chartData
|
|
|
- data = this.formatData(JSON.parse(data))
|
|
|
- const defs = [{
|
|
|
- dataKey: 'xField',
|
|
|
- }, {
|
|
|
- dataKey: 'yField',
|
|
|
- tickCount: 4, //多少个刻点数
|
|
|
- }]
|
|
|
+ let { SONTITLE_, FORMULA_VALUEDISPLAY_, FORMULA_KEYDISPLAY_, FORMULA_UNIT_ } = chartData
|
|
|
+ let data = []
|
|
|
+ let { detailData } = this.state
|
|
|
+ if (!isObjEmpty(detailData)) {
|
|
|
+ data = this.formatData(JSON.parse(detailData))
|
|
|
+ }
|
|
|
|
|
|
- const xLabel =
|
|
|
- (text, item, index) => {
|
|
|
- // text: 坐标轴对应字段的数值
|
|
|
- return {
|
|
|
- textAlign: 'center', // 文本对齐方向,可取值为: start center end
|
|
|
- fill: '#333333', // 文本的颜色
|
|
|
- fontSize: '12', // 文本大小
|
|
|
- textBaseline: 'top', // 文本基准线,可取 top middle bottom,默认为middle
|
|
|
- rotate: -126,
|
|
|
- }
|
|
|
- }
|
|
|
- const yLabel =
|
|
|
- (text, item, index) => {
|
|
|
- // text: 坐标轴对应字段的数值
|
|
|
- return {
|
|
|
- textAlign: 'center', // 文本对齐方向,可取值为: start center end
|
|
|
- fill: '#333333', // 文本的颜色
|
|
|
- fontSize: '12', // 文本大小
|
|
|
- textBaseline: 'top', // 文本基准线,可取 top middle bottom,默认为middle
|
|
|
- }
|
|
|
- }
|
|
|
return (
|
|
|
<div className='bar-graph' style={{ width: '100%', backgroundColor: '#fff' }}>
|
|
|
- <div className="ant-table-title">{title}</div>
|
|
|
- <div className="ant-table-title-second">{keyDisp ? keyDisp : ''}{valueDisp} {'单位(' + unit + ')'}</div>
|
|
|
- <Chart padding={['6%', '6%', 'auto', '10%']} data={data} defs={defs} pixelRatio={window.devicePixelRatio * 2}>
|
|
|
- <Axis
|
|
|
- labelOffset={10}
|
|
|
- dataKey='xField'
|
|
|
- grid={null}
|
|
|
- label={xLabel}/>
|
|
|
- <Axis
|
|
|
- dataKey='yField'
|
|
|
- grid={Global._defaultAxis.grid}
|
|
|
- label={yLabel}
|
|
|
+ <div className="ant-table-title">{SONTITLE_}</div>
|
|
|
+ <div
|
|
|
+ className="ant-table-title-second">{FORMULA_KEYDISPLAY_ ? FORMULA_KEYDISPLAY_ : ''}{FORMULA_VALUEDISPLAY_} {'单位(' + FORMULA_UNIT_ + ')'}</div>
|
|
|
+ <Chart padding={[25, 15, 40, 50]} height={300} autoFit data={data}>
|
|
|
+ <Axis name='xField'
|
|
|
+ label={{
|
|
|
+ rotate: -126,
|
|
|
+ autoRotate: false,
|
|
|
+ offset: 15,
|
|
|
+ textStyle: {
|
|
|
+ textAlign: 'start',
|
|
|
+ fill: '#333333', // 文本的颜色
|
|
|
+ fontSize: 12, // 文本大小
|
|
|
+ textBaseline: 'top', // 文本基准线,可取 top middle bottom,默认为middle
|
|
|
+ },
|
|
|
+ }}
|
|
|
/>
|
|
|
- <Coord/>
|
|
|
- <Tooltip onShow={this.onShowTooltip}/>
|
|
|
- <Geom geom="interval" position='xField*yField'/>
|
|
|
+ <Interval
|
|
|
+ position="xField*yField"
|
|
|
+ label={[
|
|
|
+ 'yField',
|
|
|
+ (val) => {
|
|
|
+ return {
|
|
|
+ content: val,
|
|
|
+ style: {
|
|
|
+ fill: '#333333',
|
|
|
+ fontSize: 12,
|
|
|
+ fontWeight: 'bold',
|
|
|
+ },
|
|
|
+ }
|
|
|
+ },
|
|
|
+ ]}
|
|
|
+ tooltip={[
|
|
|
+ 'yField*xField',
|
|
|
+ (value, name) => {
|
|
|
+ return {
|
|
|
+ name: `${name}`,
|
|
|
+ value,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ ]}/>
|
|
|
+ <Tooltip showTitle={false}/>
|
|
|
</Chart>
|
|
|
</div>
|
|
|
)
|
|
|
}
|
|
|
|
|
|
- onShowTooltip = (ev) => {
|
|
|
- const items = ev.items
|
|
|
- items[0].name = null
|
|
|
- items[0].name = items[0].title
|
|
|
- items[0].value = `${items[0].value + this.props.chartData.unit}`
|
|
|
- }
|
|
|
-
|
|
|
formatData = (data) => {
|
|
|
data = data.map(function (item, index, arr) {
|
|
|
item.yField = Number(item.yField)
|
|
|
@@ -93,4 +95,22 @@ export default class BarGraph extends Component {
|
|
|
return data
|
|
|
}
|
|
|
|
|
|
+ getChartData = () => {
|
|
|
+ let { chartData: { INSTANCE_ID_, FORMULA_ID_ } } = this.props
|
|
|
+ fetchPostObj(API.COMMON_GETSUBSDATA, {
|
|
|
+ INSTANCE_ID_: INSTANCE_ID_,
|
|
|
+ FORMULA_ID_: FORMULA_ID_,
|
|
|
+ }).then(response => {
|
|
|
+ this.setState({
|
|
|
+ detailData: response.data.list[0].DATA_,
|
|
|
+ })
|
|
|
+ }).catch(error => {
|
|
|
+ if (typeof error === 'string') {
|
|
|
+ message.error(error)
|
|
|
+ } else {
|
|
|
+ message.error('图表数据获取失败')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
}
|