|
|
|
@ -3,6 +3,10 @@ import { Table, Button, Input, message, Popconfirm, Divider } from 'antd'; |
|
|
|
import styles from './style.less'; |
|
|
|
|
|
|
|
export default class TableForm extends PureComponent { |
|
|
|
index = 0; |
|
|
|
|
|
|
|
cacheOriginData = {}; |
|
|
|
|
|
|
|
constructor(props) { |
|
|
|
super(props); |
|
|
|
|
|
|
|
@ -21,16 +25,14 @@ export default class TableForm extends PureComponent { |
|
|
|
} |
|
|
|
|
|
|
|
getRowByKey(key, newData) { |
|
|
|
return (newData || this.state.data).filter(item => item.key === key)[0]; |
|
|
|
const { data } = this.state; |
|
|
|
return (newData || data).filter(item => item.key === key)[0]; |
|
|
|
} |
|
|
|
|
|
|
|
index = 0; |
|
|
|
|
|
|
|
cacheOriginData = {}; |
|
|
|
|
|
|
|
toggleEditable = (e, key) => { |
|
|
|
e.preventDefault(); |
|
|
|
const newData = this.state.data.map(item => ({ ...item })); |
|
|
|
const { data } = this.state; |
|
|
|
const newData = data.map(item => ({ ...item })); |
|
|
|
const target = this.getRowByKey(key, newData); |
|
|
|
if (target) { |
|
|
|
// 进入编辑状态时保存原始数据
|
|
|
|
@ -42,14 +44,9 @@ export default class TableForm extends PureComponent { |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
remove(key) { |
|
|
|
const newData = this.state.data.filter(item => item.key !== key); |
|
|
|
this.setState({ data: newData }); |
|
|
|
this.props.onChange(newData); |
|
|
|
} |
|
|
|
|
|
|
|
newMember = () => { |
|
|
|
const newData = this.state.data.map(item => ({ ...item })); |
|
|
|
const { data } = this.state; |
|
|
|
const newData = data.map(item => ({ ...item })); |
|
|
|
newData.push({ |
|
|
|
key: `NEW_TEMP_ID_${this.index}`, |
|
|
|
workId: '', |
|
|
|
@ -62,6 +59,14 @@ export default class TableForm extends PureComponent { |
|
|
|
this.setState({ data: newData }); |
|
|
|
}; |
|
|
|
|
|
|
|
remove(key) { |
|
|
|
const { data } = this.state; |
|
|
|
const { onChange } = this.props; |
|
|
|
const newData = data.filter(item => item.key !== key); |
|
|
|
this.setState({ data: newData }); |
|
|
|
onChange(newData); |
|
|
|
} |
|
|
|
|
|
|
|
handleKeyPress(e, key) { |
|
|
|
if (e.key === 'Enter') { |
|
|
|
this.saveRow(e, key); |
|
|
|
@ -69,7 +74,8 @@ export default class TableForm extends PureComponent { |
|
|
|
} |
|
|
|
|
|
|
|
handleFieldChange(e, fieldName, key) { |
|
|
|
const newData = this.state.data.map(item => ({ ...item })); |
|
|
|
const { data } = this.state; |
|
|
|
const newData = data.map(item => ({ ...item })); |
|
|
|
const target = this.getRowByKey(key, newData); |
|
|
|
if (target) { |
|
|
|
target[fieldName] = e.target.value; |
|
|
|
@ -96,9 +102,11 @@ export default class TableForm extends PureComponent { |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
const { data } = this.state; |
|
|
|
const { onChange } = this.props; |
|
|
|
delete target.isNew; |
|
|
|
this.toggleEditable(e, key); |
|
|
|
this.props.onChange(this.state.data); |
|
|
|
onChange(data); |
|
|
|
this.setState({ |
|
|
|
loading: false, |
|
|
|
}); |
|
|
|
@ -108,7 +116,8 @@ export default class TableForm extends PureComponent { |
|
|
|
cancel(e, key) { |
|
|
|
this.clickedCancel = true; |
|
|
|
e.preventDefault(); |
|
|
|
const newData = this.state.data.map(item => ({ ...item })); |
|
|
|
const { data } = this.state; |
|
|
|
const newData = data.map(item => ({ ...item })); |
|
|
|
const target = this.getRowByKey(key, newData); |
|
|
|
if (this.cacheOriginData[key]) { |
|
|
|
Object.assign(target, this.cacheOriginData[key]); |
|
|
|
@ -183,7 +192,8 @@ export default class TableForm extends PureComponent { |
|
|
|
title: '操作', |
|
|
|
key: 'action', |
|
|
|
render: (text, record) => { |
|
|
|
if (!!record.editable && this.state.loading) { |
|
|
|
const { loading } = this.state; |
|
|
|
if (!!record.editable && loading) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
if (record.editable) { |
|
|
|
@ -219,12 +229,14 @@ export default class TableForm extends PureComponent { |
|
|
|
}, |
|
|
|
]; |
|
|
|
|
|
|
|
const { loading, data } = this.state; |
|
|
|
|
|
|
|
return ( |
|
|
|
<Fragment> |
|
|
|
<Table |
|
|
|
loading={this.state.loading} |
|
|
|
loading={loading} |
|
|
|
columns={columns} |
|
|
|
dataSource={this.state.data} |
|
|
|
dataSource={data} |
|
|
|
pagination={false} |
|
|
|
rowClassName={record => { |
|
|
|
return record.editable ? styles.editable : ''; |
|
|
|
|