configSider.jsx 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import React from 'react'
  2. import { connect } from 'dva'
  3. import { Form, Input, Divider, Icon, Tooltip, Button } from 'antd'
  4. import ChooseChartBox from './chooseChartBox'
  5. import CusFilterBox from './cusFilterBox'
  6. import './configSider.less'
  7. const FormItem = Form.Item
  8. class ConfigSider extends React.Component {
  9. constructor(props) {
  10. super(props);
  11. this.state = {
  12. visibleChooseChartBox: false,
  13. visibleCusFilterBox: false
  14. };
  15. }
  16. showChooseChartBox = (o) => {
  17. this.setState({
  18. visibleChooseChartBox: true
  19. });
  20. }
  21. hideChooseChartBox = (o) => {
  22. this.setState({
  23. visibleChooseChartBox: false
  24. });
  25. }
  26. showCusFilterBox = (o) => {
  27. this.setState({
  28. visibleCusFilterBox: true
  29. });
  30. }
  31. hideCusFilterBox = (o) => {
  32. this.setState({
  33. visibleCusFilterBox: false
  34. });
  35. }
  36. generateViewTypes = () => {
  37. const { dispatch } = this.props;
  38. const { visibleChooseChartBox } = this.state;
  39. return (<div className='view-types'>
  40. <Tooltip placement='bottom' title="图表">
  41. <div className="view-type-item">
  42. <Icon className='viewtype-icon' type="area-chart" theme="outlined" onClick={(item) => {
  43. this.showChooseChartBox("create");
  44. }}/>
  45. </div>
  46. </Tooltip >
  47. <Tooltip placement='bottom' title="富文本">
  48. <div className="view-type-item">
  49. <Icon className='viewtype-icon' type="book" theme="outlined" onClick={() => {
  50. dispatch({ type: 'dashboardDesigner/addRichText' });
  51. }}/>
  52. </div>
  53. </Tooltip>
  54. {visibleChooseChartBox && <ChooseChartBox visibleBox={visibleChooseChartBox} hideBox={this.hideChooseChartBox} />}
  55. </div>)
  56. }
  57. render() {
  58. const { dashboardDesigner, dispatch } = this.props;
  59. const { visibleCusFilterBox } = this.state;
  60. return <Form className='config-sider' layout={'vertical'}>
  61. <Divider>报表制作</Divider>
  62. {this.generateViewTypes()}
  63. <Divider>字段过滤</Divider>
  64. <Button className="cus-filter-button" onClick={this.showCusFilterBox}>
  65. <Icon type='bulb' theme='outlined' />自定义过滤字段
  66. </Button>
  67. {visibleCusFilterBox && <CusFilterBox visibleBox={visibleCusFilterBox} hideBox={this.hideCusFilterBox} />}
  68. <Divider>其他设置</Divider>
  69. <FormItem label='分享码'>
  70. <Input
  71. value={dashboardDesigner.shareCode}
  72. onChange={(e) => {
  73. dispatch({ type: 'dashboardDesigner/setField', name: 'shareCode', value: e.target.value });
  74. }}
  75. />
  76. </FormItem>
  77. </Form>
  78. }
  79. }
  80. export default connect(({ present: { dashboardDesigner } }) => ({ dashboardDesigner }))(ConfigSider);