import React from 'react' import '../../models/dashboardDesigner' import { Modal, Radio, Row, Col, Table, Input, Select, message, DatePicker } from 'antd' import { connect } from 'dva' import moment from 'moment' import 'braft-editor/dist/braft.css' import './chooseChartBox.less' const { Search } = Input const { RangePicker } = DatePicker 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); } componentWillUnmount() { window.removeEventListener('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('未选中图表'); } } generateFilterItems = () => { const { filterItems } = this.props.chart; return filterItems.map(t => {t.label}); } render() { const { main, visibleBox, hideBox, dashboardDesigner, chart, dispatch } = 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 { filterItem } = dashboardDesigner; 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 && filterItem.name === 'name' ? (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: 'creatorName', key: 'creatorName', width: 100, render: (text, record) => { return
{ filterLabel && filterItem.name === 'creatorName' ? (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: 'createTime', key: 'createTime', width: 120, render: (text) => moment(text).format('YYYY-MM-DD') }, { title: '说明', dataIndex: 'description', key: 'description', width: 200, render: (text, record) => { return ( { filterLabel && filterItem.name === 'description' ? ((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 ( 选择图表 {filterItem.type === 'date' ? { //清空时间时 if(e.length === 0){ this.setState({ filterLabel: '' }); } }} onOk={e => { //解析时间格式 let start = e[0] let end = e[1] let time = start._d.getTime() + "#" + end._d.getTime() this.setState({ filterLabel: time }); }} > : { 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) => { let o = Object.assign({}, l); if(filterItem.type === 'date') { if(filterLabel===""){ return { ...o, key: i }; }else if(filterLabel.indexOf('#')>-1){ let start = filterLabel.split('#')[0] let end = filterLabel.split('#')[1] let nowTime = new Date(o[filterItem.name]).getTime(); if(nowTime>=start && nowTime<=end){ return { ...o, key: i}; } return null }else{ return null } }else { return ((o[filterItem.name] + '').search(new RegExp('(' + filterLabel + '){1}', 'ig')) > -1) ? { ...o, key: i } : null } }).filter(a => a!==null && a.creatorCode === main.currentUser.code)} 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: { main, dashboardDesigner, chart } }) { return { main, dashboardDesigner, chart }; } export default connect(mapStateToProps)(ChooseChartBox)