172 lines
4.7 KiB
JavaScript
172 lines
4.7 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 { initFilter, addRuleAndGroups, renderExportCell } from '../../../utils/common'
|
||
|
||
class KrConsumUseEnergyClassPage extends React.Component {
|
||
constructor(props) {
|
||
super(props)
|
||
this.state = {
|
||
head: [],
|
||
dataSource: [],
|
||
typeIndex: 0,
|
||
dateType: '0',
|
||
searchRules: [],
|
||
dateString: moment().format('YYYY'),
|
||
}
|
||
}
|
||
|
||
handleSearch = (value) => {
|
||
if (value && value.rules) {
|
||
value.rules.push({
|
||
field: 'Parameter1',
|
||
operator: 0,
|
||
value: this.state.dateType,
|
||
isCustom: true,
|
||
isSysParam: false,
|
||
})
|
||
value.rules.push({
|
||
field: 'Parameter2',
|
||
operator: 0,
|
||
value: this.state.dateString,
|
||
isCustom: true,
|
||
isSysParam: false,
|
||
})
|
||
this.setState({
|
||
searchRules: value,
|
||
}, () => {
|
||
this.getConsumData(value)
|
||
})
|
||
}
|
||
}
|
||
|
||
getConsumData = () => {
|
||
const { login, dispatch } = this.props
|
||
const json = initFilter(login.OrgId)
|
||
addRuleAndGroups(json, this.state.searchRules)
|
||
dispatch({
|
||
type: 'app/getDataByPost',
|
||
url: 'KR/Statistics/ConsumUseEnergyClass',
|
||
payload: json,
|
||
onlyData: false,
|
||
onComplete: (res) => {
|
||
if (res && res.IsSuccessful && res.Data) {
|
||
this.setState({
|
||
typeIndex: res.Data.Index,
|
||
head: res.Data.Head,
|
||
dataSource: res.Data.Data,
|
||
})
|
||
} else {
|
||
if (res && !res.IsSuccessful) {
|
||
message.error(res.ErrorMessage)
|
||
}
|
||
}
|
||
}
|
||
})
|
||
}
|
||
|
||
getInsertTitle = () => {
|
||
const { formCode } = this.props
|
||
const fieldConfigs = this.props.search.fieldConfigs[formCode] || []
|
||
const exportInserTitle = ['矿山安全分项用能统计']
|
||
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(' ')
|
||
}
|
||
|
||
render() {
|
||
const { formId, formCode } = this.props
|
||
const { dateString, dateType, typeIndex, dataSource, head } = this.state
|
||
const length = dataSource.length
|
||
const columns = []
|
||
head.forEach((n, i) => {
|
||
var item = {
|
||
title: n.Title, dataIndex: n.DataIndex,
|
||
render: (value, row, index) => {
|
||
return {
|
||
children: value,
|
||
}
|
||
}
|
||
}
|
||
if (i === 0) {
|
||
item = {
|
||
title: n.Title, dataIndex: n.DataIndex,
|
||
render: (value, row, index) => {
|
||
return {
|
||
children: value,
|
||
props: {
|
||
rowSpan: index % (typeIndex + 3) === 0 ? (typeIndex + 3) : (index == length - 2 ? 1 : 0),
|
||
},
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (i === 1) {
|
||
item = {
|
||
title: n.Title, dataIndex: n.DataIndex,
|
||
render: (value, row, index) => {
|
||
return {
|
||
children: value,
|
||
props: {
|
||
rowSpan: index < length - 2 ? (index % (typeIndex + 3) === 0 ? 4 : (index % (typeIndex + 3) > 0 && index % (typeIndex + 3) < 4 ? 0 : 1)) : 1,
|
||
},
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
columns.push(item)
|
||
})
|
||
|
||
const exportInserTitle = this.getInsertTitle()
|
||
return (
|
||
<>
|
||
<Search
|
||
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']}
|
||
/>
|
||
]}
|
||
/>
|
||
<LayoutCard style={{ textAlign: 'right', marginTop: '0.15rem' }}>
|
||
<ExportToExcel
|
||
fileName={'矿山安全分项用能统计_' + this.state.dateString}
|
||
insertRows={[exportInserTitle]}
|
||
tableId='useEnergyDetails'
|
||
/>
|
||
<Table
|
||
id='useEnergyDetails'
|
||
size='small'
|
||
bordered
|
||
columns={columns}
|
||
dataSource={dataSource}
|
||
pagination={false}
|
||
scroll={{ x: '100%' }}
|
||
style={{ marginTop: 8 }}
|
||
/>
|
||
</LayoutCard>
|
||
</>
|
||
)
|
||
}
|
||
}
|
||
|
||
KrConsumUseEnergyClassPage.propTypes = {
|
||
}
|
||
|
||
export default connect(({ login, loading, app, search }) => ({ login, loading, app, search }))(Form.create()(KrConsumUseEnergyClassPage))
|