Commit 326e8985 by zhaochengxiang

资产详情调整

parent fe511bea
...@@ -15,6 +15,7 @@ import AssetManage from './view/Manage/AssetManage'; ...@@ -15,6 +15,7 @@ import AssetManage from './view/Manage/AssetManage';
import AssetBrowse from './view/Manage/AssetBrowse'; import AssetBrowse from './view/Manage/AssetBrowse';
import AssetRecycle from './view/Manage/AssetRecycle'; import AssetRecycle from './view/Manage/AssetRecycle';
import DatasourceManage from './view/Manage/DatasourceManage'; import DatasourceManage from './view/Manage/DatasourceManage';
import AssetDetailPage from './view/Manage/AssetManage/Component/AssetDetailPage';
import AssetDetail from './view/Manage/AssetManage/Component/AssetDetail'; import AssetDetail from './view/Manage/AssetManage/Component/AssetDetail';
import ImportAction from './view/Manage/Model/Component/ImportAction'; import ImportAction from './view/Manage/Model/Component/ImportAction';
import EditModel from './view/Manage/Model/Component/EditModel'; import EditModel from './view/Manage/Model/Component/EditModel';
...@@ -50,10 +51,7 @@ export class App extends React.Component { ...@@ -50,10 +51,7 @@ export class App extends React.Component {
return ( return (
<AssetDetail <AssetDetail
id={id} id={id}
reference='search'
action='detail'
terms={terms} terms={terms}
visible={true}
/> />
); );
} }
...@@ -85,7 +83,9 @@ export class App extends React.Component { ...@@ -85,7 +83,9 @@ export class App extends React.Component {
<Route path={`${ContextPath}/home`} component={Home} /> <Route path={`${ContextPath}/home`} component={Home} />
<Route path={`${ContextPath}/manage`} component={Manage} /> <Route path={`${ContextPath}/manage`} component={Manage} />
<Route path={`${ContextPath}/data-model-action`} component={EditModel} exact /> <Route path={`${ContextPath}/data-model-action`} component={EditModel} exact />
<Route path={`${ContextPath}/model-template-action`} component={EditTemplate} exact /> <Route path={`${ContextPath}/model-template-action`} component={EditTemplate} exact />
<Route path={`${ContextPath}/asset-detail`} component={AssetDetailPage} exact />
<Route path={'/center-home/view/datasource-manage'} component={DatasourceManage} exact /> <Route path={'/center-home/view/datasource-manage'} component={DatasourceManage} exact />
<Route path={'/center-home/view/data-model'} component={Model} exact /> <Route path={'/center-home/view/data-model'} component={Model} exact />
...@@ -103,6 +103,7 @@ export class App extends React.Component { ...@@ -103,6 +103,7 @@ export class App extends React.Component {
<Route path={'/center-home/menu/asset-browse'} component={AssetBrowse} exact /> <Route path={'/center-home/menu/asset-browse'} component={AssetBrowse} exact />
<Route path={'/center-home/menu/asset-recycle'} component={AssetRecycle} exact /> <Route path={'/center-home/menu/asset-recycle'} component={AssetRecycle} exact />
<Route path={'/center-home/data-model-action'} component={EditModel} exact /> <Route path={'/center-home/data-model-action'} component={EditModel} exact />
<Route path={'/center-home/asset-detail'} component={AssetDetailPage} exact />
</Switch> </Switch>
</Router> </Router>
</AppContext.Provider> </AppContext.Provider>
......
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Modal, Typography, Spin } from "antd"; import { Modal, Typography, Spin, Tabs, Descriptions } from "antd";
import AssetDetailItem from './AssetDetailItem'; import MetadataInfo from './MetadataInfo';
import { dispatch } from '../../../../model'; import { highlightSearchContentByTerms } from '../../../../util';
import { dispatch } from '../../../../model';
const AssetDetail = (props)=>{
const { TabPane } = Tabs;
const { onCancel, visible, id, reference=null, terms } = props;
const [ asset, setAsset ] = useState(''); const AssetDetail = (props)=>{
const [ assetName, setAssetName ] = useState('');
const [ loading, setLoading ] = useState(false); const { id, terms } = props;
const [ asset, setAsset ] = useState('');
useEffect(() => { const [ types, setTypes ] = useState([]);
const [ loading, setLoading ] = useState(false);
if (visible && (id||'') !== '') { const [ tabKey, setTabKey ] = useState('0');
getAssetThenGetAssetName();
} useEffect(() => {
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [ visible, id ]) if ((id||'') !== '') {
getAssetThenGetAssetName();
const getAssetThenGetAssetName = () => { }
setLoading(true); //eslint-disable-next-line react-hooks/exhaustive-deps
dispatch({ }, [ id ])
type: 'assetmanage.getDataAssetDetail',
payload: { const getAssetThenGetAssetName = () => {
dataAssetId: id setLoading(true);
}, dispatch({
callback: data => { type: 'assetmanage.getDataAssetDetail',
setLoading(false); payload: {
setAsset(data); dataAssetId: id
getAssetName(data); },
}, callback: data => {
error: () => { setLoading(false);
setLoading(false); setAsset(data);
}
}) const _types = [];
} (data?.elements||[]).forEach(element => {
if (_types.indexOf(element.type) === -1) {
const getAssetName = (data) => { _types.push(element.type);
if (data) { }
const index = (data.elements||[]).findIndex(element => element.name==='中文名称'); })
if (index !== -1) {
setAssetName(data.elements[index].value||''); setTypes(_types);
} },
} error: () => {
} setLoading(false);
}
return( })
<> }
{
!reference && <Modal const onTabChange = (key) => {
title={ setTabKey(key);
<Typography.Paragraph }
className='mr-5'
title={`资产: ${assetName||''}`} return(
ellipsis <Spin spinning={loading}>
> <Tabs activeKey={tabKey} onChange={onTabChange}>
{`资产: ${assetName||''}`} {
</Typography.Paragraph>} (types||[]).map((type, index) => {
visible={visible}
width={800} const _currentValues = (asset.elements||[]).filter(element => element.type===type);
onCancel={()=>{ onCancel && onCancel()}}
footer={null} return (
> <TabPane tab={type} key={index}>
<Spin spinning={loading}> <Descriptions column={2}>
<AssetDetailItem data={asset} /> {
</Spin> (_currentValues||[]).map((item, index) => {
</Modal> return (
} <Descriptions.Item label={item.name||''} key={index}>
{ {
reference && <Spin spinning={loading}> item.name==='资产项' ? <MetadataInfo config={false} value={item.value||''} /> : <span>{highlightSearchContentByTerms(item.value||'', terms)}</span>
<AssetDetailItem data={asset} terms={terms} /> }
</Spin> </Descriptions.Item>
} );
</> })
) }
} </Descriptions>
</TabPane>
)
})
}
</Tabs>
</Spin>
)
}
export default AssetDetail; export default AssetDetail;
\ No newline at end of file
import React, { useEffect, useState } from 'react';
import { Row, Col, Typography } from 'antd';
import { highlightSearchContentByTerms } from '../../../../util';
import MetadataInfo from './MetadataInfo';
import './AssetItem.less';
const AssetItem = (props) => {
const { data, terms } = 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 (
<div className='asset-item'>
{
(typesOfElements||[]).map((elementGroup, index) => {
const _type = elementGroup.type||'';
return (
<div>
<div className='flex' style={{ alignItems: 'center', padding: '15px 0' }}>
<div style={{ width: 3, height: 14, backgroundColor: '#0069AC', marginRight: 5 }} />
<span style={{ fontWeight: 'bold', color: '#464646' }}>{_type||''}</span>
</div>
<Row>
{
elementGroup && elementGroup.elements && elementGroup.elements.map((element, _index) => {
return (
<Col className='mb-3' key={_index} md={8}>
<Typography.Paragraph title={ `${element.name||''}: ${element.value||''}` } style={{ color: '#464646' }} ellipsis>
{ `${element.name||''}: `}
{
(element.name==='资产项')?<MetadataInfo config={false} value={element.value||''} />:highlightSearchContentByTerms(element.value||'', terms)
}
</Typography.Paragraph>
</Col>
);
})
}
</Row>
<div style={{ width: '100%', height: 2, backgroundColor: '#ededed' }} />
</div>
)
})
}
</div>
);
}
export default AssetItem;
import React, { useEffect, useState } from "react";
import AssetDetail from './AssetDetail';
import { getQueryParam } from '../../../../util';
import './AssetDetailPage.less';
const AssetDetailPage = (props)=>{
const [ id, setId ] = useState('');
useEffect(() => {
const _id = getQueryParam('id', props.location.search);
setId(_id);
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
return(
<div className='asset-detail position-relative'>
<div className='detail-header'>
<span style={{ fontSize: 16, fontWeight: 'bold', color: '#fff' }}>资产详情</span>
</div>
<div className='detail-container'>
<div className='detail-container-card'>
<AssetDetail id={id} />
</div>
</div>
</div>
)
}
export default AssetDetailPage;
\ No newline at end of file
.asset-detail {
.detail-header {
display: flex;
width: 100%;
height: 44px;
padding: 0 15px;
background-color: #464d6e;
align-items: center;
position: fixed;
justify-content: space-between;
border-bottom: 1px solid #EFEFEF;
z-index: 100;
}
.detail-container {
top: 44px;
width: 100%;
height: calc(100vh - 44px);
overflow: auto;
background: #EDF0F5;
padding: 10px 20px;
position: absolute;
}
.detail-container-card {
padding: 20px 20px 0;
background: #fff;
}
}
\ No newline at end of file
...@@ -10,7 +10,6 @@ import AssetMount from '../../AssetRecycle/Component/AssetMount'; ...@@ -10,7 +10,6 @@ import AssetMount from '../../AssetRecycle/Component/AssetMount';
import AttributeRelationModal from "./AttributeRelationModal"; import AttributeRelationModal from "./AttributeRelationModal";
import ImportAsset from './ImportAsset'; import ImportAsset from './ImportAsset';
import AssetEdit from './AssetEdit'; import AssetEdit from './AssetEdit';
import AssetDetail from "./AssetDetail";
import MetadataInfo from './MetadataInfo'; import MetadataInfo from './MetadataInfo';
import { dispatch, dispatchLatestHomepage } from '../../../../model'; import { dispatch, dispatchLatestHomepage } from '../../../../model';
import { showMessage, showNotifaction, getQueryParam, inputWidth, isSzseEnv } from '../../../../util'; import { showMessage, showNotifaction, getQueryParam, inputWidth, isSzseEnv } from '../../../../util';
...@@ -31,7 +30,6 @@ const AssetTable = (props) => { ...@@ -31,7 +30,6 @@ const AssetTable = (props) => {
const [ filterElementVisible, setFilterElementVisible ] = useState(false); const [ filterElementVisible, setFilterElementVisible ] = useState(false);
const [ attributeRelationModalVisible, setAttributeRelationModalVisible ] = useState(false); const [ attributeRelationModalVisible, setAttributeRelationModalVisible ] = useState(false);
const [ assetEditVisible, setAssetEditVisible ] = useState(false); const [ assetEditVisible, setAssetEditVisible ] = useState(false);
const [ assetDetailVisible, setAssetDetailVisible ] = useState(false);
const [ assetMountVisible, setAssetMountVisible ] = useState(false); const [ assetMountVisible, setAssetMountVisible ] = useState(false);
const [ currentAssetId, setCurrentAssetId ] = useState(''); const [ currentAssetId, setCurrentAssetId ] = useState('');
const [ assetEditAction, setAssetEditAction ] = useState(''); const [ assetEditAction, setAssetEditAction ] = useState('');
...@@ -345,11 +343,7 @@ const AssetTable = (props) => { ...@@ -345,11 +343,7 @@ const AssetTable = (props) => {
const detailAsset = (item)=>{ const detailAsset = (item)=>{
setCurrentAssetId(item.id); setCurrentAssetId(item.id);
setAssetDetailVisible(true); window.open(`/center-home/asset-detail?id=${item.id}`);
}
const onAssetDetailCancel = () => {
setAssetDetailVisible(false);
} }
const deleteAssets = () => { const deleteAssets = () => {
...@@ -555,11 +549,6 @@ const AssetTable = (props) => { ...@@ -555,11 +549,6 @@ const AssetTable = (props) => {
nodeId={nodeId} nodeId={nodeId}
onCancel={onAssetEditCancel} onCancel={onAssetEditCancel}
/> />
<AssetDetail
visible={assetDetailVisible}
id={currentAssetId}
onCancel={onAssetDetailCancel}
/>
<ImportElement <ImportElement
visible={importElementVisible} visible={importElementVisible}
onCancel={onImportElementCancel} onCancel={onImportElementCancel}
......
...@@ -3,7 +3,6 @@ import { Table, Pagination, Space, Tooltip, Button, Modal } from 'antd'; ...@@ -3,7 +3,6 @@ import { Table, Pagination, Space, Tooltip, Button, Modal } from 'antd';
import { ReconciliationOutlined, DeleteOutlined, UndoOutlined } from '@ant-design/icons'; import { ReconciliationOutlined, DeleteOutlined, UndoOutlined } from '@ant-design/icons';
import { dispatchLatest } from '../../../model'; import { dispatchLatest } from '../../../model';
import AssetDetail from '../AssetManage/Component/AssetDetail';
import AssetMount from './Component/AssetMount'; import AssetMount from './Component/AssetMount';
import { showMessage } from '../../../util'; import { showMessage } from '../../../util';
...@@ -16,7 +15,6 @@ const AssetRecycle = (props) => { ...@@ -16,7 +15,6 @@ const AssetRecycle = (props) => {
const [ total, setTotal ] = useState(0); const [ total, setTotal ] = useState(0);
const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } ); const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } );
const [ currentAssetId, setCurrentAssetId ] = useState(''); const [ currentAssetId, setCurrentAssetId ] = useState('');
const [ assetDetailVisible, setAssetDetailVisible ] = useState(false);
const [ assetMountVisible, setAssetMountVisible ] = useState(false); const [ assetMountVisible, setAssetMountVisible ] = useState(false);
const [ selectedRowKeys, setSelectedRowKeys ] = useState([]); const [ selectedRowKeys, setSelectedRowKeys ] = useState([]);
const [ batchMount, setBatchMount ] = useState(false); const [ batchMount, setBatchMount ] = useState(false);
...@@ -108,15 +106,7 @@ const AssetRecycle = (props) => { ...@@ -108,15 +106,7 @@ const AssetRecycle = (props) => {
const detailItem = (record) => { const detailItem = (record) => {
setCurrentAssetId(record.id); setCurrentAssetId(record.id);
window.open(`/center-home/asset-detail?id=${record.id}`);
const index = selectedRowKeys.findIndex((rowKey) => rowKey === record.id);
if (index !== -1) {
const newSelectedRowKeys = [...selectedRowKeys];
newSelectedRowKeys.splice(index, 1);
setSelectedRowKeys(newSelectedRowKeys);
}
setAssetDetailVisible(true);
} }
const mountItem = (record) => { const mountItem = (record) => {
...@@ -179,10 +169,6 @@ const AssetRecycle = (props) => { ...@@ -179,10 +169,6 @@ const AssetRecycle = (props) => {
}); });
} }
const onAssetDetailCancel = () => {
setAssetDetailVisible(false);
}
const onAssetMountCancel = (refresh = false) => { const onAssetMountCancel = (refresh = false) => {
setAssetMountVisible(false); setAssetMountVisible(false);
...@@ -240,11 +226,6 @@ const AssetRecycle = (props) => { ...@@ -240,11 +226,6 @@ const AssetRecycle = (props) => {
showTotal={total => `共 ${total} 条`} showTotal={total => `共 ${total} 条`}
/> />
</div> </div>
<AssetDetail
visible={ assetDetailVisible }
id={ currentAssetId }
onCancel={ onAssetDetailCancel }
/>
<AssetMount <AssetMount
refrence='asset-recycle' refrence='asset-recycle'
visible={ assetMountVisible } visible={ assetMountVisible }
......
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