Commit fc7c399f by zhaochengxiang

资产回收站

parent d17116cb
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
work correctly both with client-side routing and a non-root public URL. work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`. Learn how to configure a non-root public URL by running `npm run build`.
--> -->
<title>数据管控平台</title> <title>数据治理系统</title>
</head> </head>
<body> <body>
<noscript>You need to enable JavaScript to run this app.</noscript> <noscript>You need to enable JavaScript to run this app.</noscript>
......
...@@ -10,7 +10,8 @@ import Home from './view/Home'; ...@@ -10,7 +10,8 @@ import Home from './view/Home';
import Manage from './view/Manage'; import Manage from './view/Manage';
import Map from './view/Manage/Map'; import Map from './view/Manage/Map';
import Model from './view/Manage/Model'; import Model from './view/Manage/Model';
import DataAssetManage from './view/Manage/AssetManage'; import AssetManage from './view/Manage/AssetManage';
import AssetRecycle from './view/Manage/AssetRecycle';
export default class App extends React.Component { export default class App extends React.Component {
render() { render() {
...@@ -22,9 +23,10 @@ export default class App extends React.Component { ...@@ -22,9 +23,10 @@ export default class App extends React.Component {
<Route path={`${ContextPath}/home`} component={Home} /> <Route path={`${ContextPath}/home`} component={Home} />
<Route path={`${ContextPath}/data-map`} component={Map} exact /> <Route path={`${ContextPath}/data-map`} component={Map} exact />
<Route path={`${ContextPath}/manage`} component={Manage} /> <Route path={`${ContextPath}/manage`} component={Manage} />
<Route path={`/center-home/view/modelmap`} component={Map} exact /> <Route path={`/center-home/view/data-model`} component={Model} exact />
<Route path={`/center-home/view/datamodel`} component={Model} exact /> <Route path={`/center-home/view/asset-map`} component={Map} exact />
<Route path={`/center-home/view/data-asset-manage`} component={DataAssetManage} exact /> <Route path={`/center-home/view/asset-manage`} component={AssetManage} exact />
<Route path={`/center-home/view/asset-recycle`} component={AssetRecycle} exact />
</Switch> </Switch>
</Router> </Router>
</React.Fragment> </React.Fragment>
......
import * as service from '../service/assetmanage'; import * as service from '../service/dataassetmanager';
import { call } from 'redux-saga/effects'; import { call } from 'redux-saga/effects';
export function* importElement(payload) {
return yield call(service.importElement, payload);
}
export function* getLogs(payload) {
return yield call(service.getLogs, payload);
}
export function* addOrUpdateDataAsset(payload) { export function* addOrUpdateDataAsset(payload) {
return yield call(service.addOrUpdateDataAsset, payload); return yield call(service.addOrUpdateDataAsset, payload);
...@@ -50,3 +57,11 @@ export function* assetImport(payload) { ...@@ -50,3 +57,11 @@ export function* assetImport(payload) {
export function* getDirectoryById(payload) { export function* getDirectoryById(payload) {
return yield call(service.getDirectoryById, payload); return yield call(service.getDirectoryById, payload);
} }
export function* loadDataAssets(payload) {
return yield call(service.loadDataAssets, payload);
}
export function* unloadDataAssets(payload) {
return yield call(service.unloadDataAssets, payload);
}
\ No newline at end of file
import * as service from '../service/dataassetmanager';
import { call } from 'redux-saga/effects';
export function* importElement(payload) {
return yield call(service.importElement, payload);
}
export function* getLogs(payload) {
return yield call(service.getLogs, payload);
}
...@@ -11,9 +11,7 @@ import * as datamodel from './datamodel'; ...@@ -11,9 +11,7 @@ import * as datamodel from './datamodel';
import * as assetmanage from './assetmanage'; import * as assetmanage from './assetmanage';
import * as dataassetelement from './dataassetelement'; const funcs = Connect({ user, datamodel, map,assetmanage })
const funcs = Connect({ user, datamodel, map, dataassetelement,assetmanage })
function* request(args) { function* request(args) {
const { type, payload, callback, error } = args.args; const { type, payload, callback, error } = args.args;
......
...@@ -12,17 +12,21 @@ export const routes = [ ...@@ -12,17 +12,21 @@ export const routes = [
redirect: 'map', redirect: 'map',
children: [ children: [
{ {
name: 'map', name: 'data-model',
text: '数据地图', text: '数据模型',
}, },
{ {
name: 'model', name: 'asset-map',
text: '数据模型', text: '资产地图',
}, },
{ {
name: 'assetmanage', name: 'asset-manage',
text: '资产管理', text: '资产管理',
}, },
{
name: 'asset-recycle',
text: '资产回收站',
}
] ]
} }
]; ];
......
import { PostJSON, GetJSON, filePost2, PostJSON2} from "../util/axios"
export function addOrUpdateDataAsset(payload) {
return PostJSON("/dataassetmanager/dataAssetApi/addOrUpdateDataAsset", payload)
}
export function deleteDataAssets(payload) {
return PostJSON2("/dataassetmanager/dataAssetApi/deleteDataAssets", payload)
}
export function getDataAssetDetail(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/getDataAssetDetail", payload)
}
export function listBasicAttrs(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/listBasicAttrs", payload)
}
export function listDataAssetsByPage(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/listDataAssetsByPage", payload)
}
export function listRecycleBinDataAssetsByPage(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/listRecycleBinDataAssetsByPage", payload)
}
export function addOrUpdateDirectory(payload) {
return PostJSON("/dataassetmanager/directoryApi/addOrUpdateDirectory", payload)
}
export function deleteDirectory(payload) {
return PostJSON2("/dataassetmanager/directoryApi/deleteDirectory", payload)
}
export function existDataAsset(payload) {
return GetJSON("/dataassetmanager/directoryApi/existDataAsset", payload)
}
export function queryAllDirectoryAsTree(payload) {
return GetJSON("/dataassetmanager/directoryApi/queryAllDirectoryAsTree", payload)
}
export function listAllTopics(payload) {
return GetJSON("/dataassetmanager/directoryApi/listAllTopics", payload)
}
export function directoryImport(payload) {
return filePost2("/dataassetmanager/directoryApi/import", payload)
}
export function assetImport(payload) {
return filePost2("/dataassetmanager/dataAssetApi/import", payload);
}
export function getDirectoryById(payload) {
return GetJSON("/dataassetmanager/directoryApi/getDirectoryById", payload)
}
\ No newline at end of file
import { filePost, GetJSON } from "../util/axios" import { PostJSON, GetJSON, filePost2, PostJSON2, filePost } from "../util/axios"
export function importElement(payload) { export function importElement(payload) {
return filePost("/dataassetmanager/elementApi/import", payload); return filePost("/dataassetmanager/elementApi/import", payload);
...@@ -7,3 +7,68 @@ export function importElement(payload) { ...@@ -7,3 +7,68 @@ export function importElement(payload) {
export function getLogs(payload) { export function getLogs(payload) {
return GetJSON("/dataassetmanager/elementApi/listOperationLogsByPage", payload); return GetJSON("/dataassetmanager/elementApi/listOperationLogsByPage", payload);
} }
export function addOrUpdateDataAsset(payload) {
return PostJSON("/dataassetmanager/dataAssetApi/addOrUpdateDataAsset", payload);
}
export function deleteDataAssets(payload) {
return PostJSON2("/dataassetmanager/dataAssetApi/deleteDataAssets", payload);
}
export function getDataAssetDetail(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/getDataAssetDetail", payload);
}
export function listBasicAttrs(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/listBasicAttrs", payload);
}
export function listDataAssetsByPage(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/listDataAssetsByPage", payload);
}
export function listRecycleBinDataAssetsByPage(payload) {
return GetJSON("/dataassetmanager/dataAssetApi/listRecycleBinDataAssetsByPage", payload);
}
export function loadDataAssets(payload) {
return PostJSON2("/dataassetmanager/dataAssetApi/loadDataAssets", payload);
}
export function unloadDataAssets(payload) {
return PostJSON2("/dataassetmanager/dataAssetApi/unloadDataAssets", payload);
}
export function addOrUpdateDirectory(payload) {
return PostJSON("/dataassetmanager/directoryApi/addOrUpdateDirectory", payload);
}
export function deleteDirectory(payload) {
return PostJSON2("/dataassetmanager/directoryApi/deleteDirectory", payload);
}
export function existDataAsset(payload) {
return GetJSON("/dataassetmanager/directoryApi/existDataAsset", payload);
}
export function queryAllDirectoryAsTree(payload) {
return GetJSON("/dataassetmanager/directoryApi/queryAllDirectoryAsTree", payload);
}
export function listAllTopics(payload) {
return GetJSON("/dataassetmanager/directoryApi/listAllTopics", payload);
}
export function directoryImport(payload) {
return filePost2("/dataassetmanager/directoryApi/import", payload);
}
export function assetImport(payload) {
return filePost2("/dataassetmanager/dataAssetApi/import", payload);
}
export function getDirectoryById(payload) {
return GetJSON("/dataassetmanager/directoryApi/getDirectoryById", payload);
}
...@@ -4,6 +4,7 @@ import { Modal, Typography } from "antd" ...@@ -4,6 +4,7 @@ import { Modal, Typography } from "antd"
import AssetItem from './AssetItem'; import AssetItem from './AssetItem';
const AssetDetail = (props)=>{ const AssetDetail = (props)=>{
const { onCancel,visible, item } = props const { onCancel,visible, item } = props
const [ assetName, setAssetName ] = useState(''); const [ assetName, setAssetName ] = useState('');
......
...@@ -126,7 +126,7 @@ const AssetTable = (props) =>{ ...@@ -126,7 +126,7 @@ const AssetTable = (props) =>{
content: '该资产在所有目录上唯一存在,移除后,你可以前往“资产回收站”重新挂载。', content: '该资产在所有目录上唯一存在,移除后,你可以前往“资产回收站”重新挂载。',
onOk: () => { onOk: () => {
dispatch({ dispatch({
type: 'assetmanage.deleteDataAssets', type: 'assetmanage.unloadDataAssets',
payload: {params:{dirId:nodeId},data:[`${data.id}`]}, payload: {params:{dirId:nodeId},data:[`${data.id}`]},
callback: dataBox => { callback: dataBox => {
setPageNumber({...pageNumber,rebuild:new Date().getTime()}) setPageNumber({...pageNumber,rebuild:new Date().getTime()})
...@@ -183,7 +183,7 @@ const AssetTable = (props) =>{ ...@@ -183,7 +183,7 @@ const AssetTable = (props) =>{
content: `你已选择了${selectBox.length}个资产,确定把它们都从挂载目录上移除吗?`, content: `你已选择了${selectBox.length}个资产,确定把它们都从挂载目录上移除吗?`,
onOk: () => { onOk: () => {
dispatch({ dispatch({
type: 'assetmanage.deleteDataAssets', type: 'assetmanage.unloadDataAssets',
payload: {params:{dirId:nodeId},data:selectBox}, payload: {params:{dirId:nodeId},data:selectBox},
callback: dataBox => { callback: dataBox => {
setPageNumber({...pageNumber,page:1,rebuild:new Date().getTime()}) setPageNumber({...pageNumber,page:1,rebuild:new Date().getTime()})
......
...@@ -41,7 +41,7 @@ const ImportElement = (props) => { ...@@ -41,7 +41,7 @@ const ImportElement = (props) => {
setConfirmLoading(true); setConfirmLoading(true);
dispatchLatest({ dispatchLatest({
type: 'dataassetelement.importElement', type: 'assetmanage.importElement',
payload: { fileList }, payload: { fileList },
callback: data => { callback: data => {
setConfirmLoading(false); setConfirmLoading(false);
......
import React, { useEffect, useState } from 'react';
import { Table, Pagination, Space, Tooltip, Button } from 'antd';
import { ReconciliationOutlined, DeleteOutlined, UndoOutlined } from '@ant-design/icons';
import { dispatchLatest } from '../../../model';
import AssetDetail from '../AssetManage/components/AssetDetail';
import './index.less';
const AssetRecycle = (props) => {
const [ loading, setLoading ] = useState(false);
const [ assets, setAssets ] = useState([]);
const [ total, setTotal ] = useState(0);
const [ pagination, setPagination ] = useState( { pageNum: 1, pageSize: 20 } );
const [ currentAsset, setCurrentAsset ] = useState(null);
const [ assetDetailVisible, setAssetDetailVisible ] = useState(false);
const { pageNum, pageSize } = pagination;
useEffect(() => {
getAssets();
//eslint-disable-next-line react-hooks/exhaustive-deps
}, [ pagination ])
const columns = [
{
title: '序号',
dataIndex: 'key',
render: (text, record, index) => {
return (index+1).toString();
},
width:80
},
{
title: '中文名称',
dataIndex: 'cnName',
},
{
title: '英文名称',
dataIndex: 'name',
},
{
title: '说明'
},
{
title: '操作',
key: 'action',
width: 120,
render: (text,record) => {
return (
<Space size='small'>
<Tooltip placement='bottom' title='详情'>
<Button icon={<ReconciliationOutlined />} size='small' onClick={() => { detailItem(record); }} />
</Tooltip>
<Tooltip placement='bottom' title='挂载'>
<Button icon={<UndoOutlined />} size='small' onClick={() => { recycleItem(record); }} />
</Tooltip>
<Tooltip placement='bottom' title='删除'>
<Button icon={<DeleteOutlined />} size='small' onClick={() => { deleteItem(record); }} />
</Tooltip>
</Space>
)
}
}
]
const getAssets = () => {
setLoading(true);
dispatchLatest({
type: 'assetmanage.listRecycleBinDataAssetsByPage',
payload: {
pageNum,
pageSize
},
callback: data => {
setAssets(data.data||[]);
setTotal(data.total);
setLoading(false);
},
error: () => {
setLoading(false);
}
})
}
const detailItem = (record) => {
setCurrentAsset(record);
setAssetDetailVisible(true);
}
const recycleItem = (record) => {
}
const deleteItem = (record) => {
}
const onAssetDetailCancel = () => {
setAssetDetailVisible(false);
}
return (
<div className='asset-recycle p-3' style={{ backgroundColor: '#fff' }}>
<Table
loading={loading}
columns={columns}
rowKey={'id'}
dataSource={assets||[]}
pagination={false}
/>
<Pagination
size="small"
className="text-center mt-3"
showSizeChanger
showQuickJumper
onChange={(_pageNum, _pageSize) => {
setPagination({ pageNum: _pageNum, pageSize: _pageSize || 10 });
}}
onShowSizeChange={(_pageNum, _pageSize) => {
setPagination({ pageNum: _pageNum || 1, pageSize: _pageSize });
}}
current={pageNum}
pageSize={pageSize}
defaultCurrent={1}
total={total}
showTotal={total => `共 ${total} 条`}
/>
<AssetDetail
visible={ assetDetailVisible }
item = { currentAsset }
onCancel = { onAssetDetailCancel }
/>
</div>
);
}
export default AssetRecycle;
\ No newline at end of file
.asset-recycle {
height: calc(100vh - 64px - 30px) !important;
}
\ No newline at end of file
...@@ -8,14 +8,9 @@ import { ManageLayout } from "../../layout"; ...@@ -8,14 +8,9 @@ import { ManageLayout } from "../../layout";
import Map from './Map'; import Map from './Map';
import Model from './Model'; import Model from './Model';
import AssetManage from './AssetManage'; import AssetManage from './AssetManage';
import AssetRecycle from './AssetRecycle';
class Manage extends Component { class Manage extends Component {
constructor(props) {
super(props);
this.state = {};
}
componentDidMount() {}
render() { render() {
const { match } = this.props const { match } = this.props
...@@ -28,9 +23,10 @@ class Manage extends Component { ...@@ -28,9 +23,10 @@ class Manage extends Component {
content={ content={
session && session.userId ? ( session && session.userId ? (
<Switch> <Switch>
<Route path={`${match.path}/map`} component={Map} /> <Route path={`${match.path}/data-model`} component={Model} />
<Route path={`${match.path}/model`} component={Model} /> <Route path={`${match.path}/asset-map`} component={Map} />
<Route path={`${match.path}/assetmanage`} component={AssetManage} /> <Route path={`${match.path}/asset-manage`} component={AssetManage} />
<Route path={`${match.path}/asset-recycle`} component={AssetRecycle} />
</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