import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { Transfer, Icon } from 'antd'
|
import './index.scss'
|
|
class TransferForm extends Component {
|
static propTypes = {
|
columns: PropTypes.array,
|
selected: PropTypes.array,
|
dict: PropTypes.object, // 字典项
|
}
|
|
state = {
|
data: [],
|
targetKeys: [],
|
selectedKeys: []
|
}
|
|
handleChange = (nextTargetKeys, direction, moveKeys) => {
|
this.setState({ targetKeys: nextTargetKeys })
|
}
|
|
handleSelectChange = (sourceSelectedKeys, targetSelectedKeys) => {
|
this.setState({ selectedKeys: [...sourceSelectedKeys, ...targetSelectedKeys] })
|
}
|
|
UNSAFE_componentWillMount() {
|
let datas = new Map()
|
this.props.columns.forEach(item => {
|
if (item.field && item.Hide !== 'true') {
|
datas.set(item.uuid, item)
|
}
|
})
|
|
let selecteds = []
|
|
this.props.selected.forEach(item => {
|
if (datas.has(item)) {
|
selecteds.push(item)
|
// datas.delete(item)
|
}
|
})
|
|
this.setState({
|
data: [...datas.values()].map(item => {
|
return {
|
key: item.uuid,
|
title: item.label,
|
field: item.field,
|
description: ''
|
}
|
}),
|
targetKeys: selecteds
|
})
|
}
|
|
changeorder = (e, item, type) => {
|
const { targetKeys } = this.state
|
e.stopPropagation()
|
|
let _index = 0
|
let keys = targetKeys.filter((key, i) => {
|
if (key === item.key) {
|
_index = i
|
return false
|
} else {
|
return true
|
}
|
})
|
|
if ((_index === 0 && type === 'up') || (_index === targetKeys.length - 1 && type === 'down')) {
|
return
|
}
|
|
if (type === 'up') {
|
keys.splice(_index - 1, 0, item.key)
|
} else {
|
keys.splice(_index + 1, 0, item.key)
|
}
|
|
this.setState({
|
targetKeys: keys
|
})
|
}
|
|
getItem = (item) => {
|
let content = item.title + '(' + item.field + ')'
|
return <span title={content}>
|
{content}
|
<Icon type="arrow-up" onClick={(e) => {this.changeorder(e, item, 'up')}} />
|
<Icon type="arrow-down" onClick={(e) => {this.changeorder(e, item, 'down')}} />
|
</span>
|
}
|
|
render() {
|
const { targetKeys, selectedKeys } = this.state
|
|
return (
|
<div className="common-table-columns-transfer">
|
<Transfer
|
dataSource={this.state.data}
|
titles={[this.props.dict['header.form.column.source'], this.props.dict['header.form.column.target']]}
|
targetKeys={targetKeys}
|
locale={{itemUnit: this.props.dict['header.form.column.itemUnit'], itemsUnit: this.props.dict['header.form.column.itemsUnit']}}
|
selectedKeys={selectedKeys}
|
onChange={this.handleChange}
|
onSelectChange={this.handleSelectChange}
|
render={this.getItem}
|
/>
|
</div>
|
)
|
}
|
}
|
|
export default TransferForm
|