Commit b0579fa4 by zhaochengxiang

资产管理列表优化

parent e25c31cc
...@@ -25,6 +25,10 @@ export function* listFilterElements() { ...@@ -25,6 +25,10 @@ export function* listFilterElements() {
return yield call(service.listFilterElements); return yield call(service.listFilterElements);
} }
export function* listFilterElementsGroupByType() {
return yield call(service.listFilterElementsGroupByType);
}
export function* setupFilterElementIds(payload) { export function* setupFilterElementIds(payload) {
return yield call(service.setupFilterElementIds, payload); return yield call(service.setupFilterElementIds, payload);
} }
......
...@@ -24,6 +24,10 @@ export function listFilterElements() { ...@@ -24,6 +24,10 @@ export function listFilterElements() {
return GetJSON("/dataassetmanager/elementApi/listFilterElements"); return GetJSON("/dataassetmanager/elementApi/listFilterElements");
} }
export function listFilterElementsGroupByType() {
return GetJSON("/dataassetmanager/elementApi/listFilterElementsGroupByType");
}
export function setupFilterElementIds(payload) { export function setupFilterElementIds(payload) {
return PostJSON("/dataassetmanager/elementApi/setupFilterElementIds", payload); return PostJSON("/dataassetmanager/elementApi/setupFilterElementIds", payload);
} }
......
import React, { useEffect, useState } from 'react'; import React from 'react';
import { Avatar, Row, Col, Typography, Divider } from 'antd'; import { Avatar, Row, Col, Typography, Divider } from 'antd';
import './AssetItem.less'; import './AssetItem.less';
...@@ -18,37 +18,12 @@ const colors = [ ...@@ -18,37 +18,12 @@ const colors = [
const AssetItem = (props) => { const AssetItem = (props) => {
const { data } = props; const { data } = props;
const [ typesOfElements, setTypesOfElements ] = useState([]);
useEffect(() => {
if (data) {
convertData();
}
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [ data ]);
const convertData = () => {
const _typesOfElements = [];
const _types = [];
data && (data.elements||[]).forEach(element => {
if (_types.indexOf(element.type||'') === -1) {
_types.push(element.type||'');
const _elements = (data.elements||[]).filter(_element => (_element.type||'') === (element.type||''));
_typesOfElements.push({ type: element.type||'', elements: _elements||[] });
}
})
setTypesOfElements(_typesOfElements);
}
return ( return (
<div className='asset-item'> <div className='asset-item'>
{ {
(typesOfElements||[]).map((typeOfElements, index) => { (data.elementsGroup||[]).map((elementGroup, index) => {
const _type = typeOfElements.type||''; const _type = elementGroup.type||'';
return ( return (
<div key={index} className='d-flex' style={{ alignItems: 'center' }}> <div key={index} className='d-flex' style={{ alignItems: 'center' }}>
...@@ -64,7 +39,7 @@ const AssetItem = (props) => { ...@@ -64,7 +39,7 @@ const AssetItem = (props) => {
<div className='textOverflow' style={{ flex: 1 }}> <div className='textOverflow' style={{ flex: 1 }}>
<Row className='mb-3'> <Row className='mb-3'>
{ {
typeOfElements && typeOfElements.elements && typeOfElements.elements.map((element, _index) => { elementGroup && elementGroup.elements && elementGroup.elements.map((element, _index) => {
return ( return (
<Col className='mt-3' key={_index} md={8}> <Col className='mt-3' key={_index} md={8}>
<Typography.Paragraph title={ `${element.name||''}: ${element.value||''}` } ellipsis> <Typography.Paragraph title={ `${element.name||''}: ${element.value||''}` } ellipsis>
...@@ -75,7 +50,7 @@ const AssetItem = (props) => { ...@@ -75,7 +50,7 @@ const AssetItem = (props) => {
}) })
} }
</Row> </Row>
{ index !== ((typesOfElements||[]).length-1) && <Divider /> } { index !== ((data.elementsGroup||[]).length-1) && <Divider /> }
</div> </div>
</div> </div>
) )
......
import React,{ useState, useEffect, useRef } from "react"; import React,{ useState, useEffect, useRef } from "react";
import { Card, Checkbox, Button, List, Skeleton, Pagination, Space, Modal, Switch, Divider, Tooltip, Popover, Input } from "antd"; import { Card, Checkbox, Button, List, Pagination, Space, Modal, Switch, Divider, Tooltip, Popover, Input, Spin } from "antd";
import { EditOutlined, ReconciliationOutlined, DeleteOutlined } from '@ant-design/icons'; import { EditOutlined, ReconciliationOutlined, DeleteOutlined } from '@ant-design/icons';
import classNames from 'classnames'; import classNames from 'classnames';
import SmoothScroll from 'smooth-scroll'; import SmoothScroll from 'smooth-scroll';
...@@ -20,7 +20,7 @@ const AssetTable = (props) => { ...@@ -20,7 +20,7 @@ const AssetTable = (props) => {
const { readOnly = false, className, nodeId } = props; const { readOnly = false, className, nodeId } = props;
const [ loading, setLoading ] = useState(false); const [ loading, setLoading ] = useState(false);
const [filterElements, setFilterElements] = useState([]); const [filterElementsGroup, setFilterElementsGroup] = useState([]);
const [ assetNames, setAssetNames ] = useState([]); const [ assetNames, setAssetNames ] = useState([]);
const [ assets, setAssets ] = useState([]); const [ assets, setAssets ] = useState([]);
const [ total, setTotal ] = useState(0); const [ total, setTotal ] = useState(0);
...@@ -77,8 +77,8 @@ const AssetTable = (props) => { ...@@ -77,8 +77,8 @@ const AssetTable = (props) => {
useEffect(() => { useEffect(() => {
if ((nodeId||'') !== '' ) { if ((nodeId||'') !== '' ) {
if (filterElements.length === 0) { if (filterElementsGroup.length === 0) {
getFilterElementsThenGetDataAssets(); getFilterElementsGroupThenGetDataAssets();
} else { } else {
getDataAssets(); getDataAssets();
} }
...@@ -111,12 +111,12 @@ const AssetTable = (props) => { ...@@ -111,12 +111,12 @@ const AssetTable = (props) => {
setPagination({ pageNum: page, pageSize: size }); setPagination({ pageNum: page, pageSize: size });
} }
const getFilterElementsThenGetDataAssets = () => { const getFilterElementsGroupThenGetDataAssets = () => {
setLoading(true); setLoading(true);
dispatch({ dispatch({
type: 'assetmanage.listFilterElements', type: 'assetmanage.listFilterElementsGroupByType',
callback: data => { callback: data => {
setFilterElements(data||[]); setFilterElementsGroup(data||[]);
getDataAssets(data||[]); getDataAssets(data||[]);
}, },
error: () => { error: () => {
...@@ -125,7 +125,7 @@ const AssetTable = (props) => { ...@@ -125,7 +125,7 @@ const AssetTable = (props) => {
}) })
} }
const getDataAssets = (elments = filterElements) => { const getDataAssets = (elmentsGroup = filterElementsGroup) => {
setLoading(true); setLoading(true);
dispatch({ dispatch({
type: 'assetmanage.listDataAssetsByPage', type: 'assetmanage.listDataAssetsByPage',
...@@ -141,14 +141,21 @@ const AssetTable = (props) => { ...@@ -141,14 +141,21 @@ const AssetTable = (props) => {
(data.data||[]).forEach((asset, index) => { (data.data||[]).forEach((asset, index) => {
asset.elements = []; asset.elementsGroup = [];
(elments||[]).forEach((element, _index) => { (elmentsGroup||[]).forEach((elementGroup, _index) => {
asset.elements.push({...element, value: asset.elementValues[_index]}); let _processElementGroup = { type: elementGroup.type, elements: [] };
if (element.name === '中文名称') { ((elementGroup||[]).names||[]).forEach((name, __index) => {
_assetNames.push(`${index+1}. ${asset.elementValues[_index]||''}`); _processElementGroup.elements.push({ name, value: asset?.elementValues[_index].values[__index] });
}
if (name === '中文名称') {
_assetNames.push(`${index+1}. ${asset?.elementValues[_index].values[__index]||''}`);
}
});
asset.elementsGroup.push(_processElementGroup);
}) })
}) })
setAssetNames(_assetNames); setAssetNames(_assetNames);
...@@ -304,7 +311,7 @@ const AssetTable = (props) => { ...@@ -304,7 +311,7 @@ const AssetTable = (props) => {
const onFilterElementVisibleChange = (visible = false, refresh = false) => { const onFilterElementVisibleChange = (visible = false, refresh = false) => {
setFilterElementVisible(visible); setFilterElementVisible(visible);
refresh && getFilterElementsThenGetDataAssets(); refresh && getFilterElementsGroupThenGetDataAssets();
} }
const onImportElementBtnClick = () => { const onImportElementBtnClick = () => {
...@@ -387,18 +394,18 @@ const AssetTable = (props) => { ...@@ -387,18 +394,18 @@ const AssetTable = (props) => {
</Space> </Space>
</div> </div>
</div> </div>
<Checkbox.Group <Spin spinning={loading} >
style={{ width: '100%' }} <Checkbox.Group
onChange={ onAssetCheckboxChange } style={{ width: '100%' }}
value={ selectedKeys } onChange={ onAssetCheckboxChange }
> value={ selectedKeys }
<List >
itemLayout="vertical" <List
dataSource={ assets||[] } itemLayout="vertical"
footer={null} dataSource={ assets||[] }
renderItem={(item, index) => ( footer={null}
<List.Item id={`data-asset-${item.id||''}`} style={{ backgroundColor: (item.id===anchorId)?'#e7f7ff':'transparent' }}> renderItem={(item, index) => (
<Skeleton title={false} loading={loading} active> <List.Item id={`data-asset-${item.id||''}`} style={{ backgroundColor: (item.id===anchorId)?'#e7f7ff':'transparent' }}>
<List.Item.Meta <List.Item.Meta
title={ title={
<> <>
...@@ -428,24 +435,24 @@ const AssetTable = (props) => { ...@@ -428,24 +435,24 @@ const AssetTable = (props) => {
} }
description={ <AssetItem data={item} /> } description={ <AssetItem data={item} /> }
/> />
</Skeleton> </List.Item>
</List.Item> )}
)} />
/> <Pagination
<Pagination size="small"
size="small" className="text-center m-3"
className="text-center m-3" showSizeChanger
showSizeChanger showQuickJumper
showQuickJumper onChange={changeCurrent}
onChange={changeCurrent} onShowSizeChange={changeCurrent}
onShowSizeChange={changeCurrent} current={pageNum}
current={pageNum} pageSize={pageSize}
pageSize={pageSize} defaultCurrent={1}
defaultCurrent={1} total={total}
total={total} showTotal={total => ` ${total} `}
showTotal={total => `共 ${total} 条`} />
/> </Checkbox.Group>
</Checkbox.Group> </Spin>
<AssetEdit <AssetEdit
visible={assetEditVisible} visible={assetEditVisible}
action={assetEditAction} action={assetEditAction}
......
...@@ -16,7 +16,7 @@ const CustomDirectoryModal = (props) => { ...@@ -16,7 +16,7 @@ const CustomDirectoryModal = (props) => {
const [ keyword, setKeyword ] = useState(''); const [ keyword, setKeyword ] = useState('');
const [ data, setData ] = useState([]); const [ data, setData ] = useState([]);
const [ filterData, setFilterData ] = useState([]); const [ filterData, setFilterData ] = useState([]);
const [ previewTreeData, setPreviewTreeData ] = useState({}); const [ previewTreeData, setPreviewTreeData ] = useState(null);
const [ checkedValues, setCheckedValues ] = useState([]); const [ checkedValues, setCheckedValues ] = useState([]);
const [ checkedData, setCheckedData ] = useState([]); const [ checkedData, setCheckedData ] = useState([]);
const [ confirmLoading, setConfirmLoading ] = useState(false); const [ confirmLoading, setConfirmLoading ] = useState(false);
...@@ -103,7 +103,7 @@ const CustomDirectoryModal = (props) => { ...@@ -103,7 +103,7 @@ const CustomDirectoryModal = (props) => {
setKeyword(''); setKeyword('');
setCheckedValues([]); setCheckedValues([]);
setCheckedData([]); setCheckedData([]);
setPreviewTreeData({}); setPreviewTreeData(null);
form.resetFields(); form.resetFields();
} }
......
...@@ -14,11 +14,11 @@ const ImportDirectory = (props) => { ...@@ -14,11 +14,11 @@ const ImportDirectory = (props) => {
useEffect(() => { useEffect(() => {
if ((dirId||'')!=='') { if (visible && (dirId||'')!=='') {
getDirectory(); getDirectory();
} }
//eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
}, [ dirId ]) }, [ visible, dirId ])
const getDirectory = () => { const getDirectory = () => {
setDir(null); setDir(null);
......
...@@ -83,8 +83,12 @@ class PreviewTree extends React.Component { ...@@ -83,8 +83,12 @@ class PreviewTree extends React.Component {
plugins: [tooltip], plugins: [tooltip],
modes: { modes: {
default: [ default: [
{
type: 'zoom-canvas',
enableOptimize: true,
},
'drag-canvas', 'drag-canvas',
'zoom-canvas', 'drag-node',
], ],
}, },
defaultNode: { defaultNode: {
...@@ -95,7 +99,7 @@ class PreviewTree extends React.Component { ...@@ -95,7 +99,7 @@ class PreviewTree extends React.Component {
], ],
}, },
defaultEdge: { defaultEdge: {
type: 'cubic-horizontal', type: 'line',
size: 2, size: 2,
color: '#e2e2e2', color: '#e2e2e2',
style: { style: {
......
...@@ -120,7 +120,7 @@ class ExportDDLModal extends React.Component { ...@@ -120,7 +120,7 @@ class ExportDDLModal extends React.Component {
onCancel && onCancel(); onCancel && onCancel();
}} }}
> >
导出到文 导出到文
</Button> </Button>
]) : ([ ]) : ([
<Button <Button
......
...@@ -5,7 +5,7 @@ import { PlusOutlined, EditOutlined, SyncOutlined, DeleteOutlined } from '@ant- ...@@ -5,7 +5,7 @@ import { PlusOutlined, EditOutlined, SyncOutlined, DeleteOutlined } from '@ant-
import UpdateTreeItemModal from './UpdateTreeItemModal'; import UpdateTreeItemModal from './UpdateTreeItemModal';
import { dispatch } from '../../../../model'; import { dispatch } from '../../../../model';
import { showMessage, getQueryParam } from '../../../../util'; import { showMessage, getQueryParam } from '../../../../util';
import { AnchorDid, AnchorId, AnchorTimestamp } from '../../../../util/constant'; import { AnchorId, AnchorTimestamp } from '../../../../util/constant';
import './ModelTree.less'; import './ModelTree.less';
......
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