ForSelTable.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import React, { PureComponent } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { cloneDeep } from 'lodash';
  4. import { Table, Button } from 'antd';
  5. export default class ForSelTable extends PureComponent {
  6. static propTypes = {
  7. dataSource: PropTypes.array.isRequired,
  8. loading: PropTypes.bool.isRequired,
  9. pagination: PropTypes.object.isRequired,
  10. columns: PropTypes.array.isRequired,
  11. rowKeyName: PropTypes.string.isRequired,
  12. onChange: PropTypes.func,
  13. onAdd: PropTypes.func,
  14. };
  15. render() {
  16. const {
  17. rowKeyName,
  18. dataSource,
  19. loading,
  20. pagination,
  21. className,
  22. columns,
  23. selected,
  24. onChange,
  25. onAdd,
  26. ...rest,
  27. } = this.props;
  28. const addColumn = {
  29. title: '操作',
  30. dataIndex: 'add-btn',
  31. key: 'add-btn',
  32. render: (text, record) => (
  33. <Button
  34. onClick={() => onAdd(record)}
  35. disabled={selected.filter(item => item.id === record.id).length}
  36. size="small"
  37. type="primary"
  38. >
  39. {selected.filter(item => item.id === record.id).length ? '已添加' : '添加'}
  40. </Button>
  41. ),
  42. };
  43. const curSpaceColumns = cloneDeep(columns);
  44. curSpaceColumns.push(addColumn);
  45. return (
  46. <Table
  47. rowKey={rowKeyName}
  48. bordered={true}
  49. columns={curSpaceColumns}
  50. dataSource={dataSource}
  51. loading={loading}
  52. pagination={pagination}
  53. onChange={onChange}
  54. className={className}
  55. {...rest}
  56. />
  57. );
  58. }
  59. }