groupSelector.jsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import React from 'react'
  2. import { Popover, Row, Col, Icon, Divider } from 'antd'
  3. import { connect } from 'dva'
  4. import './groupSelector.less'
  5. class GroupSelector extends React.Component {
  6. constructor(props) {
  7. super(props);
  8. this.state = {
  9. visible: false
  10. }
  11. }
  12. hide = () => {
  13. this.setState({
  14. visible: false,
  15. });
  16. }
  17. handleVisibleChange = (visible) => {
  18. this.setState({ visible });
  19. }
  20. render() {
  21. const { model, modelName, children, dispatch } = this.props;
  22. const { visible } = this.state;
  23. const grouplist = model.groupList;
  24. const pgroups = grouplist.filter(g => g.pcode === '-1');
  25. const currentGroup = model.currentGroup;
  26. return (
  27. <Popover
  28. overlayClassName='groupselector'
  29. placement="bottomLeft"
  30. trigger='click'
  31. visible={visible}
  32. onVisibleChange={this.handleVisibleChange}
  33. content={
  34. [{code: 'all', label: '全部分组'}, { code: '-1', label: '未分组' }].concat(pgroups).map(p => {
  35. let cgroups = grouplist.filter(g => g.pcode === p.code && p.code !== '-1');
  36. return <Row type='flex' justify='left' key={`gr-${p.code}`}>
  37. <Col key={`rc-${p.code}`} onClick={() => {
  38. this.hide();
  39. dispatch({ type: modelName + '/setCurrentGroup', group1: p });
  40. }}>
  41. {<span className={`group${currentGroup[0].code === p.code ? ' selected' : ''}`}>{p.label}</span>}{cgroups.length>0 && <Icon type="right" />}
  42. </Col>
  43. {
  44. cgroups.map((c, i) => <Col key={c.code} onClick={() => {
  45. this.hide();
  46. dispatch({ type: modelName + '/setCurrentGroup', group1: p, group2: c });
  47. }}>
  48. {<span className={`group${currentGroup[1] ? (currentGroup[1].code === c.code ? ' selected' : '') : ''}`}>{c.label}</span>}
  49. {i === cgroups.length-1 ? '' : <Divider className='group-divider' type="vertical" />}
  50. </Col>)
  51. }
  52. </Row>
  53. })
  54. }
  55. >
  56. { children }
  57. </Popover>
  58. );
  59. }
  60. }
  61. export default connect()(GroupSelector);