194 lines
5.3 KiB
JavaScript
194 lines
5.3 KiB
JavaScript
|
|
import React from 'react'
|
|||
|
|
import { connect } from 'dva'
|
|||
|
|
import { Modal, InputNumber, Table, message, Select } from 'antd'
|
|||
|
|
import { LayoutCard, IFComponent } from '@woowalker/feui'
|
|||
|
|
|
|||
|
|
const { Option } = Select;
|
|||
|
|
|
|||
|
|
class EnergyKpiModal extends React.Component {
|
|||
|
|
constructor(props) {
|
|||
|
|
super(props)
|
|||
|
|
this.state = {
|
|||
|
|
visible: false,
|
|||
|
|
columnsRatio: [
|
|||
|
|
{ title: '打分项', dataIndex: 'NAME' },
|
|||
|
|
{ title: '最大分值', dataIndex: 'MaxScore' },
|
|||
|
|
{
|
|||
|
|
title: '权重',
|
|||
|
|
dataIndex: 'RATIO',
|
|||
|
|
render: (text, record, index) => {
|
|||
|
|
return (
|
|||
|
|
<InputNumber
|
|||
|
|
value={text}
|
|||
|
|
min={0}
|
|||
|
|
max={100}
|
|||
|
|
formatter={val => `${val}%`}
|
|||
|
|
parser={val => val.replace('%', '')}
|
|||
|
|
onChange={val => this.handleChange(val, record, index, 'itemRatio')}
|
|||
|
|
/>
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
title: '计算方式',
|
|||
|
|
render: (text, record, index) => {
|
|||
|
|
if (record.CalculateWays && record.CalculateWays.length > 0)
|
|||
|
|
return (
|
|||
|
|
<Select value={record.CALCULATE_WAY} style={{ width: 120 }} onChange={val => this.calWayChange(val, record, index)}>
|
|||
|
|
{
|
|||
|
|
record.CalculateWays.map((item, index) => {
|
|||
|
|
return (
|
|||
|
|
<Option value={+item.Value}>{item.Text}</Option>
|
|||
|
|
)
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
</Select>
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
itemRatio: [],
|
|||
|
|
columnsPeak: [
|
|||
|
|
{ title: '峰谷类型', dataIndex: 'NAME' },
|
|||
|
|
{
|
|||
|
|
title: '权重',
|
|||
|
|
dataIndex: 'RATIO',
|
|||
|
|
render: (text, record, index) => {
|
|||
|
|
return (
|
|||
|
|
<InputNumber
|
|||
|
|
value={text}
|
|||
|
|
min={0}
|
|||
|
|
max={100}
|
|||
|
|
formatter={val => `${val}%`}
|
|||
|
|
parser={val => val.replace('%', '')}
|
|||
|
|
onChange={val => this.handleChange(val, record, index, 'peakValleyRatio')}
|
|||
|
|
/>
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
peakValleyRatio: [],
|
|||
|
|
calType: 0
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
componentDidMount() {
|
|||
|
|
if (this.props.onRef) {
|
|||
|
|
this.props.onRef(this)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
showModal = (id) => {
|
|||
|
|
this.setState({
|
|||
|
|
visible: true
|
|||
|
|
}, () => {
|
|||
|
|
const json = {
|
|||
|
|
OrgId: this.props.login.OrgId,
|
|||
|
|
Keyword: id
|
|||
|
|
}
|
|||
|
|
this.props.dispatch({
|
|||
|
|
type: 'app/getDataByPost',
|
|||
|
|
url: 'ED/Calculate/GetSettingData',
|
|||
|
|
payload: json
|
|||
|
|
}).then((res) => {
|
|||
|
|
if (res) {
|
|||
|
|
const { itemRatio, peakValleyRatio, calType } = res
|
|||
|
|
this.setState({ itemRatio, peakValleyRatio, calType })
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
handleOk = () => {
|
|||
|
|
const { itemRatio, peakValleyRatio, calType } = this.state
|
|||
|
|
const json = {
|
|||
|
|
OrgId: this.props.login.OrgId,
|
|||
|
|
ItemRatio: itemRatio,
|
|||
|
|
PeakValleyRatio: peakValleyRatio,
|
|||
|
|
CalType: calType
|
|||
|
|
}
|
|||
|
|
this.props.dispatch({
|
|||
|
|
type: 'app/getDataByPost',
|
|||
|
|
url: 'ED/Calculate/ItemRatioSettingSave',
|
|||
|
|
payload: json
|
|||
|
|
}).then(res => {
|
|||
|
|
if (res) {
|
|||
|
|
if (res.IsSucceed) {
|
|||
|
|
message.success(res.Msg)
|
|||
|
|
this.setState({ visible: false })
|
|||
|
|
} else {
|
|||
|
|
message.error(res.Msg)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
handleCancel = () => {
|
|||
|
|
this.setState({ visible: false })
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
handleChange = (text, record, index, type) => {
|
|||
|
|
record.RATIO = text
|
|||
|
|
const newData = [...this.state[type]]
|
|||
|
|
const item = newData[index]
|
|||
|
|
newData.splice(index, 1, {
|
|||
|
|
...item,
|
|||
|
|
...record
|
|||
|
|
})
|
|||
|
|
this.setState({ [type]: newData })
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
calWayChange = (val, record, index) => {
|
|||
|
|
const { itemRatio } = this.state
|
|||
|
|
itemRatio[index].CALCULATE_WAY = val
|
|||
|
|
this.setState({ itemRatio })
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
calTypeChange = (value) => {
|
|||
|
|
this.setState({ calType: value })
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
render() {
|
|||
|
|
const { columnsRatio, itemRatio, columnsPeak, peakValleyRatio, calType } = this.state
|
|||
|
|
const { loading } = this.props
|
|||
|
|
return (
|
|||
|
|
<Modal
|
|||
|
|
title="权重配置"
|
|||
|
|
visible={this.state.visible}
|
|||
|
|
onOk={this.handleOk}
|
|||
|
|
onCancel={this.handleCancel}
|
|||
|
|
>
|
|||
|
|
<LayoutCard>
|
|||
|
|
<span>单耗方式:</span>
|
|||
|
|
<Select value={calType} style={{ width: 120 }} onChange={this.calTypeChange}>
|
|||
|
|
<Option value={0}>按产量</Option>
|
|||
|
|
<Option value={1}>按时间</Option>
|
|||
|
|
</Select>
|
|||
|
|
</LayoutCard>
|
|||
|
|
<LayoutCard title='打分项权重'>
|
|||
|
|
<Table
|
|||
|
|
loading={loading.effects['app/getDataByPost']}
|
|||
|
|
size='small'
|
|||
|
|
columns={columnsRatio}
|
|||
|
|
dataSource={itemRatio}
|
|||
|
|
pagination={false}
|
|||
|
|
style={{ marginTop: 8 }}
|
|||
|
|
/>
|
|||
|
|
</LayoutCard>
|
|||
|
|
<IFComponent IF={!!(peakValleyRatio && peakValleyRatio.length > 0)}>
|
|||
|
|
<LayoutCard title='峰谷利用率权重'>
|
|||
|
|
<Table
|
|||
|
|
loading={loading.effects['app/getDataByPost']}
|
|||
|
|
size='small'
|
|||
|
|
columns={columnsPeak}
|
|||
|
|
dataSource={peakValleyRatio}
|
|||
|
|
pagination={false}
|
|||
|
|
style={{ marginTop: 8 }}
|
|||
|
|
/>
|
|||
|
|
</LayoutCard>
|
|||
|
|
</IFComponent>
|
|||
|
|
</Modal>
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
export default connect(({ login, loading }) => ({ login, loading }))(EnergyKpiModal)
|