205 lines
6.4 KiB
JavaScript
205 lines
6.4 KiB
JavaScript
// 核心库
|
||
import React from 'react'
|
||
import { connect } from 'dva'
|
||
// 组件库
|
||
import { Scrollbars } from 'react-custom-scrollbars'
|
||
import { Icon, Radio } from 'antd'
|
||
import { LayoutCard } from '@woowalker/feui'
|
||
import CommonChart from '../../Chart/CommonChart'
|
||
import EnergyNodeModal from './EnergyNodeModal'
|
||
// 样式
|
||
import styles from './index.css'
|
||
|
||
class EmEnergyNodeRealTimePage extends React.Component {
|
||
constructor (props) {
|
||
super(props)
|
||
this.state = {
|
||
num: 0,
|
||
data: [],
|
||
chartData: {}
|
||
}
|
||
this.timer = -1
|
||
this._unmounted = false
|
||
}
|
||
|
||
componentDidMount () {
|
||
this.getRealTimeData()
|
||
this.getData()
|
||
}
|
||
|
||
componentWillUnmount () {
|
||
this._unmounted = true
|
||
clearTimeout(this.timer)
|
||
}
|
||
|
||
getRealTimeData = () => {
|
||
const { login, formParam, data } = this.props
|
||
const json = {
|
||
OrgId: login.OrgId,
|
||
Keyword: data.TreeSelected.join(','),
|
||
Parameter1: formParam.Parameter1,
|
||
}
|
||
this.props.dispatch({
|
||
type: 'app/getDataByPost',
|
||
url: 'EM/Monitoring/GetEnergyNodeRealTimeData',
|
||
payload: json
|
||
}).then(res => {
|
||
res && !this._unmounted && this.setState({ data: res })
|
||
}).finally(() => {
|
||
if (!this._unmounted) {
|
||
// 一个接口请求完之后,再定时进行请求
|
||
clearTimeout(this.timer)
|
||
this.timer = setTimeout(this.getRealTimeData, 5000)
|
||
}
|
||
})
|
||
}
|
||
|
||
getData = () => {
|
||
const { login, formParam, data } = this.props
|
||
const json = {
|
||
OrgId: login.OrgId,
|
||
Keyword: data.TreeSelected.join(','),
|
||
Parameter1: formParam.Parameter1,
|
||
Parameter2: this.state.num
|
||
}
|
||
|
||
this.props.dispatch({
|
||
type: 'app/getDataByPost',
|
||
url: 'EM/Monitoring/GetEnergyNodeData',
|
||
payload: json
|
||
}).then(res => {
|
||
if (res && res.chartData) {
|
||
const { chartData } = res
|
||
this.setState({
|
||
chartData: {
|
||
xAxis: chartData.XAxis[0].Data,
|
||
yAxis: chartData.YAxis,
|
||
data: chartData.Data
|
||
}
|
||
})
|
||
}
|
||
})
|
||
}
|
||
|
||
handleChange = (e) => {
|
||
this.setState({ num: e.target.value }, this.getData)
|
||
}
|
||
|
||
onModalRef = (ref) => {
|
||
this.modalChild = ref
|
||
}
|
||
|
||
showModal = (appid, Hmi_id) => {
|
||
this.modalChild.showModal(appid, Hmi_id)
|
||
}
|
||
|
||
handleUnCheckNode = (evt, key) => {
|
||
evt.stopPropagation()
|
||
const { setTreeNodeUnCheck } = this.props.data
|
||
if (setTreeNodeUnCheck && setTreeNodeUnCheck instanceof Function) {
|
||
setTreeNodeUnCheck(key)
|
||
}
|
||
}
|
||
|
||
render () {
|
||
let { data, num, chartData } = this.state
|
||
const { Parameter1 } = this.props.formParam
|
||
let bg_class = styles.electric_bg
|
||
let status_class = styles.electric_status
|
||
let curr_class = styles.electric_curr
|
||
let sum_class = styles.electric_sum
|
||
let wrapHeight = 250
|
||
switch (Parameter1) {
|
||
case 'Water':
|
||
bg_class = styles.water_bg
|
||
status_class = styles.water_status
|
||
curr_class = styles.water_curr
|
||
sum_class = styles.water_sum
|
||
wrapHeight = 220
|
||
break
|
||
case 'Hot':
|
||
bg_class = styles.hot_bg
|
||
status_class = styles.hot_status
|
||
curr_class = styles.hot_curr
|
||
sum_class = styles.hot_sum
|
||
wrapHeight = 220
|
||
break
|
||
case 'Gas':
|
||
bg_class = styles.gas_bg
|
||
status_class = styles.gas_status
|
||
curr_class = styles.gas_curr
|
||
sum_class = styles.gas_sum
|
||
wrapHeight = 220
|
||
break
|
||
default:
|
||
break
|
||
}
|
||
|
||
const { selectedNodes = [] } = this.props.data
|
||
const saveImgName = selectedNodes.length ? `${selectedNodes.map(item => item.node.name).join('-')}用量监测` : '用量监测'
|
||
return (
|
||
<div className='scroll_page'>
|
||
<LayoutCard style={{ marginBottom: 16 }}>
|
||
<div className={styles.realTimePage_horizontalBoxWrap} style={{ height: wrapHeight }}>
|
||
<Scrollbars autoHide autoHideTimeout={1000} autoHideDuration={200}>
|
||
{
|
||
data.map(item => {
|
||
return (
|
||
<div
|
||
key={item.Key}
|
||
onClick={() => this.showModal(item.Key, item.Hmi)}
|
||
className={styles.meter_box}
|
||
>
|
||
<div className={bg_class}>
|
||
<div
|
||
className={status_class}
|
||
style={{ backgroundColor: item.State === 0 ? '#a4abb6' : item.State === 1 ? '#70b603' : '#d9001b' }}
|
||
/>
|
||
<div className={curr_class}>
|
||
<span>{item.VarName}({item.Unit})</span>
|
||
<span>{item.Value}</span>
|
||
</div>
|
||
<div className={sum_class}>
|
||
{
|
||
item.ShowData.map((attr, attrIndex) => {
|
||
const value = `${attr.Value}${attr.Unit === 'None' || attr.Unit === null ? '' : attr.Unit}`
|
||
return <p key={`${attr.Name}_${attrIndex}`} className={styles.sum_text}>{`${attr.Name}:${value}`}</p>
|
||
})
|
||
}
|
||
</div>
|
||
<Icon
|
||
type='delete'
|
||
className={styles.box_close}
|
||
onClick={(evt) => this.handleUnCheckNode(evt, item.Key)}
|
||
/>
|
||
</div>
|
||
<p className={styles.meter_title}>{item.ApplianceName}</p>
|
||
<p className={styles.meter_detail}>{item.NodeName}</p>
|
||
</div>
|
||
)
|
||
})
|
||
}
|
||
</Scrollbars>
|
||
</div>
|
||
</LayoutCard>
|
||
<LayoutCard title='用量监测' style={{ textAlign: 'center' }}>
|
||
<Radio.Group value={num} buttonStyle='solid' onChange={this.handleChange}>
|
||
<Radio.Button value={0}>过去六小时</Radio.Button>
|
||
<Radio.Button value={1}>过去十二小时</Radio.Button>
|
||
<Radio.Button value={2}>过去二十四小时</Radio.Button>
|
||
</Radio.Group>
|
||
<CommonChart
|
||
chartId='EmEnergyNodeRealTimePage'
|
||
{...chartData}
|
||
saveImgName={saveImgName}
|
||
style={{ height: 300 }}
|
||
/>
|
||
</LayoutCard>
|
||
<EnergyNodeModal onRef={this.onModalRef} />
|
||
</div>
|
||
)
|
||
}
|
||
}
|
||
|
||
export default connect(({ login, app }) => ({ login, app }))(EmEnergyNodeRealTimePage)
|