// 核心库 import React from 'react' import { connect } from 'dva' // 组件库 import { Icon, Table, message, Button } from 'antd' import { Search, ExportToExcel, IFComponent, LayoutCard } from '@woowalker/feui' import CommonChart from '../../Chart/CommonChart' // 工具库 import moment from 'moment' import { cloneDeep } from 'lodash' import { initFilter, addRuleAndGroups, renderExportCell } from '../../../utils/common' // 表记节点 -> 历史监测 class EmHistoryPage extends React.Component { constructor (props) { super(props) this.state = { type: '1', month: moment().format('YYYY-MM'), day: moment().format('YYYY-MM-DD'), redisDate: '', // redis 缓存存储接口返回的 date selectedRowKeys: [], monthsData: {}, // 存储鼠标移上对应展示 dataSource 的对象 showColumns: [], // 展示的表格列配置 showDataSource: [], // 展示的表格 exportColumns: [], // 用于导出数据的隐藏的表格列配置 exportDataSource: [], // 用于导出数据的隐藏的表格 chartData: {}, searchRules: {} } } handleSearch = (value) => { this.state.searchRules = cloneDeep(value) value.rules.push({ field: 'Parameter1', operator: 0, value: this.props.formParam.Parameter1, isCustom: true, isSysParam: false, }) value.rules.push({ field: 'Parameter2', operator: 0, value: this.state.type, isCustom: true, isSysParam: false, }) value.rules.push({ field: 'Parameter3', operator: 0, value: this.state.month, isCustom: true, isSysParam: false, }) value.rules.push({ field: 'Parameter4', operator: 0, value: this.state.day, isCustom: true, isSysParam: false, }) value.rules.push({ field: 'Parameter5', operator: 0, value: this.props.data.TreeSelected.join(','), isCustom: true, isSysParam: false, }) const json = initFilter(this.props.login.OrgId) addRuleAndGroups(json, value) this.props.dispatch({ type: 'app/getDataByPost', url: 'EM/Monitoring/GetHistoryData', payload: json }).then(res => { if (res) { if (res.msg) { message.error(res.msg) return } const { chartData, headTitle, select, date, dateDic, tableData, dataSources } = res // 展示的 table 的列配置 const showColumns = [ { title: '序号', dataIndex: 'Index' }, { title: '计量点名称', dataIndex: 'Name' }, { title: '节点', dataIndex: 'NodeName' }, { title: '最大值', dataIndex: 'Max' }, { title: '最小值', dataIndex: 'Min' }, { title: '平均值', dataIndex: 'Avg' }, { title: '当前值', dataIndex: 'Current' } ] showColumns.forEach(item => { item.render = (text, record, index) => { return {text} } }) // 导出的 table 的列配置 const exportColumns = [] headTitle.forEach((item, Index) => { const column = { title: item.Title, dataIndex: item.DataIndex } if (Index === 0) { column.render = (text, record, index) => { return { children: text, props: { rowSpan: index % 3 === 0 ? 3 : 0 } } } } exportColumns.push(column) }) this.setState({ redisDate: date.join(','), selectedRowKeys: select, monthsData: dateDic, showColumns, showDataSource: tableData, exportColumns, exportDataSource: dataSources, chartData: { xAxis: chartData.XAxis[0].Data, yAxis: chartData.YAxis, data: chartData.Data } }) } }) } saveRedis = () => { const { redisDate, selectedRowKeys } = this.state const json = { Code: this.props.formParam.Parameter1, Date: redisDate.split(',').map(item => moment(item).startOf('month').format('YYYY-MM-DD')).join(','), Ids: selectedRowKeys } this.props.dispatch({ type: 'app/getDataByPost', url: 'EM/Monitoring/HistoryRedisSave', payload: json, onlyData: false, ignoreThrottle: true }).then(res => { if (res && res.IsSuccessful && res.Data) { this.handleSearch(this.state.searchRules) } }) } onSelectChange = (selectedRowKeys) => { if (selectedRowKeys.length == 0) { message.error("至少选中1个计量点") } else { this.setState({ selectedRowKeys }, this.saveRedis) } } setShowDataSource = (evt) => { const { showDataSource, monthsData } = this.state showDataSource.forEach((item, index) => { item.Current = monthsData[evt.name][index] }) this.setState({ showDataSource: [...showDataSource] }) } throughClick = (evt) => { const { type, searchRules } = this.state switch (type) { case '1': this.setState({ month: evt.name, type: '2' }, () => { this.handleSearch(searchRules) }) break case '2': this.setState({ day: evt.name, type: '3' }, () => { this.handleSearch(searchRules) }) break default: break } } backClick = () => { const { type, searchRules } = this.state switch (type) { case '2': this.setState({ type: '1' }, () => { this.handleSearch(searchRules) }) break case '3': this.setState({ type: '2' }, () => { this.handleSearch(searchRules) }) break default: break } } beforeHandle = () => { const month = moment(this.state.month + '-1', 'YYYY-MM-DD') const day = moment(this.state.day, 'YYYY-MM-DD') switch (this.state.type) { case '2': this.setState({ month: month.add(-1, 'months').format('YYYY-MM') }, () => { this.handleSearch(this.state.searchRules) }) break case '3': this.setState({ day: day.add(-1, 'days').format('YYYY-MM-DD') }, () => { this.handleSearch(this.state.searchRules) }) break default: break } } afterHandle = () => { const month = moment(this.state.month + '-1', 'YYYY-MM-DD') const day = moment(this.state.day, 'YYYY-MM-DD') switch (this.state.type) { case '2': this.setState({ month: month.add(1, 'months').format('YYYY-MM') }, () => { this.handleSearch(this.state.searchRules) }) break case '3': this.setState({ day: day.add(1, 'days').format('YYYY-MM-DD') }, () => { this.handleSearch(this.state.searchRules) }) break default: break } } getInsertTitle = () => { const { formCode } = this.props const fieldConfigs = this.props.search.fieldConfigs[formCode] || [] const exportInserTitle = ['历史数据'] if (this.state.type === "1") { fieldConfigs.forEach(fc => { const { label, value, dataSource } = fc const cellText = renderExportCell(value, dataSource, fc, this.props.app.enums || {}) cellText && exportInserTitle.push(`${label}:${cellText}`) }) } else { exportInserTitle.push(`${this.state.month}`) } return exportInserTitle.join(' ') } render () { const { formId, formCode } = this.props const { selectedRowKeys, chartData, showColumns, showDataSource, exportColumns, exportDataSource } = this.state const exportToExcel = this.state.type === "1" ? "历史数据" : "历史数据" + this.state.month const exportInserTitle = this.getInsertTitle() const { selectedNodes = [] } = this.props.data const saveImgName = selectedNodes.length ? `${selectedNodes.map(item => item.node.name).join('-')}历史检测` : '历史检测' return (