|
|
@@ -1,5 +1,5 @@
|
|
|
import React from 'react'
|
|
|
-import { Layout, Row, Col, Button, Icon, Card, Tooltip, Select } from 'antd'
|
|
|
+import { Layout, Row, Col, Button, Icon, Card, Tooltip, Select, Menu, Dropdown } from 'antd'
|
|
|
import { connect } from 'dva'
|
|
|
import DeleteBox from '../common/deleteBox/deleteBox'
|
|
|
import EmptyContent from '../common/emptyContent/index'
|
|
|
@@ -38,11 +38,11 @@ class DataConnect extends React.Component {
|
|
|
const pWidth = parent.offsetWidth; // 父级容器宽度
|
|
|
const pPadding = 10 + 10; // 父级容器左右padding
|
|
|
const cWidth = 160; // 每个卡片宽度
|
|
|
- const cMargin = 5 + 5; // 每个卡片左右margin
|
|
|
+ const cMargin = 8 + 8; // 每个卡片左右margin
|
|
|
const pTrueWidth = pWidth - pPadding; // 父容器实际可用宽度
|
|
|
const cTrueWidth = cWidth + cMargin; // 卡片实际占用宽度
|
|
|
const count = Math.floor(pTrueWidth/cTrueWidth); // 每行最大卡片数量
|
|
|
- const cardBodyWidth = count * cTrueWidth;
|
|
|
+ const cardBodyWidth = (count - 1) * cTrueWidth; // 可能有滚动条,减少一个
|
|
|
|
|
|
cardBodyWidth > 0 ? cardBody.style.width = cardBodyWidth + 'px' : void(0);
|
|
|
}
|
|
|
@@ -73,6 +73,43 @@ class DataConnect extends React.Component {
|
|
|
this.setState({ visibleGroupMenu: flag });
|
|
|
}
|
|
|
|
|
|
+ generateOperationMenu = (l) => {
|
|
|
+ const { dispatch } = this.props;
|
|
|
+
|
|
|
+ return (
|
|
|
+ <Menu className='menu-operation'>
|
|
|
+ <Menu.Item onClick={()=>{
|
|
|
+ dispatch({ type: 'dataConnect/setSelected', selected: l });
|
|
|
+ dispatch({ type: 'dataConnect/setNewModel', model: l });
|
|
|
+ dispatch({ type: 'dataConnect/setNewModelFields', fields: [
|
|
|
+ { name: 'visibleBox', value: true },
|
|
|
+ { name: 'boxOperation', value: 'modify' }
|
|
|
+ ] });
|
|
|
+ }}>
|
|
|
+ <Icon type="info-circle-o" />属性设置
|
|
|
+ </Menu.Item>
|
|
|
+ <Menu.Item onClick={(e) => {
|
|
|
+ dispatch({ type: 'dataConnect/setSelected', selected: l });
|
|
|
+ dispatch({ type: 'dataConnect/setNewModel', model: { ...l, code: null } });
|
|
|
+ dispatch({ type: 'dataConnect/setNewModelFields', fields: [
|
|
|
+ { name: 'visibleBox', value: true },
|
|
|
+ { name: 'boxOperation', value: 'create' }
|
|
|
+ ] });
|
|
|
+ }}>
|
|
|
+ <Icon type="copy" />复制新增
|
|
|
+
|
|
|
+ </Menu.Item>
|
|
|
+ <Menu.Item onClick={(e) => {
|
|
|
+ dispatch({ type: 'dataConnect/setSelected', selected: l });
|
|
|
+ this.setState({ visibleDeleteBox: true})
|
|
|
+ }}>
|
|
|
+ <Icon type="delete" />删除
|
|
|
+
|
|
|
+ </Menu.Item>
|
|
|
+ </Menu>
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
generateCard() {
|
|
|
const { dataConnect, dispatch } = this.props;
|
|
|
const reg = new RegExp('([+ \\- & | ! ( ) { } \\[ \\] ^ \" ~ * ? : ( ) \/])', 'g'); // 需要转义的字符
|
|
|
@@ -130,35 +167,12 @@ class DataConnect extends React.Component {
|
|
|
</Row>
|
|
|
}
|
|
|
actions={[
|
|
|
- <Tooltip placement='bottom' title="属性设置">
|
|
|
- <Icon type="info-circle-o" onClick={() => {
|
|
|
- // 选中项设置
|
|
|
- dispatch({ type: 'dataConnect/setSelected', selected: l });
|
|
|
- dispatch({ type: 'dataConnect/setNewModel', model: l });
|
|
|
- dispatch({ type: 'dataConnect/setNewModelFields', fields: [
|
|
|
- { name: 'visibleBox', value: true },
|
|
|
- { name: 'boxOperation', value: 'modify' }
|
|
|
- ] });
|
|
|
- }}/>
|
|
|
- </Tooltip>,
|
|
|
- <Tooltip placement='bottom' title="复制新增">
|
|
|
- <Icon type="copy" onClick={() => {
|
|
|
- // 选中项设置
|
|
|
- dispatch({ type: 'dataConnect/setSelected', selected: l });
|
|
|
- dispatch({ type: 'dataConnect/setNewModel', model: { ...l, code: null } });
|
|
|
- dispatch({ type: 'dataConnect/setNewModelFields', fields: [
|
|
|
- { name: 'visibleBox', value: true },
|
|
|
- { name: 'boxOperation', value: 'create' }
|
|
|
- ] });
|
|
|
- }}/>
|
|
|
- </Tooltip>,
|
|
|
- <Tooltip placement='bottom' title="删除">
|
|
|
- <Icon type="delete" onClick={() => {
|
|
|
- // 选中项设置
|
|
|
- dispatch({ type: 'dataConnect/setSelected', selected: l });
|
|
|
- this.setState({ visibleDeleteBox: true})
|
|
|
- }}/>
|
|
|
- </Tooltip>,
|
|
|
+ <div>
|
|
|
+ {l.dbType === 'file' ? <Icon type='file' /> : <div><Icon type='database' />{l.dbType[0].toUpperCase() + l.dbType.slice(1)}</div>}
|
|
|
+ </div>,
|
|
|
+ <Dropdown overlay={this.generateOperationMenu(l)} trigger={['click']}>
|
|
|
+ <Icon style={{ fontSize: '24px' }} type="ellipsis" theme="outlined" />
|
|
|
+ </Dropdown>
|
|
|
]}
|
|
|
>
|
|
|
<div className='content'
|
|
|
@@ -172,6 +186,7 @@ class DataConnect extends React.Component {
|
|
|
] });
|
|
|
}}
|
|
|
>
|
|
|
+ { /** TODO 这里只考虑了数据库的展示情况,需要兼容展示文件类型的数据链接 */ }
|
|
|
<Row className='address'>
|
|
|
{ filterLabel && filterItem.name === 'address' ?
|
|
|
((l.address || '').split(new RegExp(`(${filterLabel})`, 'i')).map((fragment, i) => {
|