import React from 'react' import '../../models/dashboardDesigner' import { Modal, Radio, Row, Col, Table, Input, message } from 'antd' import { connect } from 'dva' import { dateFormat } from '../../utils/baseUtils' import 'braft-editor/dist/braft.css' import './chooseChartBox.less' const { Search } = Input class ChooseChartBox extends React.Component { constructor(props) { super(props); this.state = { filterLabel: '', selectedRecord: -1, screenWidth: document.documentElement.clientWidth || document.body.clientWidth, screenHeight: document.documentElement.clientHeight || document.body.clientHeight }; } componentDidMount() { const { dispatch } = this.props; dispatch({ type: 'chart/fetchList' }); window.addEventListener('resize', this.onWindowResize); } onWindowResize = () => { this.setState({ screenWidth: document.documentElement.clientWidth || document.body.clientWidth, screenHeight: document.documentElement.clientHeight || document.body.clientHeight }); } changeSelected = (record) => { this.setState({ selectedRecord: record }); } okHandler = (model) => { const { selectedRecord } = this.state; const { dispatch, hideBox } = this.props; if(selectedRecord) { dispatch({ type: 'dashboardDesigner/addChart', chart: selectedRecord }); hideBox(); }else { message.warning('未选中图表'); } } handleChange = (content) => { } handleRawChange = (rawContent) => { } static editorProps = { height: 300, contentFormat: 'raw', initialContent: '

Hello World!

', onChange: () => {}, onRawChange: () => {}, image: true, // 开启图片插入功能? } render() { const { visibleBox, hideBox, dashboardDesigner, chart } = this.props; const { selectedRecord, screenWidth, screenHeight } = this.state; const tableBodyWidth = screenWidth * 0.8 - 10 - 10 - 18; const tableBodyHeight = screenHeight * 0.8 - 65 - 53 - 38 - 130; const tableRowHeight = 38; const reg = new RegExp('([+ \\- & | ! ( ) { } \\[ \\] ^ \" ~ * ? : ( ) \/])', 'g'); // 需要转义的字符 let filterLabel = this.state.filterLabel.replace(new RegExp('(\\\\)', 'g'), '\\$1').replace(reg, '\\$1'); // 添加转义符号 const columns = [{ title: '选择', key: 'selected', width: 50, render: (text, record) => { // return i.chartCode===record.code)!==-1 || selectedRecord.findIndex(s => s.code === record.code) !== -1 } disabled={dashboardDesigner.items.findIndex(i => i.chartCode===record.code)!==-1}/> return i.chartCode===record.code)!==-1 || selectedRecord.code === record.code } disabled={dashboardDesigner.items.findIndex(i => i.chartCode===record.code)!==-1} /> } }, { title: '名称', dataIndex: 'name', key: 'name', width: 100, render: (text, record) => { return
{ filterLabel ? (text.split(new RegExp(`(${filterLabel})`, 'i')).map((fragment, i) => { return ( fragment.toLowerCase().replace(new RegExp('(\\\\)', 'g'), '\\$1').replace(reg, '\\$1') === filterLabel.toLowerCase() ? {fragment} : fragment ) } )) : text }
} }, { title: '创建人', dataIndex: 'creator', key: 'creator', width: 100 }, { title: '创建时间', dataIndex: 'createTime', key: 'createTime', width: 120, render: (text) => dateFormat(new Date(text), 'yyyy-MM-dd') }, { title: '说明', dataIndex: 'description', key: 'description', width: 200, render: (text, record) => { return ( { filterLabel ? ((text || '').split(new RegExp(`(${filterLabel})`, 'i')).map((fragment, i) => { return ( fragment.toLowerCase().replace(new RegExp('(\\\\)', 'g'), '\\$1').replace(reg, '\\$1') === filterLabel.toLowerCase() ? {fragment} : fragment ) } )) : text } ) } }] return ( 选择图表 { this.setState({ filterLabel: e.target.value }); }} /> } visible={visibleBox} onOk={() => {this.setState({ filterLabel: '', selectedRecord: -1 });this.okHandler()}} onCancel={() => {this.setState({ filterLabel: '', selectedRecord: -1 });hideBox()}} maskClosable={false} destroyOnClose={true} > ({ ...c, width: 100 }))} dataSource={chart.list.map((l, i) => ({ ...l, key: i})).filter(l => { let regLabel = new RegExp('(' + filterLabel + '){1}', 'ig'); return (l.name || '').search(regLabel) !== -1 || (l.description || '').search(regLabel) !== -1; })} size='small' scroll={{ x: columns ? columns.length * 100 : tableBodyWidth, y: tableBodyHeight }} pagination={{ defaultPageSize: Math.floor(tableBodyHeight/tableRowHeight) || 10 }} onRow={(record) => { return { onClick: () => { if(dashboardDesigner.items.findIndex(i => i.chartCode===record.code)===-1) { this.changeSelected(record); } } }; }} /> ) } } function mapStateToProps({ present: { dashboardDesigner, chart } }) { return { dashboardDesigner, chart }; } export default connect(mapStateToProps)(ChooseChartBox)