barConfigForm.jsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import React from 'react';
  2. import { Form, Select, Icon, Tag, Cascader, Dropdown, Menu } from 'antd';
  3. const FormItem = Form.Item;
  4. const { Option } = Select;
  5. const { SubMenu, MenuItemGroup } = Menu;
  6. import { connect } from 'dva';
  7. import chartDesigner from '../../../models/chartDesigner';
  8. import './barConfigForm.less';
  9. const barConfigForm = ({ chartDesigner, dispatch, formItemLayout }) => {
  10. const columns = chartDesigner.columns;
  11. const menu = <Menu>
  12. <Menu.Item>
  13. <a target="_blank" rel="noopener noreferrer" href="http://www.alipay.com/">1st menu item</a>
  14. </Menu.Item>
  15. <Menu.Item>
  16. <a target="_blank" rel="noopener noreferrer" href="http://www.taobao.com/">2nd menu item</a>
  17. </Menu.Item>
  18. <Menu.Item>
  19. <a target="_blank" rel="noopener noreferrer" href="http://www.tmall.com/">3rd menu item</a>
  20. </Menu.Item>
  21. </Menu>
  22. return (
  23. <Form hideRequiredMark={true}>
  24. <FormItem label='横轴' {...formItemLayout}>
  25. <Select
  26. value={chartDesigner.barConfig.xAxis}
  27. allowClear={true}
  28. placeholder='请选择...'
  29. labelInValue={true}
  30. onChange={(value) => {
  31. dispatch({ type: 'chartDesigner/barConfig/setXAxis', xAxis: value});
  32. }}
  33. >
  34. {columns.map((c, i)=>{
  35. return (<Option key={i} value={c.name}>{c.label}</Option>)
  36. })}
  37. </Select>
  38. </FormItem>
  39. <FormItem label='纵轴' {...formItemLayout}>
  40. <Cascader
  41. className='barconfig-yxais'
  42. value={chartDesigner.barConfig.yAxis}
  43. allowClear={true}
  44. placeholder='请选择...'
  45. options={columns.map((c, i)=>{
  46. // return (<Option key={i} value={c.name}>{c.label}</Option>)
  47. return {
  48. value: c.name,
  49. label: c.label,
  50. children: [{
  51. value: 'sum',
  52. label: '累计'
  53. }, {
  54. value: 'avg',
  55. label: '平均值'
  56. }, {
  57. value: 'median',
  58. label: '中位数'
  59. }, {
  60. value: 'count',
  61. label: '计数'
  62. }, {
  63. value: 'distinctCount',
  64. label: '不重复计数'
  65. }, {
  66. value: 'max',
  67. label: '最大值'
  68. }, {
  69. value: 'min',
  70. label: '最小值'
  71. }]
  72. }
  73. })}
  74. onChange={(value) => {
  75. dispatch({ type: 'chartDesigner/barConfig/setYAxis', yAxis: value});
  76. }}
  77. displayRender={(label, selectedOptions) => {
  78. let menu = selectedOptions.length > 0 ? <Menu
  79. defaultSelectedKeys={['sum']}
  80. selectedKeys={['sum']}
  81. selectable={true}
  82. >
  83. {selectedOptions[0].children.map((c, i) => {
  84. return <Menu.Item data-value={c.value} key={i} onClick={(e) => {
  85. let value = e.domEvent.target.getAttribute('data-value');
  86. dispatch({ type: 'chartDesigner/barConfig/setYAxis', yAxis: [chartDesigner.barConfig.yAxis[0], value] });
  87. e.domEvent.stopPropagation();
  88. }}>{c.label}</Menu.Item>
  89. })}
  90. </Menu>: [];
  91. let tag = selectedOptions.length > 0 ? <Dropdown
  92. trigger={['click']}
  93. overlay={menu}
  94. >
  95. <Tag size='small' onClick={(e) => {e.stopPropagation()}}>{label[1]}</Tag>
  96. </Dropdown>
  97. : null;
  98. return <div>
  99. {tag}
  100. <span>{label[0]}</span>
  101. </div>
  102. }}
  103. >
  104. </Cascader>
  105. </FormItem>
  106. </Form>
  107. );
  108. }
  109. function mapStateToProps({ present: { chartDesigner } }) {
  110. return { chartDesigner: chartDesigner }
  111. }
  112. export default connect(mapStateToProps)(barConfigForm);