197 lines
5.4 KiB
JavaScript
197 lines
5.4 KiB
JavaScript
// 核心库
|
||
import React from 'react'
|
||
import { connect } from 'dva'
|
||
// 组件库
|
||
import { Form, message, Table } from 'antd'
|
||
import { Search, ExportToExcel, FullDatePicker, LayoutCard } from '@woowalker/feui'
|
||
// 工具库
|
||
import moment from 'moment'
|
||
import { guid, initFilter, addRuleAndGroups, renderExportCell } from '../../../utils/common'
|
||
|
||
class KRUnitConsumTreePage extends React.Component {
|
||
constructor (props) {
|
||
super(props)
|
||
this.state = {
|
||
columns: [],
|
||
parentId: '',
|
||
dateType: '0',
|
||
dateString: moment().format('YYYY'),
|
||
tableKey: guid(),
|
||
dataSource: [],
|
||
energyType: "电"
|
||
}
|
||
}
|
||
|
||
handleSearch = (value) => {
|
||
if (value && value.rules) {
|
||
value.rules.push({
|
||
field: 'Parameter2',
|
||
operator: 0,
|
||
value: this.state.dateType,
|
||
isCustom: true,
|
||
isSysParam: false,
|
||
})
|
||
value.rules.push({
|
||
field: 'Parameter3',
|
||
operator: 0,
|
||
value: this.state.dateString,
|
||
isCustom: true,
|
||
isSysParam: false,
|
||
})
|
||
this.setState({
|
||
searchRules: value,
|
||
parentId: ''
|
||
}, () => {
|
||
this.getConsumData(value)
|
||
})
|
||
}
|
||
}
|
||
|
||
onClickRow = (id) => {
|
||
if (id) {
|
||
this.setState({
|
||
parentId: id
|
||
}, () => {
|
||
this.getConsumData()
|
||
})
|
||
}
|
||
}
|
||
|
||
getConsumData = () => {
|
||
const { login, dispatch } = this.props
|
||
const json = initFilter(login.OrgId)
|
||
addRuleAndGroups(json, this.state.searchRules)
|
||
json["Parameter4"] = this.state.parentId
|
||
dispatch({
|
||
type: 'app/getDataByPost',
|
||
url: 'KR/Statistics/ConsumTree',
|
||
payload: json,
|
||
onlyData: false,
|
||
onComplete: (res) => {
|
||
if (res && res.IsSuccessful && res.Data) {
|
||
this.setState({
|
||
tableKey: guid(),
|
||
columns: res.Data.Colums || [],
|
||
dataSource: res.Data.Data,
|
||
energyType: res.Data.energyType
|
||
})
|
||
} else {
|
||
if (res && !res.IsSuccessful) {
|
||
message.error(res.ErrorMessage)
|
||
}
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
getInsertTitle = () => {
|
||
const inserDateTitle = this.state.dateType === '0' ? '年' : this.state.dateType === '1' ? '月' : '日'
|
||
|
||
const { formCode } = this.props
|
||
const fieldConfigs = this.props.search.fieldConfigs[formCode] || []
|
||
const exportInserTitle = ['网络节点矿山安全统计', `${this.state.dateString + inserDateTitle}`]
|
||
fieldConfigs.forEach(fc => {
|
||
const { label, value, dataSource } = fc
|
||
const cellText = renderExportCell(value, dataSource, fc, this.props.app.enums || {})
|
||
cellText && exportInserTitle.push(`${label}:${cellText}`)
|
||
})
|
||
return exportInserTitle.join(' ')
|
||
}
|
||
|
||
onExpand = (expanded, record) => {
|
||
if (!expanded)
|
||
return
|
||
|
||
if (record.children && record.children.length > 0)
|
||
return
|
||
const { login, dispatch } = this.props
|
||
const json = initFilter(login.OrgId)
|
||
addRuleAndGroups(json, this.state.searchRules)
|
||
json["Parameter4"] = record.ID
|
||
dispatch({
|
||
type: 'app/getDataByPost',
|
||
url: 'KR/Statistics/ConsumTree',
|
||
payload: json,
|
||
onlyData: false,
|
||
onComplete: (res) => {
|
||
if (res && res.IsSuccessful && res.Data) {
|
||
record.children = res.Data.Data
|
||
} else {
|
||
if (res && !res.IsSuccessful) {
|
||
message.error(res.ErrorMessage)
|
||
}
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
render () {
|
||
const { formId, formCode } = this.props
|
||
const { tableKey, dateType, dateString, dataSource, energyType } = this.state
|
||
const columns = this.state.columns.map((n) => {
|
||
return {
|
||
title: n.Title,
|
||
dataIndex: n.DataIndex,
|
||
key: n.DataIndex,
|
||
width: 100,
|
||
render: (value, row) => {
|
||
return <a id={row.ID}>{value}</a>
|
||
}
|
||
}
|
||
})
|
||
|
||
const rows = dataSource.map((n) => {
|
||
return n.key
|
||
})
|
||
const loading = this.props.loading.effects['app/getDataByPost']
|
||
const exportInserTitle = this.getInsertTitle()
|
||
return (
|
||
<>
|
||
<Search
|
||
preventDefaultSearch={true}
|
||
formId={formId}
|
||
formCode={formCode}
|
||
onSearch={this.handleSearch}
|
||
extraSearch={[
|
||
<FullDatePicker
|
||
dateType={dateType}
|
||
dateString={dateString}
|
||
onlyItem
|
||
onChange={({ dateString, dateType }) => this.setState({ dateString, dateType })}
|
||
options={['0', '1', '3']}
|
||
/>
|
||
]}
|
||
maxShowContentNum={3}
|
||
/>
|
||
<LayoutCard title={'矿山安全类型:' + energyType} style={{ textAlign: 'right', marginTop: '0.15rem' }}>
|
||
<ExportToExcel
|
||
fileName={'网络节点矿山安全统计_' + dateString}
|
||
insertRows={[exportInserTitle]}
|
||
tableId='nodeDetails_tree'
|
||
/>
|
||
<Table
|
||
key={tableKey}
|
||
id='nodeDetails_tree'
|
||
size='small'
|
||
bordered
|
||
columns={columns}
|
||
dataSource={dataSource}
|
||
pagination={false}
|
||
loading={loading}
|
||
scroll={{ x: '100%' }}
|
||
style={{ marginTop: 8 }}
|
||
onExpand={this.onExpand}
|
||
defaultExpandedRowKeys={rows}
|
||
/>
|
||
</LayoutCard>
|
||
</>
|
||
)
|
||
}
|
||
|
||
}
|
||
|
||
KRUnitConsumTreePage.propTypes = {
|
||
}
|
||
|
||
export default connect(({ login, loading, app, search }) => ({ login, loading, app, search }))(Form.create()(KRUnitConsumTreePage))
|