Commit 4a234509 by zhaochengxiang

模型改成服务

parent a9565736
...@@ -78,6 +78,6 @@ ...@@ -78,6 +78,6 @@
"last 1 safari version" "last 1 safari version"
] ]
}, },
"proxy": "http://139.198.126.96:8089", "proxy": "http://139.198.127.28:8089",
"homepage": "http://myhost/data-govern" "homepage": "http://myhost/data-govern"
} }
...@@ -11,9 +11,9 @@ import * as datamodel from './datamodel'; ...@@ -11,9 +11,9 @@ import * as datamodel from './datamodel';
import * as assetmanage from './assetmanage'; import * as assetmanage from './assetmanage';
import * as tag from './tag'; import * as tag from './tag';
import * as msd from './msd'; import * as msd from './msd';
import * as psd from './psd'; import * as pds from './pds';
const funcs = Connect({ user, datamodel, map, assetmanage, datasource, tag, msd, psd }) const funcs = Connect({ user, datamodel, map, assetmanage, datasource, tag, msd, pds })
function* request(args) { function* request(args) {
const { type, payload, callback, error } = args.args; const { type, payload, callback, error } = args.args;
......
import * as psd from '../service/psd'; import * as pds from '../service/pds';
import { call } from 'redux-saga/effects'; import { call } from 'redux-saga/effects';
export function* refreshCatalog(payload) { export function* refreshCatalog(payload) {
return yield call(psd.refreshCatalog, payload); return yield call(pds.refreshCatalog, payload);
} }
export function* loadStateCatalog(payload) { export function* loadStateCatalog(payload) {
return yield call(psd.loadStateCatalog, payload); return yield call(pds.loadStateCatalog, payload);
} }
export function* saveCatalog(payload) { export function* saveCatalog(payload) {
return yield call(psd.saveCatalog, payload); return yield call(pds.saveCatalog, payload);
} }
export function* deleteCatalog(payload) { export function* deleteCatalog(payload) {
return yield call(psd.deleteCatalog, payload); return yield call(pds.deleteCatalog, payload);
} }
export function* upDownCatalog(payload) { export function* upDownCatalog(payload) {
return yield call(psd.upDownCatalog, payload); return yield call(pds.upDownCatalog, payload);
} }
export function* getServices(payload) { export function* getServices(payload) {
return yield call(psd.getServices, payload); return yield call(pds.getServices, payload);
}
export function* getStateServices(payload) {
return yield call(pds.getStateServices, payload)
}
export function* searchService(payload) {
return yield call(pds.searchService, payload)
} }
export function* deleteService(payload) { export function* deleteService(payload) {
return yield call(psd.deleteService, payload); return yield call(pds.deleteService, payload);
} }
export function* recatalogService(payload) { export function* recatalogService(payload) {
return yield call(psd.recatalogService, payload); return yield call(pds.recatalogService, payload);
} }
export function* nextState(payload) { export function* nextState(payload) {
return yield call(psd.nextState, payload); return yield call(pds.nextState, payload);
}
export function* getCheckoutService(payload) {
return yield call(pds.getCheckoutService, payload)
}
export function* getServiceDigest(payload) {
return yield call(pds.getServiceDigest, payload)
} }
\ No newline at end of file
...@@ -47,10 +47,6 @@ export const routes = [ ...@@ -47,10 +47,6 @@ export const routes = [
name: 'msd-manage', name: 'msd-manage',
text: '主数据管理' text: '主数据管理'
}, },
{
name: 'data-service',
text: '数据服务管理'
},
] ]
} }
]; ];
......
...@@ -24,6 +24,14 @@ export function getServices(payload) { ...@@ -24,6 +24,14 @@ export function getServices(payload) {
return GetJSON("/pdataservice/pdsCURD/getCurrentDataServiceCatalog", payload) return GetJSON("/pdataservice/pdsCURD/getCurrentDataServiceCatalog", payload)
} }
export function getStateServices(payload) {
}
export function searchService(payload) {
}
export function deleteService(payload) { export function deleteService(payload) {
return PostJSON("/pdataservice/pdsCURD/deleteDataService", payload); return PostJSON("/pdataservice/pdsCURD/deleteDataService", payload);
} }
...@@ -36,6 +44,14 @@ export function nextState(payload) { ...@@ -36,6 +44,14 @@ export function nextState(payload) {
return GetJSON("/pdataservice/pdsCURD/nextState", payload); return GetJSON("/pdataservice/pdsCURD/nextState", payload);
} }
export function getCheckoutService(payload) {
}
export function getServiceDigest(payload) {
}
......
...@@ -388,13 +388,13 @@ export function getTextWidth(text, font='14px tabular-nums') { ...@@ -388,13 +388,13 @@ export function getTextWidth(text, font='14px tabular-nums') {
} }
export function getDataModelerRole(user) { export function getDataModelerRole(user) {
if ((user?.roles||[]).indexOf('ROLE_dataModeler_admin') !== -1) { // if ((user?.roles||[]).indexOf('ROLE_dataModeler_admin') !== -1) {
return DataModelerRoleAdmin; // return DataModelerRoleAdmin;
} else if ((user?.roles||[]).indexOf('ROLE_dataModeler_user') !== -1) { // } else if ((user?.roles||[]).indexOf('ROLE_dataModeler_user') !== -1) {
return DataModelerRoleUser; // return DataModelerRoleUser;
} else if ((user?.roles||[]).indexOf('ROLE_dataModeler_reader') !== -1) { // } else if ((user?.roles||[]).indexOf('ROLE_dataModeler_reader') !== -1) {
return DataModelerRoleReader; // return DataModelerRoleReader;
} // }
return DataModelerRoleAdmin; return DataModelerRoleAdmin;
} }
import { useMemo, useState } from 'react';
import classNames from 'classnames';
import { ResizableBox } from 'react-resizable';
import { CaretLeftOutlined, CaretRightOutlined } from '@ant-design/icons';
import Tree from './tree'
import '../DataMaster/Define/index.less';
const FC = (props) => {
const [collapse, setCollapse] = useState(false);
const classes = useMemo(() => {
return classNames('data-master', {
'data-master-collapse': collapse,
});
}, [collapse]);
const onCollapseClick = () => {
setCollapse(!collapse);
}
return (
<div className={classes}>
<ResizableBox
className='left-wrap'
width={230}
height={Infinity}
axis='x'
minConstraints={[230, Infinity]} maxConstraints={[Infinity, Infinity]}
>
<Tree />
</ResizableBox>
<div className='left-collapse-wrap'>
<div className='left-collapse' onClick={onCollapseClick}>
{ collapse ? <CaretRightOutlined /> : <CaretLeftOutlined /> }
</div>
</div>
<div className='right-wrap'>
</div>
</div>
)
}
export default FC;
\ No newline at end of file
import React, { useState, useEffect, useContext } from "react";
import { Tooltip, Tree, Modal, Spin, Dropdown, Menu, Button, AutoComplete } from "antd";
import { PlusOutlined, SyncOutlined, ImportOutlined, UnorderedListOutlined, ReloadOutlined } from '@ant-design/icons';
import classnames from 'classnames';
import { useContextMenu, Menu as RcMenu, Item as RcItem } from "react-contexify";
import { dispatch } from '../../../model';
import { showMessage, getQueryParam, highlightSearchContentByTerms } from '../../../util';
import UpdateTreeItemModal from './update';
import '../Model/Component/ModelTree.less';
import 'react-contexify/dist/ReactContexify.css';
const { Option } = AutoComplete;
const MENU_ID = 'service-tree';
const viewModes = [
{ key: 'dir', name: '目录视角' },
{ key: 'state', name: '服务状态视角' }
];
const FC = (props) => {
const { refrence, onSelect, onViewChange } = props;
const { show } = useContextMenu({
id: MENU_ID,
});
const [ loading, setLoading ] = useState(false);
const [ treeData, setTreeData ] = useState(null);
const [ item, setItem ] = useState(null);
const [ rootId, setRootId ] = useState('');
const [ visible, setVisible ] = useState(false);
const [ type, setType ] = useState(null);
const [ expandedKeys, setExpandedKeys ] = useState([]);
const [ autoExpandParent, setAutoExpandParent ] = useState(false);
const [ viewSelectedKey, setViewSelectedKey ] = useState(viewModes[0].key);
const [ currentRightClickDir, setCurrentRightClickDir ] = useState({});
const [ searchKeyword, setSearchKeyword ] = useState('');
const [ dataList, setDataList ] = useState([]);
const [ options, setOptions ] = useState([]);
const [modal, contextHolder] = Modal.useModal();
useEffect(() => {
getDirTreeData();
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
const getDirTreeData = (defaultSelectedId='') => {
setLoading(true);
dispatch({
type: 'psd.refreshCatalog',
callback: data => {
data.key = data.id||'';
data.title = data.name||'';
data.children = data.subCatalogs||[];
let defaultItem = null;
function recursion(subCatalogs) {
if ((subCatalogs||[]).length===0) return;
(subCatalogs||[]).forEach(catalog=> {
catalog.key = catalog.id||'';
catalog.title = catalog.name||'';
catalog.children = catalog.subCatalogs||[];
if (catalog.id === defaultSelectedId) {
defaultItem = catalog;
}
recursion(catalog.subCatalogs);
})
}
recursion(data.subCatalogs);
setLoading(false);
setTreeData(data.subCatalogs||[]);
setRootId(data.id||'');
const _dataList = [];
generateList(data.subCatalogs||[], _dataList);
setDataList(_dataList);
if (defaultItem) {
const expandedKeys = _dataList
.map(item => {
if (item.key.indexOf(defaultSelectedId) > -1) {
return getParentKey(item.key, data.subCatalogs||[]);
}
return null;
})
.filter((item, i, self) => item && self.indexOf(item) === i);
setExpandedKeys([...expandedKeys, defaultSelectedId]);
setAutoExpandParent(true);
setItem(defaultItem);
onSelect && onSelect(defaultItem.key||'');
} else if (!refrence) {
const currentItem = (data.subCatalogs||[]).length>0?data.subCatalogs[0]: null;
setItem(currentItem);
if (currentItem && currentItem.key) {
setExpandedKeys([currentItem?.key]);
}
onSelect && onSelect(currentItem?(currentItem.key||''):'');
}
},
error: () => {
setLoading(false);
}
})
}
const getStateTreeData = () => {
setLoading(true);
dispatch({
type: 'psd.loadStateCatalog',
callback: data => {
setLoading(false);
let _treeData = data?.subCatalogs||[];
_treeData.forEach(item => {
item.title = item.cnName;
item.key = item.id;
})
setTreeData(_treeData);
setItem(_treeData.length>0?_treeData[0]:{});
onSelect && onSelect(_treeData.length>0?_treeData[0].key:'');
},
error: () => {
setLoading(false);
}
});
}
const generateList = (treeData, list, path = null) => {
for (let i = 0; i < treeData.length; i++) {
const node = treeData[i];
const { id, name } = node;
const currentPath = path ? `${path}/${name}` : name;
list.push({ key: id , title: currentPath, value: currentPath });
if (node.children) {
generateList(node.children, list, currentPath);
}
}
};
const getParentKey = (key, tree) => {
let parentKey;
for (let i = 0; i < tree.length; i++) {
const node = tree[i];
if (node.children) {
if (node.children.some(item => item.id === key)) {
parentKey = node.id;
} else if (getParentKey(key, node.children)) {
parentKey = getParentKey(key, node.children);
}
}
}
return parentKey;
};
const onExpand = (expandedKeys) => {
setExpandedKeys(expandedKeys);
setAutoExpandParent(false);
};
const onViewClick = ({ key }) => {
if (viewSelectedKey && viewSelectedKey===key ) return;
setViewSelectedKey(key);
setSearchKeyword('');
onViewChange && onViewChange(key);
if (key === 'dir') {
getDirTreeData();
} else {
getStateTreeData();
}
}
const onTreeSelect = (keys,data) => {
if ((keys||[]).length === 0) {
return;
}
const _item = {...data.selectedNodes[0]||[]};
setItem(_item);
onSelect && onSelect(_item.key);
}
const add = () => {
setVisible(true);
setType('add');
}
const update = () => {
setVisible(true);
setType('update');
}
const refresh = () => {
if (viewSelectedKey==='dir') {
getDirTreeData(item?.key||'');
} else {
getStateTreeData(item?.key||'');
}
}
const sync = () => {
getDirTreeData(item?.key||'', null, 'load');
}
const moveNode = (steps) => {
setLoading(true);
dispatch({
type: 'psd.upDownCatalog',
payload: {
modelCatalogId: currentRightClickDir.id,
steps
},
callback: () => {
showMessage('success', (steps===-1)?'上移目录成功':'下移目录成功');
getDirTreeData(item.id);
},
error: () => {
setLoading(false);
}
});
}
const deleteNode = () => {
modal.confirm({
title: '提示!',
content: '删除目录会删除相关的模型,您确定删除吗?',
onOk: () => {
setLoading(true);
dispatch({
type: 'psd.deleteCatalog',
payload: {
params: {
easyDataModelerCatalogId: currentRightClickDir.id
}
},
callback: () => {
showMessage('success', '删除目录成功');
if (item && currentRightClickDir && item.id===currentRightClickDir.id) {
getDirTreeData();
} else {
getDirTreeData(item.id);
}
},
error: () => {
setLoading(false);
}
});
}
});
}
const onUpdateTreeItemModalOk = (id, updateItem) => {
setVisible(false);
getDirTreeData(id);
}
const onUpdateTreeItemModalCancel = () => {
setVisible(false);
}
const treeDirectoryChanged = (did) => {
let defaultItem = null;
function recursion(subCatalogs) {
if ((subCatalogs||[]).length===0) return;
(subCatalogs||[]).forEach(catalog=> {
catalog.key = catalog.id||'';
catalog.title = catalog.name||'';
catalog.children = catalog.subCatalogs||[];
if (catalog.id === did) {
defaultItem = catalog;
}
recursion(catalog.subCatalogs);
})
}
recursion(treeData||[]);
if (defaultItem) {
const expandedKeys = dataList
.map(item => {
if (item.key.indexOf(did) > -1) {
return getParentKey(item.key, treeData||[]);
}
return null;
})
.filter((item, i, self) => item && self.indexOf(item) === i);
setExpandedKeys([...expandedKeys, did]);
setAutoExpandParent(true);
setItem(defaultItem);
onSelect && onSelect(defaultItem.key||'');
}
}
const onAutoCompleteSearch = (searchText) => {
setOptions(
!searchText ? [] : (dataList||[]).filter(item => item.title.indexOf(searchText)!==-1),
);
};
const onAutoCompleteChange = (value) => {
setSearchKeyword(value);
}
const onAutoCompleteSelect = (value, option) => {
const paths = value.split('/');
setSearchKeyword(paths[paths.length-1]);
treeDirectoryChanged(option.key);
};
const displayMenu = (e) => {
show(e, {
position: {
x: e.clientX + 30,
y: e.clientY - 10
}
});
}
const exportMenu = (
<Menu selectedKeys={[viewSelectedKey]} onClick={onViewClick}>
{
viewModes && viewModes.map(item => {
return (
<Menu.Item key={item.key} value={item.key} >
<div style={{ textAlign: 'center' }}>
{item.name}
</div>
</Menu.Item>
)
})
}
</Menu>
);
const classes = classnames('model-tree', {
'model-tree-recatalog': (refrence === 'recatalog')
});
return (
<div className={classes}>
{
!refrence && <div
className='p-3'
style={{
display: 'flex',
borderBottom: "1px solid #EFEFEF",
height: 57,
alignItems: 'center',
}}
>
<Dropdown overlay={exportMenu} placement="bottomLeft">
<Tooltip title="视角">
<UnorderedListOutlined className='default' style={{ fontSize:16,cursor:'pointer' }} />
</Tooltip>
</Dropdown>
{
(viewSelectedKey==='dir') && (
<Tooltip title="新增目录" className='ml-6'>
<PlusOutlined className='default' onClick={add} style={{ fontSize:16,cursor:'pointer' }} />
</Tooltip>
)
}
<Tooltip title="刷新目录" className='ml-6'>
<Button type='text' icon={<ReloadOutlined className='default' />} size='small' onClick={refresh} />
</Tooltip>
</div>
}
<div className='p-3'>
<Spin spinning={loading} >
{
(viewSelectedKey==='dir') && <AutoComplete
allowClear
value={searchKeyword}
style={{ marginBottom: 10, width: '100%' }}
onSelect={onAutoCompleteSelect}
onSearch={onAutoCompleteSearch}
onChange={onAutoCompleteChange}
onClear={() => { setSearchKeyword(''); }}
>
{
(options||[]).map((item, index) => {
return (
<Option key={item.key} value={item.value}>
<div style={{ whiteSpace: 'normal' }}>
{highlightSearchContentByTerms(item.title, [searchKeyword])}
</div>
</Option>
);
})
}
</AutoComplete>
}
<Tree
onExpand={onExpand}
expandedKeys={expandedKeys}
autoExpandParent={autoExpandParent}
showLine
showIcon={false}
onSelect={onTreeSelect}
treeData={treeData}
selectedKeys={[item?item.key:'']}
titleRender={(nodeData) => {
return <span title={nodeData?.remark||''}>{nodeData?.name||''}</span>;
}}
onRightClick={({event, node}) => {
if (viewSelectedKey==='dir') {
setCurrentRightClickDir(node);
displayMenu(event);
}
}}
/>
</Spin>
</div>
<UpdateTreeItemModal
visible={visible}
type={type}
item={(type==='add')?item:currentRightClickDir}
rootId={rootId}
onOk={onUpdateTreeItemModalOk}
onCancel={onUpdateTreeItemModalCancel}
/>
{
(refrence!=='recatalog') && <RcMenu id={MENU_ID}>
<RcItem id="edit" onClick={update}>
修改目录
</RcItem>
<RcItem id="up" onClick={() => { moveNode(-1); }}>
上移目录
</RcItem>
<RcItem id="down" onClick={() => { moveNode(1); }}>
下移目录
</RcItem>
<RcItem id="delete" onClick={deleteNode}>
删除目录
</RcItem>
</RcMenu>
}
{contextHolder}
</div>
);
}
export default FC;
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import { Modal, Form, Input, Radio } from 'antd';
import { dispatchLatest } from '../../../model';
class UpdateTreeItemForm extends React.Component {
constructor(props){
super(props);
this.state = {
radioDisable: false
}
}
componentDidMount() {
this.radioState();
}
componentDidUpdate(preProps, preState) {
const { item } = this.props;
if (item!==preProps.item) {
this.radioState();
}
}
radioState = () => {
const { item } = this.props;
this.setState({ radioDisable: item? false: true })
}
render() {
const { type, form } = this.props;
const { radioDisable } = this.state;
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 18 },
},
};
return (
<Form
{...formItemLayout}
form={form}
>
{
type==='add'&&<Form.Item label="目录类型" name="action">
<Radio.Group disabled={radioDisable} >
<Radio value='root'>根目录</Radio>
<Radio value='sub'>子目录</Radio>
</Radio.Group>
</Form.Item>
}
<Form.Item
label="名称"
name="name"
rules={[{ required: true, message: '请输入名称!' }]}
>
<Input />
</Form.Item>
<Form.Item
label="描述"
name="remark"
rules={[{ required: true, message: '请输入描述!' }]}
>
<Input />
</Form.Item>
</Form>
);
}
}
const FC = (props) => {
const { onOk, type, item, onCancel, visible, rootId } = props;
const [ confirmLoading, setConfirmLoading ] = useState(false);
const [form] = Form.useForm();
useEffect(() => {
if (visible) {
let _action = '';
if (type === 'add') {
_action = item ? 'sub' : 'root';
}
form.setFields([{ name: 'name', errors: [] }, { name: 'remark', errors: [] }]);
if (type === 'add') {
form.setFieldsValue({ action: _action, name: '', remark: '' });
} else {
form.setFieldsValue({ action: '', name: item?item.name:'', remark: item?item.remark:'' });
}
}
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [visible])
const handleOk = async () => {
setConfirmLoading(true);
try {
const values = await form.validateFields();
let payload = null;
if (type === 'add' && values.action==='root') {
payload = {
name: values.name||'',
remark: values.remark||'',
parentId: rootId
};
} else if (type === 'add') {
payload = {
name: values.name||'',
remark: values.remark||'',
parentId: item.id
};
} else {
payload = {
...item,
name: values.name||'',
remark: values.remark||'',
}
}
dispatchLatest({
type: 'psd.saveCatalog',
payload: {
data: payload
},
callback: id => {
setConfirmLoading(false);
if (onOk) {
onOk(id, payload);
}
},
error: () => {
setConfirmLoading(false);
}
});
} catch (errInfo) {
setConfirmLoading(false);
}
}
return (
<Modal
forceRender
confirmLoading={confirmLoading}
visible={visible}
title={type==='add'?"新增目录":"更新目录"}
onOk={handleOk}
onCancel={() => {
setConfirmLoading(false);
onCancel && onCancel();
}}
>
<UpdateTreeItemForm form={form} item={item} type={type} />
</Modal>
);
}
export default FC;
\ No newline at end of file
import React, { useState, useEffect, useRef, useMemo } from "react"; import React, { useState, useEffect, useRef } from "react";
import { Tooltip, Modal, Table, Typography } from 'antd'; import { Tooltip, Modal, Pagination, Table, Typography } from 'antd';
import LocalStorage from 'local-storage'; import { DownOutlined, UpOutlined } from '@ant-design/icons';
import SmoothScroll from 'smooth-scroll';
import classnames from 'classnames';
import { Resizable } from 'react-resizable';
import { useContextMenu, Menu as RcMenu, Item as RcItem } from "react-contexify";
import ResizeObserver from 'rc-resize-observer';
import DataGrid, { defaultPageSize } from '../../VirtualTable';
import { dispatch } from '../../../../model'; import { dispatch } from '../../../../model';
import { showMessage, getQueryParam, isSzseEnv, formatDate, getDataModelerRole } from '../../../../util'; import { showMessage, getQueryParam, paginate, isSzseEnv, formatDate, getDataModelerRole } from '../../../../util';
import { AnchorId, AnchorTimestamp, Action, CatalogId, ModelerId, DataModelerRoleReader } from '../../../../util/constant'; import { AnchorId, AnchorTimestamp, Action, CatalogId, ModelerId, DataModelerRoleReader } from '../../../../util/constant';
import ExpandedModelTable from "./ExpandedModelTable";
// import Tag from "../../Tag"; // import Tag from "../../Tag";
import { useContextMenu, Menu as RcMenu, Item as RcItem } from "react-contexify";
import './ModelTable.less'; import './ModelTable.less';
import 'react-contexify/dist/ReactContexify.css'; import 'react-contexify/dist/ReactContexify.css';
const { Paragraph, Text } = Typography; const { Text } = Typography;
const { Column } = Table;
const ModelNameColumn = (props) => { const ModelNameColumn = (props) => {
const { text, record, detailItem } = props; const { text, record, detailItem } = props;
...@@ -49,7 +52,6 @@ const ModelNameColumn = (props) => { ...@@ -49,7 +52,6 @@ const ModelNameColumn = (props) => {
if (data.digest) { if (data.digest) {
_textComponent = <div style={{ width: 500, maxHeight: 300, overflow: 'auto' }}> _textComponent = <div style={{ width: 500, maxHeight: 300, overflow: 'auto' }}>
<Table <Table
rowKey='name'
dataSource={data.digest.attributeDigests||[]} dataSource={data.digest.attributeDigests||[]}
columns={cols} columns={cols}
loading={false} loading={false}
...@@ -73,7 +75,7 @@ const ModelNameColumn = (props) => { ...@@ -73,7 +75,7 @@ const ModelNameColumn = (props) => {
onVisibleChange={(visible) => { onVisibleChange={(visible) => {
if (visible && !record.digest) { if (visible && !record.digest) {
dispatch({ dispatch({
type: 'datamodel.getDataModelDigest', type: 'pds.getServiceDigest',
payload: { payload: {
id: record.id id: record.id
}, },
...@@ -92,213 +94,382 @@ const ModelNameColumn = (props) => { ...@@ -92,213 +94,382 @@ const ModelNameColumn = (props) => {
); );
} }
const ModelTable = (props) => { const ResizeableHeaderCell = props => {
const { data, onChange, onItemAction, onSelect, onHistory, catalogId, keyword, onAutoCreateTable, offset = null, view, modelState, user, selectModelerIds, visibleColNames } = props; const { onResize, width, onClick, ...restProps } = props;
const [ selectedRowKeys, setSelectedRowKeys ] = useState([]); if (!width) {
const [ expandedSelectedRowKeys, setExpandedSelectedRowKeys ] = useState([]); return <th {...restProps} />;
const [ currentItem, setCurrentItem ] = useState(null); }
const [ scrollRowIndex, setScrollRowIndex ] = useState();
const expandedDataMapRef = useRef(new Map()); return (
const shouldScrollRef = useRef(false); <Resizable
width={width}
height={0}
handle={
<span
className="react-resizable-handle"
onClick={(e) => {
e.stopPropagation();
}}
/>
}
onResize={onResize}
draggableOpts={{ enableUserSelectHack: false }}
>
<th
onClick={onClick}
{...restProps}
/>
</Resizable>
);
};
const anchorId = getQueryParam(AnchorId, props?.location?.search); const ModelTable = (props) => {
const anchorTimestamp = getQueryParam(AnchorTimestamp, props?.location?.search);
const gridRef = useRef();
const [modal, contextHolder] = Modal.useModal(); const { data, onChange, onItemAction, onSelect, onHistory, catalogId, keyword, onAutoCreateTable, offset = null, modelId = null, modelPid = null, view, selectModelerIds, onSubSelect, modelState, user } = props;
const MENU_ID = (((modelId||'') !== '') ? `model-table-contextmenu-${modelId}` : 'model-table-contextmenu');
const MENU_ID = 'model-table-contextmenu';
const { show } = useContextMenu({ const { show } = useContextMenu({
id: MENU_ID, id: MENU_ID,
}); });
const [ tableWidth, setTableWidth ] = useState(0);
const [ selectedRowKeys, setSelectedRowKeys ] = useState([]);
const [ subSelectedRowKeys, setSubSelectedRowKeys ] = useState([]);
// const [ mouseEnterKey, setMouseEnterKey ] = useState(null);
const [ sortRule, setSortRule ] = useState(null);
const [ filterData, setFilterData ] = useState([]);
const [ subData, setSubData ] = useState([]);
const cols = [ const cols = [
{ {
name: '序号', title: '序号',
key: 'index', dataIndex: 'key',
render: (text, record, index) => {
return (index+1).toString();
},
width: 60, width: 60,
sortable: false, ellipsis: true,
resizable: true,
}, },
{ {
name: '模型名称', title: '服务名称',
key: 'name', dataIndex: 'name',
width: isSzseEnv?360:160, width: isSzseEnv?360:160,
sortable: true, ellipsis: true,
resizable: true, sorter: true,
formatter(props) { sortDirections: ['ascend', 'descend'],
return (<ModelNameColumn text={props.row.name} record={props.row} detailItem={detailItem} />); render: (text, record, index) => {
return (<ModelNameColumn text={text} record={record} detailItem={detailItem} />);
} }
}, },
{ {
name: '中文名称', title: '中文名称',
key: 'cnName', dataIndex: 'cnName',
width: isSzseEnv?420:160, width: isSzseEnv?420:160,
sortable: true, ellipsis: true,
resizable: true, sorter: true,
formatter(props) { sortDirections: ['ascend', 'descend'],
return ( render: (text, _, __) => {
<Tooltip title={props.row.cnName||''}>
<Text ellipsis={true}>{props.row.cnName||''}</Text>
</Tooltip>
)
}
},
{
name: '路径',
key: 'path',
width: 120,
sortable: true,
resizable: true,
formatter(props) {
return ( return (
<Tooltip title={props.row.path||''}> <Tooltip title={text||''}>
<Text ellipsis={true}>{props.row.path||''}</Text> <Text ellipsis={true}>{text||''}</Text>
</Tooltip> </Tooltip>
) )
} }
}, },
{ {
name: '状态', title: '状态',
key: 'state', dataIndex: 'state',
width: 100, width: 100,
sortable: true, ellipsis: true,
resizable: true, sorter: true,
formatter(props) { sortDirections: ['ascend', 'descend'],
render: (_, record) => {
let color = ''; let color = '';
if (props.row.state?.id === '1') { if (record?.state?.id === '1') {
color = '#DE7777'; color = '#DE7777';
} else if (props.row.state?.id === '2') { } else if (record?.state?.id === '2') {
color = '#779BDE'; color = '#779BDE';
} else if (props.row.state?.id === '4') { } else if (record?.state?.id === '4') {
color = '#77DEBF'; color = '#77DEBF';
} }
return ( return (
<span> <span>
<span style={{ display: 'inline-block', width: 10, height: 10, borderRadius: 5, marginRight: 5, backgroundColor: color }}></span> <span style={{ display: 'inline-block', width: 10, height: 10, borderRadius: 5, marginRight: 5, backgroundColor: color }}></span>
<span>{props.row.state?.cnName||''}</span> <span>{record?.state?.cnName||''}</span>
</span> </span>
); );
} }
}, },
{ {
name: '创建人', title: '创建人',
key: 'editor', dataIndex: 'editor',
width: 100, width: 100,
sortable: true, ellipsis: true,
resizable: true, sorter: true,
sortDirections: ['ascend', 'descend'],
}, },
{ {
name: '版本号', title: '版本号',
key: 'modifiedTs', dataIndex: 'modifiedTs',
width: 170, width: 170,
sortable: true, ellipsis: true,
resizable: true, sorter: true,
formatter(props) { sortDirections: ['ascend', 'descend'],
return `V_${formatDate(props.row.modifiedTs)}`; render: (_,record) => {
return `V_${formatDate(record.modifiedTs)}`;
} }
}, },
// {
// title: '标签',
// dataIndex: 'tag',
// width: 200,
// onCell: (record) => ({
// onMouseEnter: event => {
// setMouseEnterKey(record.id);
// },
// onMouseLeave: event => {
// setMouseEnterKey(null);
// },
// }),
// render: (_,record) => {
// return (
// record.id===mouseEnterKey?<Tag styleType='complex' id={record.id} />:<Tag id={record.id} />
// );
// }
// },
{ {
name: '模型描述', title: '服务描述',
key: 'remark', dataIndex: 'remark',
sortable: true, ellipsis: true,
resizable: true, sorter: true,
formatter(props) { sortDirections: ['ascend', 'descend'],
render: (text, _, __) => {
return ( return (
<Tooltip title={props.row.remark||''} overlayClassName='tooltip-common'> <Tooltip title={text||''} overlayClassName='tooltip-common'>
<Text ellipsis={true}>{props.row.remark||''}</Text> <Text ellipsis={true}>{text||''}</Text>
</Tooltip> </Tooltip>
) );
} }
}, },
]; ];
const columns = useMemo(() => { const pathColumn = {
let newCols = [...cols]; title: '路径',
if ((visibleColNames||[]).length > 0) { dataIndex: 'path',
newCols = newCols.filter(col => visibleColNames.indexOf(col.name)!==-1 || col.name==='序号'); width: 120,
ellipsis: true,
if (visibleColNames.indexOf('模型描述') === -1) { sorter: true,
newCols[newCols.length-1].width = null; sortDirections: ['ascend', 'descend'],
} render: (text, _, __) => {
return (
<Tooltip title={text||''}>
<Text ellipsis={true}>{text||''}</Text>
</Tooltip>
)
} }
};
return newCols; const [ columns, setColumns ] = useState([]);
//eslint-disable-next-line react-hooks/exhaustive-deps const [ includePathColumns, setIncludePathColumns ] = useState([]);
}, [visibleColNames]) const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } );
const [ currentItem, setCurrentItem ] = useState(null);
const summarySelectedCount = useMemo(() => { const { pageNum, pageSize } = pagination;
let newSelectedRowKeys = Array.from(new Set([...selectedRowKeys, ...expandedSelectedRowKeys]));
const ids = []; const [modal, contextHolder] = Modal.useModal();
(data||[]).forEach(item => {
ids.push(item.id);
if (item.alreadyCheckedOut) {
ids.push(item.checkedOutId);
}
})
newSelectedRowKeys = (newSelectedRowKeys||[]).filter(key => ids.indexOf(key) !== -1); const anchorId = getQueryParam(AnchorId, props.location.search);
const anchorTimestamp = getQueryParam(AnchorTimestamp, props.location.search);
return (newSelectedRowKeys||[]).length; const shouldScrollRef = useRef(false);
}, [selectedRowKeys, expandedSelectedRowKeys, data])
useEffect(() => { useEffect(() => {
if (data && gridRef.current) {
setTimeout(() => {
gridRef.current?.scrollToRow(0);
}, 100)
}
}, [data])
useEffect(() => { if ((modelId||'') !== '') {
window?.addEventListener("storage", modelEventChange); window?.addEventListener("storage", modelEventChange);
return () => { return () => {
window?.removeEventListener("storage", modelEventChange); window?.removeEventListener("storage", modelEventChange);
} }
}
//eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
}, []) }, [])
useEffect(() => { useEffect(() => {
setSelectedRowKeys([]);
setExpandedSelectedRowKeys([]); if ((modelId||'') === '') {
onSelect && onSelect([]); onSelect && onSelect([]);
if ((keyword||'') === '') {
if (offset !== null) {
const _pageNum = parseInt(offset/pageSize + ((offset%pageSize===0)?0:1));
setPagination({...pagination, pageNum: _pageNum });
} else {
setPagination({...pagination, pageNum: 1 });
}
} else {
setPagination({...pagination, pageNum: 1 });
}
} else {
getCheckoutDataModel();
}
//eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
}, [ catalogId, keyword, offset, modelState ]); }, [ catalogId, keyword, offset, modelState ]);
useEffect(() => { useEffect(() => {
if ((selectModelerIds||[]).length===0) { if ((selectModelerIds||[]).length === 0) {
setSelectedRowKeys([]); setSelectedRowKeys([]);
setExpandedSelectedRowKeys([]); setSubSelectedRowKeys([]);
} }
}, [selectModelerIds]) }, [selectModelerIds])
useEffect(() => { useEffect(() => {
if ((anchorId||'') !== '') { if ((anchorId||'') !== '') {
shouldScrollRef.current = true; shouldScrollRef.current = true;
} }
//eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
}, [anchorTimestamp]) }, [anchorTimestamp])
useEffect(() => { useEffect(() => {
if (shouldScrollRef.current && gridRef.current && offset!==null && (data||[]).length>0) { if (shouldScrollRef.current) {
setScrollRowIndex(offset); SmoothScroll('a[href*="#"]');
setTimeout(() => {
gridRef.current?.scrollToRow((offset-1)%defaultPageSize); const _id = getQueryParam(AnchorId, props.location.search);
var scroll = new SmoothScroll();
var anchor = document.querySelector(`#data-model-${_id}`);
if (anchor) {
scroll.animateScroll(anchor);
shouldScrollRef.current = false; shouldScrollRef.current = false;
}, 300)
} }
}
})
useEffect(() => {
const newData = [...data];
if (sortRule) {
if (sortRule.order === 'ascend') {
newData.sort((item1, item2) => {
if (sortRule.field === 'state') {
return (item1[sortRule.field]?.cnName||'').localeCompare(item2[sortRule.field]?.cnName||'');
} else if (sortRule.field === 'modifiedTs') {
return formatDate(item1[sortRule.field]).localeCompare(formatDate(item2[sortRule.field]));
}
return item1[sortRule.field].localeCompare(item2[sortRule.field]);
})
} else if (sortRule.order === 'descend') {
newData.sort((item1, item2) => {
if (sortRule.field === 'state') {
return (item2[sortRule.field]?.cnName||'').localeCompare(item1[sortRule.field]?.cnName||'');
} else if (sortRule.field === 'modifiedTs') {
return formatDate(item2[sortRule.field]).localeCompare(formatDate(item1[sortRule.field]));
}
return item2[sortRule.field].localeCompare(item1[sortRule.field]);
}) })
}
}
const _data = paginate(newData||[], pageNum, pageSize);
setFilterData(_data);
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [data, pagination, sortRule])
useEffect(() => {
if (tableWidth>0 && columns.length===0) {
let newColumns = [], newIncludePathColumns = [];
let excludePathCols = [...cols];
if ((modelId||'') !== '') {
excludePathCols = cols.filter(item => item.dataIndex!=='key');
}
excludePathCols.forEach((column, index) => {
const newColumn = {...column};
if (!newColumn.width) {
const rowWidth = (excludePathCols.reduce((preVal, col) => (col.width?col.width:0) + preVal, 0)) + 97; //展开50 勾选32 滚动条15
if (tableWidth - rowWidth > 200) {
newColumn.width = tableWidth - rowWidth;
} else {
newColumn.width = 200;
}
}
newColumns.push(newColumn);
});
const includePathCols = [...cols];
includePathCols.splice(3, 0, pathColumn);
includePathCols.forEach((column, index) => {
const newColumn = {...column};
if (!newColumn.width) {
const rowWidth = (includePathCols.reduce((preVal, col) => (col.width?col.width:0) + preVal, 0)) + 97;
if (tableWidth - rowWidth > 200) {
newColumn.width = tableWidth-rowWidth;
} else {
newColumn.width = 200;
}
}
newIncludePathColumns.push(newColumn);
});
setColumns([ ...newColumns, <Column key='auto' />]);
setIncludePathColumns([ ...newIncludePathColumns, <Column key='auto' />]);
}
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [ tableWidth ])
const modelEventChange = (e) => { const modelEventChange = (e) => {
if (e.key === 'modelChange') { if (e.key === 'modelChange') {
expandedDataMapRef.current.delete(LocalStorage.get('modelId')); getCheckoutDataModel();
}
}
const getCheckoutDataModel = () => {
dispatch({
type: 'pds.getCheckoutService',
payload: {
id: modelPid
},
callback: data => {
setSubData(data?[data]:[]);
},
error: () => {
} }
})
} }
// const getDataModel = () => {
// dispatch({
// type: 'datamodel.getDataModel',
// payload: {
// id: modelId
// },
// callback: data => {
// setSubData(data?[data]:[]);
// },
// error: () => {
// }
// })
// }
const editItem = (record) => { const editItem = (record) => {
onItemAction && onItemAction(record, 'edit'); onItemAction && onItemAction(record, 'edit');
} }
...@@ -314,17 +485,18 @@ const ModelTable = (props) => { ...@@ -314,17 +485,18 @@ const ModelTable = (props) => {
const stateAction = (record, action) => { const stateAction = (record, action) => {
modal.confirm({ modal.confirm({
title: '提示!', title: '提示!',
content: `您确定要${action.cnName||''}模型吗?`, content: `您确定要${action.cnName||''}服务吗?`,
onOk: () => { onOk: () => {
dispatch({ dispatch({
type: 'datamodel.nextState', type: 'pds.nextState',
payload: { payload: {
easyDataModelerDataModelId: record.id, easyDataModelerDataModelId: record.id,
actionId: action.id actionId: action.id
}, },
callback: () => { callback: () => {
showMessage('success', `模型${action.cnName||''}成功`); showMessage('success', `服务${action.cnName||''}成功`);
if ((modelId||'') === '') {
onChange && onChange(); onChange && onChange();
const index = selectedRowKeys.findIndex((rowKey) => rowKey === record.id); const index = selectedRowKeys.findIndex((rowKey) => rowKey === record.id);
...@@ -334,6 +506,14 @@ const ModelTable = (props) => { ...@@ -334,6 +506,14 @@ const ModelTable = (props) => {
setSelectedRowKeys(newSelectedRowKeys); setSelectedRowKeys(newSelectedRowKeys);
onSelect && onSelect(newSelectedRowKeys); onSelect && onSelect(newSelectedRowKeys);
} }
} else {
if (action.id === '2') {
onChange && onChange();
} else {
getCheckoutDataModel();
}
}
} }
}) })
} }
...@@ -341,21 +521,23 @@ const ModelTable = (props) => { ...@@ -341,21 +521,23 @@ const ModelTable = (props) => {
} }
const deleteItem = (record) => { const deleteItem = (record) => {
modal.confirm({ modal.confirm({
title: '提示!', title: '提示!',
content: '您确定要删除该模型吗?', content: '您确定要删除该服务吗?',
onOk: () => { onOk: () => {
dispatch({ dispatch({
type: 'datamodel.deleteDataModel', type: 'pds.deleteService',
payload: { payload: {
params: { params: {
id: record.id id: record.id
} }
}, },
callback: () => { callback: () => {
showMessage('success', '模型删除成功'); showMessage('success', '服务删除成功');
onChange && onChange(); onChange && onChange();
if ((modelId||'') ==='') {
const index = selectedRowKeys.findIndex((rowKey) => rowKey === record.id); const index = selectedRowKeys.findIndex((rowKey) => rowKey === record.id);
if (index !== -1) { if (index !== -1) {
const newSelectedRowKeys = [...selectedRowKeys]; const newSelectedRowKeys = [...selectedRowKeys];
...@@ -364,6 +546,8 @@ const ModelTable = (props) => { ...@@ -364,6 +546,8 @@ const ModelTable = (props) => {
onSelect && onSelect(newSelectedRowKeys); onSelect && onSelect(newSelectedRowKeys);
} }
} }
}
}) })
} }
}); });
...@@ -375,30 +559,66 @@ const ModelTable = (props) => { ...@@ -375,30 +559,66 @@ const ModelTable = (props) => {
const onSelectChange = keys => { const onSelectChange = keys => {
setSelectedRowKeys(keys); setSelectedRowKeys(keys);
onSelect && onSelect([...expandedSelectedRowKeys, ...keys]);
if ((modelId||'') !== '') {
onSubSelect && onSubSelect(keys, subData[0].id);
} else {
onSelect && onSelect([...subSelectedRowKeys, ...keys]);
}
}; };
const onExpandedTableSelectChange = (keys, id) => { const onSubSelectChange = (keys, id) => {
if ((keys||[]).length === 0) { if ((keys||[]).length === 0) {
const index = expandedSelectedRowKeys.findIndex((rowKey) => rowKey === id); const index = subSelectedRowKeys.findIndex((rowKey) => rowKey === id);
const newExpandedSelectedRowKeys = [...expandedSelectedRowKeys]; const newSubSelectedRowKeys = [...subSelectedRowKeys];
newExpandedSelectedRowKeys.splice(index, 1); newSubSelectedRowKeys.splice(index, 1);
setExpandedSelectedRowKeys(newExpandedSelectedRowKeys); setSubSelectedRowKeys(newSubSelectedRowKeys);
onSelect && onSelect([...newExpandedSelectedRowKeys, ...selectedRowKeys]); onSelect && onSelect([...newSubSelectedRowKeys, ...selectedRowKeys]);
} else { } else {
const newExpandedSelectedRowKeys = [...expandedSelectedRowKeys, id]; const newSubSelectedRowKeys = [...subSelectedRowKeys, id];
setExpandedSelectedRowKeys(newExpandedSelectedRowKeys); onSelect && onSelect([...newSubSelectedRowKeys, ...selectedRowKeys]);
onSelect && onSelect([...newExpandedSelectedRowKeys, ...selectedRowKeys]);
} }
} }
const onExpandedDataMapChange = (id, value) => { const handleResize = index => (e, { size }) => {
expandedDataMapRef.current.set(id, value); let nextColumns = [...columns];
if ((modelId||'')==='' && (view==='state'||(keyword||'')!=='')) {
nextColumns = [...includePathColumns];
}
nextColumns[index] = {
...nextColumns[index],
width: size.width,
};
if ((modelId||'')==='' && (view==='state'||(keyword||'')!=='')) {
setIncludePathColumns(nextColumns);
} else {
setColumns(nextColumns);
}
};
const onTableChange = (pagination, filters, sorter, extra) => {
if (sorter) {
setSortRule(sorter);
} }
}
const rowSelection = {
selectedRowKeys,
onChange: onSelectChange,
hideSelectAll: (modelId||'') !=='',
};
const classes = classnames('model-table', {
'model-table-sub': modelId
});
let expandable = undefined; let expandable = undefined;
if (!modelId) {
let needExpand = false; let needExpand = false;
(data||[]).forEach(record => { (filterData||[]).forEach(record => {
if (record?.alreadyCheckedOut) { if (record?.alreadyCheckedOut) {
needExpand = true; needExpand = true;
} }
...@@ -406,33 +626,32 @@ const ModelTable = (props) => { ...@@ -406,33 +626,32 @@ const ModelTable = (props) => {
if (needExpand) { if (needExpand) {
expandable = { expandable = {
expandedRowHeight: 100, expandedRowRender: record => <ModelTable
rowExpandable: (row) => { modelId={record?.checkedOutId}
return row?.alreadyCheckedOut; modelPid={record?.id}
}, onSubSelect={onSubSelectChange}
expandRowRender: (row) => {
return (
<div style={{ padding: 10 }}>
<ExpandedModelTable
id={row?.checkedOutId}
pid={row?.id}
checked={expandedSelectedRowKeys.indexOf(row?.checkedOutId)!==-1}
onContextMenu={onExpandedTableContextMenu}
dataMap={expandedDataMapRef.current}
visibleColNames={visibleColNames}
onExpandedSelect={onExpandedTableSelectChange}
onExpandedChange={onExpandedDataMapChange}
{...props} {...props}
/> />,
</div> expandIcon: ({ expanded, onExpand, record }) => {
) if (!record?.alreadyCheckedOut) return null;
return expanded ? <UpOutlined style={{ fontSize: 10 }} onClick={e => onExpand(record, e)} /> : <DownOutlined style={{ fontSize: 10 }} onClick={e => onExpand(record, e)} />
},
rowExpandable: record => {
return record?.alreadyCheckedOut;
} }
};
}
} else {
expandable = {
expandedRowRender: record => <></>,
expandIcon: ({ expanded, onExpand, record }) => {
return null;
},
rowExpandable: record => {
return false;
} }
} }
const onExpandedTableContextMenu = (e, item) => {
setCurrentItem(item);
displayMenu(e);
} }
const displayMenu = (e) => { const displayMenu = (e) => {
...@@ -459,13 +678,30 @@ const ModelTable = (props) => { ...@@ -459,13 +678,30 @@ const ModelTable = (props) => {
} }
} }
const mergedColumns = () => {
let newColumns = [...columns];
if ((modelId||'')==='' && (view==='state'||(keyword||'')!=='')) {
newColumns = [...includePathColumns];
}
return (
newColumns.map((col, index) => ({
...col,
onHeaderCell: column => ({
width: column.width,
onResize: handleResize(index),
}),
}))
);
}
let disableEdit = false, disableDelete = false, editTip = '', deleteTip = '', editMenuTitle = '编辑'; let disableEdit = false, disableDelete = false, editTip = '', deleteTip = '', editMenuTitle = '编辑';
if (!currentItem?.editable && currentItem?.state?.id!=='4') { if (!currentItem?.editable && currentItem?.state?.id!=='4') {
disableEdit = true; disableEdit = true;
if (currentItem?.state?.id === '2') { if (currentItem?.state?.id === '2') {
editTip = '待发布的模型不允许编辑'; editTip = '待发布的服务不允许编辑';
} }
} }
...@@ -479,51 +715,65 @@ const ModelTable = (props) => { ...@@ -479,51 +715,65 @@ const ModelTable = (props) => {
disableDelete = true; disableDelete = true;
if (currentItem?.state?.id === '2') { if (currentItem?.state?.id === '2') {
deleteTip = '待发布的模型不允许删除'; deleteTip = '待发布的服务不允许删除';
} else if (currentItem?.state?.id === '4') { } else if (currentItem?.state?.id === '4') {
deleteTip = '已发布的模型不允许删除'; deleteTip = '已发布的服务不允许删除';
} }
} }
return ( return (
<div> <div className={classes}>
<div className='flex' style={{ height: 20, alignItems: 'center', marginBottom: 12 }}> <ResizeObserver
<Paragraph style={{ overflow: 'hidden' }}> onResize={({ width }) => {
<Text className='title-color' ellipsis={true}> setTableWidth(width);
总数: }}
<Text className='text-color'>{(data||[]).length}</Text> >
</Text> <Table
</Paragraph> rowSelection={rowSelection}
<Paragraph style={{ overflow: 'hidden', marginLeft: 20 }}> components={{
<Text className='title-color' ellipsis={true}> header: {
已选数: cell: ResizeableHeaderCell,
<Text className='text-color'>{summarySelectedCount}</Text> }
</Text> }}
</Paragraph> columns={mergedColumns()}
</div> rowKey={'id'}
<DataGrid dataSource={modelId?(subData||[]):(filterData||[])}
gridRef={gridRef} pagination={false}
style={{ blockSize: 'calc(100vh - 94px - 37px - 57px - 24px - 32px)' }} size={modelId?'small':'default'}
checkable onRow={(record, index) => {
columns={columns} return {
// rows={Array.from({ length: 10000 }).map((_, i) => ({ id: `data-model-${record?.id}`,
// name: `test${i}`, style: { backgroundColor: (record?.id===anchorId)?'#e7f7ff':'transparent' },
// }))} onContextMenu: event => {
rows={data||[]} setCurrentItem(record);
rowHeight={51} displayMenu(event);
rowClassName={(row) => { },
return (row.id === anchorId)?'anchor':'' }
}} }}
scrollRowIndex={scrollRowIndex} scroll={{ y: modelId?null:((filterData||[]).length===0?null:'calc(100vh - 121px - 57px - 24px - 38px - 44px)') }}
onChange={onTableChange}
expandable={expandable} expandable={expandable}
onContextMenu={(e, row) => { />
setCurrentItem(row); </ResizeObserver>
displayMenu(e); {
!modelId && (data||[]).length>0 && <Pagination
className="text-center mt-3"
showSizeChanger
showQuickJumper
onChange={(_pageNum, _pageSize) => {
setPagination({ pageNum: _pageNum, pageSize: _pageSize || 20 });
}}
onShowSizeChange={(_pageNum, _pageSize) => {
setPagination({ pageNum: 1, pageSize: _pageSize });
}} }}
selectedRows={selectedRowKeys} current={pageNum}
onSelectedRowsChange={onSelectChange} pageSize={pageSize}
getComparator={getComparator} defaultCurrent={1}
total={(data||[]).length}
pageSizeOptions={[10,20,50]}
showTotal={total => `共 ${total} 条`}
/> />
}
<RcMenu id={MENU_ID}> <RcMenu id={MENU_ID}>
{ {
(getDataModelerRole(user)!==DataModelerRoleReader) && <RcItem id="edit" disabled={disableEdit} onClick={handleItemClick}> (getDataModelerRole(user)!==DataModelerRoleReader) && <RcItem id="edit" disabled={disableEdit} onClick={handleItemClick}>
...@@ -542,11 +792,11 @@ const ModelTable = (props) => { ...@@ -542,11 +792,11 @@ const ModelTable = (props) => {
<RcItem id="history" onClick={handleItemClick}> <RcItem id="history" onClick={handleItemClick}>
历史版本 历史版本
</RcItem> </RcItem>
{ {/* {
(getDataModelerRole(user)!==DataModelerRoleReader) && <RcItem id="copy" onClick={handleItemClick}> (getDataModelerRole(user)!==DataModelerRoleReader) && <RcItem id="copy" onClick={handleItemClick}>
复制模型 复制服务
</RcItem> </RcItem>
} } */}
{ {
getDataModelerRole(user)!==DataModelerRoleReader && (currentItem?.state?.supportedActions||[]).length>0 && currentItem?.state?.supportedActions.map((item, index) => { getDataModelerRole(user)!==DataModelerRoleReader && (currentItem?.state?.supportedActions||[]).length>0 && currentItem?.state?.supportedActions.map((item, index) => {
return ( return (
...@@ -569,26 +819,3 @@ const ModelTable = (props) => { ...@@ -569,26 +819,3 @@ const ModelTable = (props) => {
} }
export default ModelTable; export default ModelTable;
\ No newline at end of file
function getComparator(sortColumn) {
switch (sortColumn) {
case 'name':
case 'cnName':
case 'editor':
case 'remark':
case 'path':
return (a, b) => {
return a[sortColumn].localeCompare(b[sortColumn]);
};
case 'state':
return (a, b) => {
return a[sortColumn].id.localeCompare(b[sortColumn].id);
};
case 'modifiedTs':
return (a, b) => {
return a[sortColumn] - b[sortColumn];
};
default:
throw new Error(`unsupported sortColumn: "${sortColumn}"`);
}
}
...@@ -22,7 +22,7 @@ const viewModes = [ ...@@ -22,7 +22,7 @@ const viewModes = [
}, },
{ {
key: 'state', key: 'state',
name: '模型状态视角' name: '服务状态视角'
} }
]; ];
...@@ -62,10 +62,10 @@ const ModelTree = (props) => { ...@@ -62,10 +62,10 @@ const ModelTree = (props) => {
const id = getQueryParam(AnchorId, props.location?.search||''); const id = getQueryParam(AnchorId, props.location?.search||'');
const did = getQueryParam(AnchorDirId, props.location?.search||''); const did = getQueryParam(AnchorDirId, props.location?.search||'');
useEffect(() => { // useEffect(() => {
getShowSyncAndDomains(); // getShowSyncAndDomains();
//eslint-disable-next-line react-hooks/exhaustive-deps // //eslint-disable-next-line react-hooks/exhaustive-deps
}, []) // }, [])
useEffect(() => { useEffect(() => {
if (refrence === 'recatalog') { if (refrence === 'recatalog') {
...@@ -75,7 +75,7 @@ const ModelTree = (props) => { ...@@ -75,7 +75,7 @@ const ModelTree = (props) => {
onViewChange && onViewChange(viewModes[0].key); onViewChange && onViewChange(viewModes[0].key);
if ((id||'') !== '') { if ((id||'') !== '') {
getDataModelLocationThenGetDirTreeData(); // getDataModelLocationThenGetDirTreeData();
} else if ((did||'') !== '') { } else if ((did||'') !== '') {
getDirTreeData(did); getDirTreeData(did);
} else { } else {
...@@ -105,47 +105,47 @@ const ModelTree = (props) => { ...@@ -105,47 +105,47 @@ const ModelTree = (props) => {
//eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
}, [ keyword ]) }, [ keyword ])
const getShowSyncAndDomains = () => { // const getShowSyncAndDomains = () => {
dispatch({ // dispatch({
type: 'datamodel.isSetRootDomainId', // type: 'datamodel.isSetRootDomainId',
callback: data => { // callback: data => {
if (data === 'false') { // if (data === 'false') {
dispatch({ // dispatch({
type: 'user.getDomains', // type: 'user.getDomains',
callback: _data => { // callback: _data => {
setDomains(_data||[]); // setDomains(_data||[]);
setIsSetRootId(false); // setIsSetRootId(false);
} // }
}); // });
} else { // } else {
setIsSetRootId(true); // setIsSetRootId(true);
} // }
} // }
}); // });
} // }
const getDataModelLocationThenGetDirTreeData = () => { // const getDataModelLocationThenGetDirTreeData = () => {
setLoading(true); // setLoading(true);
dispatch({ // dispatch({
type: 'datamodel.getDataModelLocation', // type: 'datamodel.getDataModelLocation',
payload: { // payload: {
id // id
}, // },
callback: data => { // callback: data => {
getDirTreeData(data.easyDataModelerDataModelCatalogId||'', data.offset); // getDirTreeData(data.easyDataModelerDataModelCatalogId||'', data.offset);
}, // },
error: () => { // error: () => {
setLoading(false); // setLoading(false);
getDirTreeData(); // getDirTreeData();
} // }
}); // });
} // }
const getDirTreeData = (defaultSelectedId='', offset=null, type='refresh') => { const getDirTreeData = (defaultSelectedId='', offset=null, type='refresh') => {
setLoading(true); setLoading(true);
dispatch({ dispatch({
type: (type==='refresh')?'datamodel.refreshDataModelCatalog':'datamodel.loadDataModelCatalog', type: (type==='refresh')?'pds.refreshCatalog':'datamodel.loadDataModelCatalog',
callback: data => { callback: data => {
data.key = data.id||''; data.key = data.id||'';
...@@ -218,7 +218,7 @@ const ModelTree = (props) => { ...@@ -218,7 +218,7 @@ const ModelTree = (props) => {
const getStateTreeData = () => { const getStateTreeData = () => {
setLoading(true); setLoading(true);
dispatch({ dispatch({
type: 'datamodel.loadDataModelStateCatalog', type: 'pds.loadStateCatalog',
callback: data => { callback: data => {
setLoading(false); setLoading(false);
let _treeData = data?.subCatalogs||[]; let _treeData = data?.subCatalogs||[];
...@@ -285,23 +285,23 @@ const ModelTree = (props) => { ...@@ -285,23 +285,23 @@ const ModelTree = (props) => {
} }
} }
const onSyncMenuClick = ({ key }) => { // const onSyncMenuClick = ({ key }) => {
setDomainSelectedKey(key); // setDomainSelectedKey(key);
dispatch({ // dispatch({
type: 'datamodel.setRootDomainId', // type: 'datamodel.setRootDomainId',
payload: { // payload: {
params: { // params: {
domainId: key // domainId: key
} // }
}, // },
callback: () => { // callback: () => {
setIsSetRootId(true); // setIsSetRootId(true);
getDirTreeData('', null, 'load'); // getDirTreeData('', null, 'load');
} // }
}); // });
} // }
const onTreeSelect = (keys,data) => { const onTreeSelect = (keys,data) => {
...@@ -340,7 +340,7 @@ const ModelTree = (props) => { ...@@ -340,7 +340,7 @@ const ModelTree = (props) => {
const moveNode = (steps) => { const moveNode = (steps) => {
setLoading(true); setLoading(true);
dispatch({ dispatch({
type: 'datamodel.upDownModelCatalog', type: 'pds.upDownCatalog',
payload: { payload: {
modelCatalogId: currentRightClickDir.id, modelCatalogId: currentRightClickDir.id,
steps steps
...@@ -358,11 +358,11 @@ const ModelTree = (props) => { ...@@ -358,11 +358,11 @@ const ModelTree = (props) => {
const deleteNode = () => { const deleteNode = () => {
modal.confirm({ modal.confirm({
title: '提示!', title: '提示!',
content: '删除目录会删除相关的模型,您确定删除吗?', content: '删除目录会删除相关的服务,您确定删除吗?',
onOk: () => { onOk: () => {
setLoading(true); setLoading(true);
dispatch({ dispatch({
type: 'datamodel.deleteDataModelCatalog', type: 'pds.deleteCatalog',
payload: { payload: {
params: { params: {
easyDataModelerCatalogId: currentRightClickDir.id easyDataModelerCatalogId: currentRightClickDir.id
...@@ -477,17 +477,17 @@ const ModelTree = (props) => { ...@@ -477,17 +477,17 @@ const ModelTree = (props) => {
</Menu> </Menu>
); );
const syncMenu = ( // const syncMenu = (
<Menu selectedKeys={[domainSelectedKey]} onClick={onSyncMenuClick}> // <Menu selectedKeys={[domainSelectedKey]} onClick={onSyncMenuClick}>
{ // {
domains && domains.map(domain => { // domains && domains.map(domain => {
return ( // return (
<Menu.Item key={domain.domainId} value={domain.domainId} >{domain.domainName}</Menu.Item> // <Menu.Item key={domain.domainId} value={domain.domainId} >{domain.domainName}</Menu.Item>
) // )
}) // })
} // }
</Menu> // </Menu>
); // );
const classes = classnames('model-tree', { const classes = classnames('model-tree', {
'model-tree-recatalog': (refrence === 'recatalog') 'model-tree-recatalog': (refrence === 'recatalog')
...@@ -503,7 +503,7 @@ const ModelTree = (props) => { ...@@ -503,7 +503,7 @@ const ModelTree = (props) => {
borderBottom: "1px solid #EFEFEF", borderBottom: "1px solid #EFEFEF",
height: 57, height: 57,
alignItems: 'center', alignItems: 'center',
justifyContent: (viewSelectedKey==='dir' && getDataModelerRole(user)===DataModelerRoleAdmin)?'space-between':'', // justifyContent: (viewSelectedKey==='dir' && getDataModelerRole(user)===DataModelerRoleAdmin)?'space-between':'',
}} }}
> >
<Dropdown overlay={exportMenu} placement="bottomLeft"> <Dropdown overlay={exportMenu} placement="bottomLeft">
...@@ -514,24 +514,24 @@ const ModelTree = (props) => { ...@@ -514,24 +514,24 @@ const ModelTree = (props) => {
{ {
(viewSelectedKey==='dir' && getDataModelerRole(user)===DataModelerRoleAdmin) && ( (viewSelectedKey==='dir' && getDataModelerRole(user)===DataModelerRoleAdmin) && (
<Tooltip title="新增目录" className='ml-2'> <Tooltip title="新增目录" className='ml-6'>
<PlusOutlined className='default' onClick={add} style={{ fontSize:16,cursor:'pointer' }} /> <PlusOutlined className='default' onClick={add} style={{ fontSize:16,cursor:'pointer' }} />
</Tooltip> </Tooltip>
) )
} }
{ {/* {
(viewSelectedKey==='dir' && getDataModelerRole(user)===DataModelerRoleAdmin) && ( (viewSelectedKey==='dir' && getDataModelerRole(user)===DataModelerRoleAdmin) && (
<Tooltip title="存量模型导入" className='ml-2'> <Tooltip title="存量模型导入" className='ml-2'>
<ImportOutlined className='default' onClick={() => { importStockModel && importStockModel() }} style={{ fontSize:16,cursor:'pointer' }} /> <ImportOutlined className='default' onClick={() => { importStockModel && importStockModel() }} style={{ fontSize:16,cursor:'pointer' }} />
</Tooltip> </Tooltip>
) )
} } */}
<Tooltip title="刷新目录" className='ml-2'> <Tooltip title="刷新目录" className='ml-6'>
<Button type='text' icon={<ReloadOutlined className='default' />} size='small' onClick={refresh} /> <Button type='text' icon={<ReloadOutlined className='default' />} size='small' onClick={refresh} />
</Tooltip> </Tooltip>
{ {/* {
(viewSelectedKey==='dir' && getDataModelerRole(user)===DataModelerRoleAdmin) && !isSetRootId && ( (viewSelectedKey==='dir' && getDataModelerRole(user)===DataModelerRoleAdmin) && !isSetRootId && (
<Dropdown overlay={syncMenu} placement="bottomLeft"> <Dropdown overlay={syncMenu} placement="bottomLeft">
<Tooltip title="同步目录"> <Tooltip title="同步目录">
...@@ -539,15 +539,15 @@ const ModelTree = (props) => { ...@@ -539,15 +539,15 @@ const ModelTree = (props) => {
</Tooltip> </Tooltip>
</Dropdown> </Dropdown>
) )
} } */}
{ {/* {
(viewSelectedKey==='dir' && getDataModelerRole(user)===DataModelerRoleAdmin) && isSetRootId && ( (viewSelectedKey==='dir' && getDataModelerRole(user)===DataModelerRoleAdmin) && isSetRootId && (
<Tooltip title="同步目录" className='ml-2'> <Tooltip title="同步目录" className='ml-2'>
<Button type='text' icon={<SyncOutlined className='default' />} size='small' onClick={sync} /> <Button type='text' icon={<SyncOutlined className='default' />} size='small' onClick={sync} />
</Tooltip> </Tooltip>
) )
} } */}
</div> </div>
} }
<div className='p-3'> <div className='p-3'>
......
...@@ -129,7 +129,7 @@ const UpdateTreeItemModal = (props) => { ...@@ -129,7 +129,7 @@ const UpdateTreeItemModal = (props) => {
} }
dispatchLatest({ dispatchLatest({
type: 'datamodel.saveDataModelCatalog', type: 'pds.saveCatalog',
payload: { payload: {
data: payload data: payload
}, },
......
...@@ -82,7 +82,7 @@ class Model extends React.Component { ...@@ -82,7 +82,7 @@ class Model extends React.Component {
getModelStates = () => { getModelStates = () => {
this.setState({ loadingStates: true }, () => { this.setState({ loadingStates: true }, () => {
dispatch({ dispatch({
type: 'datamodel.loadDataModelStateCatalog', type: 'pds.loadStateCatalog',
callback: data => { callback: data => {
this.setState({ this.setState({
loadingStates: false, loadingStates: false,
...@@ -139,7 +139,7 @@ class Model extends React.Component { ...@@ -139,7 +139,7 @@ class Model extends React.Component {
if (currentView === 'dir') { if (currentView === 'dir') {
const params = { const params = {
easyDataModelerCatalogId: catalogId, pdsDataServiceCatalogId: catalogId,
}; };
if (currentModelState !== '') { if (currentModelState !== '') {
...@@ -147,10 +147,10 @@ class Model extends React.Component { ...@@ -147,10 +147,10 @@ class Model extends React.Component {
} }
dispatchLatestHomepage({ dispatchLatestHomepage({
type: 'datamodel.getCurrentDataModelCatalog', type: 'pds.getServices',
payload: params, payload: params,
callback: data => { callback: data => {
this.setState({ loadingTableData: false, tableData: data.easyDataModelerDataModels||[], filterTableData: data.easyDataModelerDataModels||[] }); this.setState({ loadingTableData: false, tableData: data.pdsdataServices||[], filterTableData: data.pdsdataServices||[] });
}, },
error: () => { error: () => {
this.setState({ loadingTableData: false }); this.setState({ loadingTableData: false });
...@@ -158,12 +158,12 @@ class Model extends React.Component { ...@@ -158,12 +158,12 @@ class Model extends React.Component {
}) })
} else { } else {
dispatchLatestHomepage({ dispatchLatestHomepage({
type: 'datamodel.getCurrentDataModelStateCatalog', type: 'pds.getStateServices',
payload: { payload: {
easyDataModelerStateCatalogId: catalogId easyDataModelerStateCatalogId: catalogId
}, },
callback: data => { callback: data => {
this.setState({ loadingTableData: false, tableData: data.easyDataModelerDataModels||[], filterTableData: data.easyDataModelerDataModels||[] }); this.setState({ loadingTableData: false, tableData: data.pdsdataServices||[], filterTableData: data.pdsdataServices||[] });
}, },
error: () => { error: () => {
this.setState({ loadingTableData: false }); this.setState({ loadingTableData: false });
...@@ -181,7 +181,7 @@ class Model extends React.Component { ...@@ -181,7 +181,7 @@ class Model extends React.Component {
} }
dispatchLatestHomepage({ dispatchLatestHomepage({
type: 'datamodel.searchModel', type: 'pds.searchService',
payload: params, payload: params,
callback: data => { callback: data => {
this.setState({ loadingTableData: false, tableData: data||[], filterTableData: data||[] }); this.setState({ loadingTableData: false, tableData: data||[], filterTableData: data||[] });
...@@ -228,11 +228,11 @@ class Model extends React.Component { ...@@ -228,11 +228,11 @@ class Model extends React.Component {
onExportDDLBtnClick = () => { onExportDDLBtnClick = () => {
const { selectModelerIds, tableData } = this.state; const { selectModelerIds, tableData } = this.state;
if ((selectModelerIds||[]).length === 0) { if ((selectModelerIds||[]).length === 0) {
showMessage('info', '请先选择模型'); showMessage('info', '请先选择服务');
return; return;
} }
//模型名称在导出ddl的时候有使用 //服务名称在导出ddl的时候有使用
const _selectModelerNames = []; const _selectModelerNames = [];
(selectModelerIds||[]).forEach(id => { (selectModelerIds||[]).forEach(id => {
...@@ -255,7 +255,7 @@ class Model extends React.Component { ...@@ -255,7 +255,7 @@ class Model extends React.Component {
startFlow = () => { startFlow = () => {
const { selectModelerIds } = this.state; const { selectModelerIds } = this.state;
if ((selectModelerIds||[]).length === 0) { if ((selectModelerIds||[]).length === 0) {
showMessage('info', '请先选择模型'); showMessage('info', '请先选择服务');
return; return;
} }
...@@ -265,7 +265,7 @@ class Model extends React.Component { ...@@ -265,7 +265,7 @@ class Model extends React.Component {
onRecatalogBtnClick = () => { onRecatalogBtnClick = () => {
const { selectModelerIds } = this.state; const { selectModelerIds } = this.state;
if ((selectModelerIds||[]).length === 0) { if ((selectModelerIds||[]).length === 0) {
showMessage('info', '请先选择模型'); showMessage('info', '请先选择服务');
return; return;
} }
...@@ -276,7 +276,7 @@ class Model extends React.Component { ...@@ -276,7 +276,7 @@ class Model extends React.Component {
const { selectModelerIds } = this.state; const { selectModelerIds } = this.state;
if ((selectModelerIds||[]).length === 0) { if ((selectModelerIds||[]).length === 0) {
showMessage('info', '请先选择模型'); showMessage('info', '请先选择服务');
return; return;
} }
...@@ -421,7 +421,7 @@ class Model extends React.Component { ...@@ -421,7 +421,7 @@ class Model extends React.Component {
const { catalogId } = this.state; const { catalogId } = this.state;
if ((catalogId||'') === '') { if ((catalogId||'') === '') {
showMessage('info', '请先选择模型目录'); showMessage('info', '请先选择服务目录');
return; return;
} }
...@@ -473,10 +473,10 @@ class Model extends React.Component { ...@@ -473,10 +473,10 @@ class Model extends React.Component {
let disableStartFlow = false, startFlowTip = ''; let disableStartFlow = false, startFlowTip = '';
if ((currentView==='dir'&&currentModelState==='2')||(currentView!=='dir'&&catalogId==='2')) { if ((currentView==='dir'&&currentModelState==='2')||(currentView!=='dir'&&catalogId==='2')) {
disableStartFlow = true; disableStartFlow = true;
startFlowTip = '只有草稿状态下的模型才能送审'; startFlowTip = '只有草稿状态下的服务才能送审';
} else if ((selectModelerIds||[]).length===0) { } else if ((selectModelerIds||[]).length===0) {
disableStartFlow = true; disableStartFlow = true;
startFlowTip = '请先选择模型'; startFlowTip = '请先选择服务';
} }
return ( return (
...@@ -510,35 +510,35 @@ class Model extends React.Component { ...@@ -510,35 +510,35 @@ class Model extends React.Component {
{ {
(getDataModelerRole(value?.user)!==DataModelerRoleReader) && <React.Fragment> (getDataModelerRole(value?.user)!==DataModelerRoleReader) && <React.Fragment>
<Space> <Space>
<Button onClick={() => { this.setState({ importModalVisible: true }); }}>新建</Button> <Button onClick={() => {}}>新建</Button>
</Space> </Space>
<Space> {/* <Space>
<Tooltip title={(selectModelerIds||[]).length===0?'请先选择模型':''}> <Tooltip title={(selectModelerIds||[]).length===0?'请先选择服务':''}>
<Button onClick={this.onExportOtherBtnClick} disabled={(selectModelerIds||[]).length===0}>导出</Button> <Button onClick={this.onExportOtherBtnClick} disabled={(selectModelerIds||[]).length===0}>导出</Button>
</Tooltip> </Tooltip>
</Space> </Space> */}
<Space> {/* <Space>
<Tooltip title={startFlowTip}> <Tooltip title={startFlowTip}>
<Button onClick={this.startFlow} disabled={disableStartFlow}>送审</Button> <Button onClick={this.startFlow} disabled={disableStartFlow}>送审</Button>
</Tooltip> </Tooltip>
</Space> </Space> */}
<Space> <Space>
<Tooltip title={(selectModelerIds||[]).length===0?'请先选择模型':''}> <Tooltip title={(selectModelerIds||[]).length===0?'请先选择服务':''}>
<Button onClick={this.onRecatalogBtnClick} disabled={(selectModelerIds||[]).length===0}>变更目录</Button> <Button onClick={this.onRecatalogBtnClick} disabled={(selectModelerIds||[]).length===0}>变更目录</Button>
</Tooltip> </Tooltip>
</Space> </Space>
<Space> {/* <Space>
<Tooltip title={(selectModelerIds||[]).length===0?'请先选择模型':''}> <Tooltip title={(selectModelerIds||[]).length===0?'请先选择服务':''}>
<Button onClick={this.onBatchDeleteBtnClick} disabled={(selectModelerIds||[]).length===0}>删除</Button> <Button onClick={this.onBatchDeleteBtnClick} disabled={(selectModelerIds||[]).length===0}>删除</Button>
</Tooltip> </Tooltip>
</Space> </Space> */}
<Space> {/* <Space>
<Button onClick={this.onVisibleColSettingClick}>可见列设置</Button> <Button onClick={this.onVisibleColSettingClick}>可见列设置</Button>
</Space> </Space> */}
</React.Fragment> </React.Fragment>
} }
</Space> </Space>
...@@ -564,15 +564,15 @@ class Model extends React.Component { ...@@ -564,15 +564,15 @@ class Model extends React.Component {
</Select> </Select>
</Space> </Space>
} }
<Space> {/* <Space>
<InputDebounce <InputDebounce
placeholder="通过模型名称全文搜索" placeholder="通过服务名称全文搜索"
allowClear allowClear
value={keyword} value={keyword}
onChange={(value) => { this.onSearchInputChange(value); }} onChange={(value) => { this.onSearchInputChange(value); }}
style={{ width: inputWidth, marginLeft: 'auto' }} style={{ width: inputWidth, marginLeft: 'auto' }}
/> />
</Space> </Space> */}
</Space> </Space>
...@@ -600,35 +600,6 @@ class Model extends React.Component { ...@@ -600,35 +600,6 @@ class Model extends React.Component {
</div> </div>
</div> </div>
<ImportModal
view={currentView}
catalogId={catalogId}
visible={importModalVisible}
onCancel={this.onImportModalCancel}
onCancelByWord={this.onImportModalCancelByWord}
onCancelByDDL={this.onImportModalCancelByDDL}
/>
<ImportStockWordDrawer
visible={importStockWordDrawerVisible}
onCancel={this.onImportStockWordDrawerCancel}
catalogId={catalogId}
onSuccess={this.onImportStockWordSuccess}
/>
<ExportDDLModal
visible={exportDDLModalVisible}
reference={exportDDLModalReference}
ids={(exportDDLModalReference==='exportDDL')?selectModelerIds:[currentModel.id]}
names={selectModelerNames}
env={value?.env}
onCancel={this.onExportDDLModalCancel}
/>
<ExportOtherModal
visible={exportOtherModalVisible}
onCancel={this.onExportOtherModalCancel}
/>
<RecatalogModal <RecatalogModal
visible={recatalogModalVisible} visible={recatalogModalVisible}
...@@ -641,23 +612,6 @@ class Model extends React.Component { ...@@ -641,23 +612,6 @@ class Model extends React.Component {
visible={historyAndVersionDrawerVisible} visible={historyAndVersionDrawerVisible}
onCancel={this.onHistoryAndVersionDrawerCancel} onCancel={this.onHistoryAndVersionDrawerCancel}
/> />
<StartFlowModal
ids={selectModelerIds}
visible={startFlowModalVisible}
onCancel={this.onStartFlowModalCancel}
/>
<DeleteTipModal
visible={showDeleteTip}
tip='您确定要删除这些模型吗?'
onCancel={this.onDeleteTipModalCancel}
/>
<ColSettingModal
visible={colSettingModalVisible}
onCancel={this.onColSettingModalCancel}
/>
</div> </div>
} }
</AppContext.Consumer> </AppContext.Consumer>
......
...@@ -14,7 +14,6 @@ import AssetBrowse from './AssetBrowse'; ...@@ -14,7 +14,6 @@ import AssetBrowse from './AssetBrowse';
import AssetRecycle from './AssetRecycle'; import AssetRecycle from './AssetRecycle';
import DataMasterDefine from "./DataMaster/Define"; import DataMasterDefine from "./DataMaster/Define";
import DataMasterManage from "./DataMaster/Manage"; import DataMasterManage from "./DataMaster/Manage";
import DataServiceManage from './DataService';
class Manage extends Component { class Manage extends Component {
...@@ -38,7 +37,6 @@ class Manage extends Component { ...@@ -38,7 +37,6 @@ class Manage extends Component {
<Route path={`${match.path}/asset-recycle`} component={AssetRecycle} /> <Route path={`${match.path}/asset-recycle`} component={AssetRecycle} />
<Route path={`${match.path}/msd-define`} component={DataMasterDefine} /> <Route path={`${match.path}/msd-define`} component={DataMasterDefine} />
<Route path={`${match.path}/msd-manage`} component={DataMasterManage} /> <Route path={`${match.path}/msd-manage`} component={DataMasterManage} />
<Route path={`${match.path}/data-service`} component={DataServiceManage} />
</Switch> </Switch>
) : ( ) : (
<GetSession {...this.props} /> <GetSession {...this.props} />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment