index.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import React, { Component } from 'react';
  2. import { Form, Button } from 'antd';
  3. import './index.less';
  4. class ActionBar extends Component {
  5. onClick(key) {
  6. if (this.props.onAction) this.props.onAction(key);
  7. }
  8. getItem(item) {
  9. const { selectedKeys = [], checkedKeys = [], onlySelect, readOnly } = this.props;
  10. if (readOnly && !item.readOnly) return '';
  11. let { disabled } = item;
  12. if (item.selectNum) disabled = item.selectNum !== selectedKeys.length;
  13. if (item.checkNum) disabled = item.checkNum !== checkedKeys.length;
  14. if (item.needCheck) disabled = item.needCheck > checkedKeys.length;
  15. if (item.needSelect) disabled = item.needSelect > selectedKeys.length;
  16. if (item.needOnlySelect) disabled = !(onlySelect || onlySelect === 0);
  17. if (item.render) {
  18. return item.render(item, disabled);
  19. }
  20. return (
  21. <Button type={item.type} disabled={disabled} onClick={() => this.onClick(item.key)}>
  22. {item.name}
  23. </Button>
  24. );
  25. }
  26. render() {
  27. const { itemList = [], readOnly } = this.props;
  28. let noRead = false;
  29. if (readOnly) {
  30. noRead = true;
  31. for (let i = 0; i < itemList.length; i += 1) {
  32. if (itemList[i].readOnly) {
  33. noRead = false;
  34. break;
  35. }
  36. }
  37. }
  38. return (
  39. <div hidden={noRead} className="action-layout">
  40. <Form layout="inline">
  41. {itemList.map((item, index) => {
  42. return (
  43. <Form.Item className={item.hidden ? 'hidden' : ''} key={index}>
  44. {this.getItem(item)}
  45. </Form.Item>
  46. );
  47. })}
  48. </Form>
  49. </div>
  50. );
  51. }
  52. }
  53. export default ActionBar;