mh_jy_safe_web/src/components/CustomPages/KR/KrConsumUseEnergyClassPage.js
2025-08-25 10:08:30 +08:00

172 lines
4.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 核心库
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))