|
@@ -1,5 +1,5 @@
|
|
|
import React, { PureComponent } from 'react';
|
|
import React, { PureComponent } from 'react';
|
|
|
-import { Table, Button, Input, message } from 'antd';
|
|
|
|
|
|
|
+import { Table, Button, Input, message, Popconfirm } from 'antd';
|
|
|
import styles from './style.less';
|
|
import styles from './style.less';
|
|
|
|
|
|
|
|
export default class TableForm extends PureComponent {
|
|
export default class TableForm extends PureComponent {
|
|
@@ -45,8 +45,7 @@ export default class TableForm extends PureComponent {
|
|
|
this.setState({ data: [...this.state.data] });
|
|
this.setState({ data: [...this.state.data] });
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- remove(e, key) {
|
|
|
|
|
- e.preventDefault();
|
|
|
|
|
|
|
+ remove(key) {
|
|
|
const newData = this.state.data.filter(item => item.key !== key);
|
|
const newData = this.state.data.filter(item => item.key !== key);
|
|
|
this.setState({ data: newData });
|
|
this.setState({ data: newData });
|
|
|
this.props.onChange(newData);
|
|
this.props.onChange(newData);
|
|
@@ -64,6 +63,11 @@ export default class TableForm extends PureComponent {
|
|
|
this.index += 1;
|
|
this.index += 1;
|
|
|
this.setState({ data: newData });
|
|
this.setState({ data: newData });
|
|
|
}
|
|
}
|
|
|
|
|
+ handleKeyPress(e, key) {
|
|
|
|
|
+ if (e.key === 'Enter') {
|
|
|
|
|
+ this.saveRow(e, key);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
handleFieldChange(e, fieldName, key) {
|
|
handleFieldChange(e, fieldName, key) {
|
|
|
const newData = [...this.state.data];
|
|
const newData = [...this.state.data];
|
|
|
const target = this.getRowByKey(key);
|
|
const target = this.getRowByKey(key);
|
|
@@ -73,16 +77,29 @@ export default class TableForm extends PureComponent {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
saveRow(e, key) {
|
|
saveRow(e, key) {
|
|
|
- const target = this.getRowByKey(key);
|
|
|
|
|
- delete target.isNew;
|
|
|
|
|
- if (!target.workId || !target.name || !target.department) {
|
|
|
|
|
- message.error('请填写完整成员信息。');
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- this.toggleEditable(e, key);
|
|
|
|
|
- this.props.onChange(this.state.data);
|
|
|
|
|
|
|
+ e.persist();
|
|
|
|
|
+ // save field when blur input
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ if (document.activeElement.tagName === 'INPUT' &&
|
|
|
|
|
+ document.activeElement !== e.target) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (this.clickedCancel) {
|
|
|
|
|
+ this.clickedCancel = false;
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ const target = this.getRowByKey(key);
|
|
|
|
|
+ delete target.isNew;
|
|
|
|
|
+ if (!target.workId || !target.name || !target.department) {
|
|
|
|
|
+ message.error('请填写完整成员信息。');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ this.toggleEditable(e, key);
|
|
|
|
|
+ this.props.onChange(this.state.data);
|
|
|
|
|
+ }, 10);
|
|
|
}
|
|
}
|
|
|
cancel(e, key) {
|
|
cancel(e, key) {
|
|
|
|
|
+ this.clickedCancel = true;
|
|
|
e.preventDefault();
|
|
e.preventDefault();
|
|
|
const target = this.getRowByKey(key);
|
|
const target = this.getRowByKey(key);
|
|
|
if (this.cacheOriginData[key]) {
|
|
if (this.cacheOriginData[key]) {
|
|
@@ -105,6 +122,8 @@ export default class TableForm extends PureComponent {
|
|
|
value={text}
|
|
value={text}
|
|
|
autoFocus
|
|
autoFocus
|
|
|
onChange={e => this.handleFieldChange(e, 'name', record.key)}
|
|
onChange={e => this.handleFieldChange(e, 'name', record.key)}
|
|
|
|
|
+ onBlur={e => this.saveRow(e, record.key)}
|
|
|
|
|
+ onKeyPress={e => this.handleKeyPress(e, record.key)}
|
|
|
placeholder="成员姓名"
|
|
placeholder="成员姓名"
|
|
|
/>
|
|
/>
|
|
|
);
|
|
);
|
|
@@ -122,6 +141,8 @@ export default class TableForm extends PureComponent {
|
|
|
<Input
|
|
<Input
|
|
|
value={text}
|
|
value={text}
|
|
|
onChange={e => this.handleFieldChange(e, 'workId', record.key)}
|
|
onChange={e => this.handleFieldChange(e, 'workId', record.key)}
|
|
|
|
|
+ onBlur={e => this.saveRow(e, record.key)}
|
|
|
|
|
+ onKeyPress={e => this.handleKeyPress(e, record.key)}
|
|
|
placeholder="工号"
|
|
placeholder="工号"
|
|
|
/>
|
|
/>
|
|
|
);
|
|
);
|
|
@@ -139,6 +160,8 @@ export default class TableForm extends PureComponent {
|
|
|
<Input
|
|
<Input
|
|
|
value={text}
|
|
value={text}
|
|
|
onChange={e => this.handleFieldChange(e, 'department', record.key)}
|
|
onChange={e => this.handleFieldChange(e, 'department', record.key)}
|
|
|
|
|
+ onBlur={e => this.saveRow(e, record.key)}
|
|
|
|
|
+ onKeyPress={e => this.handleKeyPress(e, record.key)}
|
|
|
placeholder="所属部门"
|
|
placeholder="所属部门"
|
|
|
/>
|
|
/>
|
|
|
);
|
|
);
|
|
@@ -171,7 +194,9 @@ export default class TableForm extends PureComponent {
|
|
|
<span>
|
|
<span>
|
|
|
<a onClick={e => this.toggleEditable(e, record.key)}>编辑</a>
|
|
<a onClick={e => this.toggleEditable(e, record.key)}>编辑</a>
|
|
|
<span className="ant-divider" />
|
|
<span className="ant-divider" />
|
|
|
- <a onClick={e => this.remove(e, record.key)}>删除</a>
|
|
|
|
|
|
|
+ <Popconfirm title="是否要删除此行?" onConfirm={() => this.remove(record.key)}>
|
|
|
|
|
+ <a>删除</a>
|
|
|
|
|
+ </Popconfirm>
|
|
|
</span>
|
|
</span>
|
|
|
);
|
|
);
|
|
|
},
|
|
},
|