table.jsx 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import React from 'react'
  2. import { connect } from 'dva'
  3. import { Collapse, Menu, Form, Checkbox, Row, Col, Select, Radio, Input, InputNumber } from 'antd'
  4. const SubMenu = Menu.SubMenu;
  5. const MenuItemGroup = Menu.ItemGroup;
  6. // const TableStyle = ({ chartDesigner, formItemLayout, dispatch }) => {
  7. class TableStyle extends React.Component {
  8. constructor(props) {
  9. super(props);
  10. this.state = {
  11. layoutColumn: null,
  12. formatColumn: null,
  13. colorColumn: null,
  14. }
  15. }
  16. changeAligns = (value) => {
  17. const { chartDesigner, dispatch } = this.props;
  18. const { layoutColumn } = this.state;
  19. const { styleConfig } = chartDesigner;
  20. const { table } = (styleConfig || { aligns: {} });
  21. let aligns = table ? (table.aligns || {}) : {};
  22. if(!layoutColumn) {
  23. return;
  24. }else if(layoutColumn.name === 'all') {
  25. chartDesigner.dataViewConfig.viewColumns.map(c => {
  26. aligns[c.name] = value
  27. });
  28. }else {
  29. aligns[layoutColumn.name] = value
  30. }
  31. dispatch({ type: 'chartDesigner/setField', name: 'styleConfig', value: { ...styleConfig, table: { ...table, aligns }} });
  32. }
  33. changeWidths = (e) => {
  34. const { chartDesigner, dispatch } = this.props;
  35. const { layoutColumn } = this.state;
  36. const { styleConfig } = chartDesigner;
  37. const { table} = styleConfig;
  38. let widths = table ? (table.widths || {}) : {};
  39. if(!layoutColumn) {
  40. return;
  41. }else if(layoutColumn.name === 'all') {
  42. chartDesigner.dataViewConfig.viewColumns.map(c => {
  43. widths[c.name] = e.target.value
  44. });
  45. }else {
  46. widths[layoutColumn.name] = e.target.value
  47. }
  48. dispatch({ type: 'chartDesigner/setField', name: 'styleConfig', value: { ...styleConfig, table: { ...table, widths }} });
  49. }
  50. changeThousandsSeparator = (e) => {
  51. const { chartDesigner, dispatch } = this.props;
  52. const { formatColumn } = this.state;
  53. const { styleConfig } = chartDesigner;
  54. const { table} = styleConfig;
  55. const checked = e.target.checked;
  56. let thousandsSeparatorColumns = table ? (table.thousandsSeparatorColumns || []) : [];
  57. if(!formatColumn) {
  58. return;
  59. }else {
  60. let idx = thousandsSeparatorColumns.findIndex(s => s === formatColumn.name);
  61. console.log(idx);
  62. checked ? (idx !== -1 ? (void 0) : thousandsSeparatorColumns.push(formatColumn.name)) : thousandsSeparatorColumns.splice(idx, 1);
  63. }
  64. dispatch({ type: 'chartDesigner/setField', name: 'styleConfig', value: { ...styleConfig, table: { ...table, thousandsSeparatorColumns }} });
  65. }
  66. createColumnSelector = (type, all) => {
  67. const { chartDesigner } = this.props;
  68. let columns = all ? [{
  69. name: 'all',
  70. label: '全部'
  71. }].concat(chartDesigner.dataViewConfig.viewColumns) : chartDesigner.dataViewConfig.viewColumns;
  72. return <Select
  73. allowClear
  74. showSearch
  75. filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
  76. onChange={(value) => {
  77. let o = {};
  78. let c = columns.find(c => c.name === value);
  79. o[type] = c;
  80. this.setState(o);
  81. }}
  82. >
  83. {columns.map((c, i)=>{
  84. return <Select.Option key={c.name} value={c.name}>{c.label}</Select.Option>
  85. })}
  86. </Select>
  87. }
  88. render() {
  89. const { chartDesigner, formItemLayout, dispatch } = this.props;
  90. const { layoutColumn, formatColumn, colorColumn } = this.state;
  91. const { styleConfig } = chartDesigner;
  92. console.log(styleConfig);
  93. const { table } = (styleConfig || { aligns: {} });
  94. return (
  95. <Collapse defaultActiveKey={['layout', 'format', 'color']}>
  96. <Collapse.Panel header='布局' key='layout'>
  97. <Form>
  98. <Form.Item label='显示序号' {...formItemLayout}>
  99. <Checkbox checked={table ? table.visibleIndex : false} onChange={(e) => {
  100. const checked = e.target.checked;
  101. dispatch({ type: 'chartDesigner/setField', name: 'styleConfig', value: { ...styleConfig, table: { ...table, visibleIndex: checked }} });
  102. }}/>
  103. </Form.Item>
  104. <Form.Item label='边框线' {...formItemLayout}>
  105. <Checkbox onChange={(e) => {
  106. const checked = e.target.checked;
  107. dispatch({ type: 'chartDesigner/setField', name: 'styleConfig', value: { ...styleConfig, table: { ...table, bordered: checked }} });
  108. }}/>
  109. </Form.Item>
  110. <Form.Item label='选择列' {...formItemLayout}>
  111. {this.createColumnSelector('layoutColumn', true)}
  112. </Form.Item>
  113. {layoutColumn && <Form.Item label='文字对齐' {...formItemLayout}>
  114. <Select onChange={this.changeAligns} >
  115. <Select.Option value='left'>靠左</Select.Option>
  116. <Select.Option value='center'>居中</Select.Option>
  117. <Select.Option value='right'>靠右</Select.Option>
  118. </Select>
  119. </Form.Item>}
  120. {layoutColumn && <Form.Item label='列宽' {...formItemLayout}>
  121. <InputNumber onBlur={this.changeWidths}/>
  122. </Form.Item>}
  123. </Form>
  124. </Collapse.Panel>
  125. <Collapse.Panel header='格式' key='format'>
  126. <Form>
  127. <Form.Item label='选择列' {...formItemLayout}>
  128. {this.createColumnSelector('formatColumn', false)}
  129. </Form.Item>
  130. {formatColumn && formatColumn.type === 'scale' && <Form.Item label='千分位' {...formItemLayout}>
  131. <Checkbox onChange={this.changeThousandsSeparator}/>
  132. </Form.Item>}
  133. {formatColumn && formatColumn.type === 'scale' && <Form.Item label='小数位数' {...formItemLayout}>
  134. <Select>
  135. <Select.Option value='0'>无</Select.Option>
  136. <Select.Option value='1'>1</Select.Option>
  137. <Select.Option value='2'>2</Select.Option>
  138. <Select.Option value='3'>3</Select.Option>
  139. <Select.Option value='4'>4</Select.Option>
  140. <Select.Option value='5'>5</Select.Option>
  141. </Select>
  142. </Form.Item>}
  143. {formatColumn && <Form.Item label='前缀' {...formItemLayout}>
  144. <Select>
  145. <Select.Option value='0'>无</Select.Option>
  146. <Select.Option value='1'>¥</Select.Option>
  147. <Select.Option value='2'>$</Select.Option>
  148. <Select.Option value='3'>%</Select.Option>
  149. <Select.Option value='4'>℃</Select.Option>
  150. <Select.Option value='5'>℉</Select.Option>
  151. </Select>
  152. </Form.Item>}
  153. </Form>
  154. </Collapse.Panel>
  155. <Collapse.Panel header='颜色' key='color'>
  156. <Form>
  157. <Form.Item label='交替色' {...formItemLayout}>
  158. <Radio.Group>
  159. <Radio value={1}>行交替</Radio>
  160. <Radio value={2}>列交替</Radio>
  161. </Radio.Group>
  162. </Form.Item>
  163. </Form>
  164. </Collapse.Panel>
  165. </Collapse>
  166. )
  167. }
  168. }
  169. export default connect(({ present: { chartDesigner } }) => ({ chartDesigner }))(TableStyle);