/** * 新增数据源-选择数据链接 */ import React from 'react' import { Layout, Form, Row, Col, Input, Icon, Menu, Dropdown, Divider, Upload, message, Card } from 'antd' import { connect } from 'dva' import DataConnectBox from './dataConnectBox' import EmptyContent from '../common/emptyContent/index' import './dataConnectConfig.less' const { Content } = Layout const CardGrid = Card.Grid const UploadDragger = Upload.Dragger const Search = Input.Search class DataConnectConfig extends React.Component { constructor(props) { super(props); this.state = { filterLabel: '', } } componentDidMount() { const { dispatch } = this.props; dispatch({ type: 'dataConnect/fetchList' }); } generateCard() { const { dataConnect, dataSourceDetail, dispatch } = this.props; const { filterLabel: stateFilterLabel } = this.state; const reg = new RegExp('([+ \\- & | ! ( ) { } \\[ \\] ^ \" ~ * ? : ( ) \/])', 'g'); // 需要转义的字符 let filterLabel = stateFilterLabel ? (stateFilterLabel + '').replace(new RegExp('(\\\\)', 'g'), '\\$1').replace(reg, '\\$1') : ''; // 添加转义符号 let filterReg = new RegExp('(' + filterLabel + '){1}', 'ig'); let cards = dataConnect.list.map(l => { let o = Object.assign({}, l); return o.code === dataSourceDetail.connectCode || ((o['name'] + '').search(filterReg) > -1) ? o : null }).filter(a => a!==null).map( (l, i) => ( { // 选中项设置 dispatch({ type: 'dataConnect/setSelected', selected: l }); dispatch({ type: 'dataSourceDetail/setFields', fields: [ { name: 'connectCode', value: l.code }, { name: 'dbType', value: l.dbType }, { name: 'address', value: l.address }, { name: 'port', value: l.port }, { name: 'dbName', value: l.dbName }, { name: 'userName', value: l.userName }, { name: 'password', value: l.password }, { name: 'target', value: '' }, { name: 'columns', value: [] }, { name: 'notice', value: '' }, ] }); }} > { (filterLabel) ? ((l.name || '').split(new RegExp(`(${filterLabel})`, 'i')).map((fragment, i) => { return ( fragment.toLowerCase().replace(new RegExp('(\\\\)', 'g'), '\\$1').replace(reg, '\\$1') === filterLabel.toLowerCase() ? {fragment} : fragment ) } )) : l.name }
} actions={[
{l.dbType === 'file' ? :
{l.dbType[0].toUpperCase() + l.dbType.slice(1)}
}
, ]} >
{ // 选中项设置 dispatch({ type: 'dataConnect/setSelected', selected: l }); dispatch({ type: 'dataSourceDetail/setFields', fields: [ { name: 'connectCode', value: l.code }, { name: 'connectName', value: l.name }, { name: 'dbType', value: l.dbType }, { name: 'address', value: l.address }, { name: 'port', value: l.port }, { name: 'dbName', value: l.dbName }, { name: 'userName', value: l.userName }, { name: 'password', value: l.password }, { name: 'target', value: '' }, { name: 'columns', value: [] }, { name: 'notice', value: '' }, ] }); }} > { /** TODO 这里只考虑了数据库的展示情况,需要兼容展示文件类型的数据链接 */ } {l.address} {l.userName}
)) if(cards.length === 0) { return } return cards; } generateOperationMenu = (item) => { const { dataConnect, dispatch } = this.props; return { dispatch({ type: 'dataConnect/setNewModel', model: item || dataConnect.selected }); dispatch({ type: 'dataConnect/setNewModelFields', fields: [ { name: 'visibleBox', value: true }, { name: 'boxOperation', value: 'view' } ] }); }}> 详情 } render() { const { dataSourceDetail, dispatch } = this.props; const { filterLabel } = this.state; return (
{ dataSourceDetail.type==='file'?(
选择文件 { const trueType = file.type === 'application/vnd.ms-excel'; if (!trueType) { message.error('选择文件格式错误!'); } const trueSize = file.size / 1024 / 1024 < 30; if (!trueSize) { message.error('选择文件过大!'); } return trueType && trueSize; }} onChange={(info) => { const file = info.file; let fileList = info.fileList; fileList = fileList.slice(-1); // 只保留最后一个 if (info.file.status !== 'uploading') { const trueType = file.type === 'application/vnd.ms-excel'; const trueSize = file.size / 1024 / 1024 < 30; if(!trueType || !trueSize) { fileList = []; } } if (file.status === 'done') { message.success(`${file.name} 文件上传成功`); } else if (file.status === 'error') { fileList = []; message.error(`${file.name} 文件上传失败.`); } dispatch({ type: 'dataSourceDetail/setField', name: 'fileList', value: fileList }) }} >

点击选择或拖动文件到该区域

仅支持上传单个30MB以内EXCEL/CSV格式文件

):( { this.setState({ filterLabel: e.target.value }) // dispatch({ type: 'dataConnect/setFilterLabel', label: e.target.value }); }} /> }>
{ this.generateCard() }
) }
); } } export default connect(({ present: { dataSourceDetail, dataConnect } }) => ({ dataSourceDetail, dataConnect }))(DataConnectConfig);