mh_jy_safe_web/src/components/CustomPages/KR/KrConsumUseEnergyClassPage.js

172 lines
4.7 KiB
JavaScript
Raw Normal View History

2025-08-25 10:08:30 +08:00
// 核心库
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))