index.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import React, { Component } from 'react';
  2. import './index.less';
  3. import { Icon } from 'antd';
  4. import Assets from '@src/components/Assets';
  5. import Select from '../Select';
  6. import CheckboxItem from '../CheckboxItem';
  7. import { Button } from '../Button';
  8. export default class UserAction extends Component {
  9. constructor(props) {
  10. super(props);
  11. this.state = { showInput: false, searchText: '' };
  12. }
  13. onAction(key) {
  14. const { onAction } = this.props;
  15. if (onAction) onAction(key);
  16. }
  17. onAll(checked) {
  18. const { onAll } = this.props;
  19. if (onAll) onAll(checked);
  20. }
  21. onSearch(value) {
  22. this.setState({ searchText: value });
  23. }
  24. onFilter(key, value) {
  25. const { filterMap = {}, onFilter } = this.props;
  26. filterMap[key] = value;
  27. if (onFilter) onFilter(filterMap);
  28. }
  29. onSort(key, value) {
  30. const { onSort, sortMap = {} } = this.props;
  31. sortMap[key] = value;
  32. if (onSort) onSort(sortMap);
  33. }
  34. render() {
  35. const {
  36. allCheckbox,
  37. allChecked,
  38. help,
  39. btnList = [],
  40. search,
  41. selectList = [],
  42. sortList = [],
  43. sortMap = [],
  44. right,
  45. left,
  46. } = this.props;
  47. const { showInput, searchText } = this.state;
  48. return (
  49. <div className="user-action">
  50. {left && <div className="left">{left}</div>}
  51. {allCheckbox && (
  52. <div className="all">
  53. <CheckboxItem theme="white" checked={allChecked} onClick={value => this.onAll(value)} />
  54. 全选
  55. </div>
  56. )}
  57. <div hidden={btnList.length === 0} className="button-list">
  58. {btnList.map(btn => {
  59. return (
  60. <Button disabled={btn.disabled} radius size="small" onClick={() => this.onAction(btn.key)}>
  61. {btn.title}{' '}
  62. {btn.tag === 'vip' && <Assets name={btn.disabled ? 'VIP_small_gray' : 'VIP_small_yellow'} />}
  63. </Button>
  64. );
  65. })}
  66. {help && (
  67. <div className="help">
  68. <Icon type="question-circle" theme="filled" onClick={() => this.onAction('help')} />
  69. </div>
  70. )}
  71. </div>
  72. <div hidden={selectList.length === 0 && sortList.length === 0} className="item-list">
  73. {selectList.map(item => {
  74. return (
  75. <div className={`item select-item ${item.right ? 'right' : ''}`}>
  76. <span>{item.label}</span>
  77. {item.select && this.renderSelect(item)}
  78. {item.children && item.children.map(child => this.renderSelect(child))}
  79. </div>
  80. );
  81. })}
  82. {sortList.map(item => {
  83. return (
  84. <div className={`item sort-item ${item.right ? 'right' : ''}`}>
  85. {item.label}
  86. {sortMap[item.key] ? (
  87. <Assets
  88. name={sortMap[item.key] === 'asc' ? 'seqencing2_up_select' : 'seqencing2_down_select'}
  89. onClick={() => this.onSort(item.key, sortMap[item.key] === 'asc' ? 'desc' : '')}
  90. />
  91. ) : (
  92. <Assets name="seqencing2_normal" onClick={() => this.onSort(item.key, 'asc')} />
  93. )}
  94. </div>
  95. );
  96. })}
  97. </div>
  98. {search && (
  99. <div className="search">
  100. {showInput && (
  101. <input
  102. className="search-input"
  103. placeholder="请输入您想搜索的内容"
  104. value={searchText}
  105. onChange={e => this.onSearch(e.target.value)}
  106. />
  107. )}
  108. {!showInput && <Icon type="search" onClick={() => this.setState({ showInput: true })} />}
  109. </div>
  110. )}
  111. {right && (
  112. <div
  113. className={`right ${
  114. btnList.length === 0 && selectList.length === 0 && sortList.length === 0 ? 'only' : ''
  115. }`}
  116. >
  117. {right}
  118. </div>
  119. )}
  120. </div>
  121. );
  122. }
  123. renderSelect(item) {
  124. const { filterMap = {} } = this.props;
  125. return (
  126. <Select
  127. size="small"
  128. theme="default"
  129. value={filterMap[item.key]}
  130. placeholder={item.placeholder}
  131. list={item.be ? item.selectMap[filterMap[item.be]] || [] : item.select}
  132. onChange={({ key }) => this.onFilter(item.key, key)}
  133. />
  134. );
  135. }
  136. }