SplitLineSection.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import React from 'react'
  2. import { Row, Col, Checkbox, Select} from 'antd'
  3. const Option = Select.Option
  4. import ColorPicker from 'components/ColorPicker'
  5. import { PIVOT_CHART_LINE_STYLES } from 'app/globalConstants'
  6. const styles = require('../Workbench.less')
  7. export interface ISplitLineConfig {
  8. showHorizontalLine: boolean
  9. horizontalLineStyle: 'solid' | 'dashed' | 'dotted'
  10. horizontalLineSize: string
  11. horizontalLineColor: string
  12. showVerticalLine: boolean
  13. verticalLineStyle: 'solid' | 'dashed' | 'dotted'
  14. verticalLineSize: string
  15. verticalLineColor: string
  16. }
  17. interface ISplitLineSectionProps {
  18. title: string
  19. config: ISplitLineConfig
  20. onChange: (prop: string, value: any) => void
  21. }
  22. export class SplitLineSection extends React.PureComponent<ISplitLineSectionProps, {}> {
  23. private checkboxChange = (prop) => (e) => {
  24. this.props.onChange(prop, e.target.checked)
  25. }
  26. private selectChange = (prop) => (value) => {
  27. this.props.onChange(prop, value)
  28. }
  29. private colorChange = (prop) => (color) => {
  30. this.props.onChange(prop, color)
  31. }
  32. public render () {
  33. const { title, config } = this.props
  34. const {
  35. showHorizontalLine,
  36. horizontalLineStyle,
  37. horizontalLineSize,
  38. horizontalLineColor,
  39. showVerticalLine,
  40. verticalLineStyle,
  41. verticalLineSize,
  42. verticalLineColor
  43. } = config
  44. const lineStyles = PIVOT_CHART_LINE_STYLES.map((l) => (
  45. <Option key={l.value} value={l.value}>{l.name}</Option>
  46. ))
  47. return (
  48. <div className={styles.paneBlock}>
  49. <h4>{title}</h4>
  50. <div className={styles.blockBody}>
  51. <Row gutter={8} type="flex" align="middle" className={styles.blockRow}>
  52. <Col span={24}>
  53. <Checkbox
  54. checked={showHorizontalLine}
  55. onChange={this.checkboxChange('showHorizontalLine')}
  56. >
  57. 显示横向分隔线
  58. </Checkbox>
  59. </Col>
  60. </Row>
  61. <Row gutter={8} type="flex" align="middle" className={styles.blockRow}>
  62. <Col span={10}>
  63. <Select
  64. placeholder="样式"
  65. className={styles.blockElm}
  66. value={horizontalLineStyle}
  67. onChange={this.selectChange('horizontalLineStyle')}
  68. >
  69. {lineStyles}
  70. </Select>
  71. </Col>
  72. <Col span={10}>
  73. <Select
  74. placeholder="粗细"
  75. className={styles.blockElm}
  76. value={horizontalLineSize}
  77. onChange={this.selectChange('horizontalLineSize')}
  78. >
  79. {Array.from(Array(10), (o, i) => (
  80. <Option key={i} value={`${i + 1}`}>{i + 1}</Option>
  81. ))}
  82. </Select>
  83. </Col>
  84. <Col span={4}>
  85. <ColorPicker
  86. value={horizontalLineColor}
  87. onChange={this.colorChange('horizontalLineColor')}
  88. />
  89. </Col>
  90. </Row>
  91. <Row gutter={8} type="flex" align="middle" className={styles.blockRow}>
  92. <Col span={24}>
  93. <Checkbox
  94. checked={showVerticalLine}
  95. onChange={this.checkboxChange('showVerticalLine')}
  96. >
  97. 显示纵向分隔线
  98. </Checkbox>
  99. </Col>
  100. </Row>
  101. <Row gutter={8} type="flex" align="middle" className={styles.blockRow}>
  102. <Col span={10}>
  103. <Select
  104. placeholder="样式"
  105. className={styles.blockElm}
  106. value={verticalLineStyle}
  107. onChange={this.selectChange('verticalLineStyle')}
  108. >
  109. {lineStyles}
  110. </Select>
  111. </Col>
  112. <Col span={10}>
  113. <Select
  114. placeholder="粗细"
  115. className={styles.blockElm}
  116. value={verticalLineSize}
  117. onChange={this.selectChange('verticalLineSize')}
  118. >
  119. {Array.from(Array(10), (o, i) => (
  120. <Option key={i} value={`${i + 1}`}>{i + 1}</Option>
  121. ))}
  122. </Select>
  123. </Col>
  124. <Col span={4}>
  125. <ColorPicker
  126. value={verticalLineColor}
  127. onChange={this.colorChange('verticalLineColor')}
  128. />
  129. </Col>
  130. </Row>
  131. </div>
  132. </div>
  133. )
  134. }
  135. }
  136. export default SplitLineSection