政务数据资源中心(Government data Resource center) 03专项3期主要建设内容
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

186 lines
8.0 KiB

import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import { Tabs, Spin, Table, Button, Divider, message } from 'antd';
import moment from 'moment';
import { push } from 'react-router-redux';
import MetadataDatabaseModal from '../components/metadataDatabModal';
import { ModelTypes, ConfigurableTypes } from '../constants/index';
const MetadataDetails = (props) => {
const { user, actions, dispatch, clientHeight, metadataModels, isRequesting, resourceCatalogPath, match } = props;
const { metadataManagement } = actions;
const [activeKey, setActiveKey] = useState('info');
const [databasesRecord, setDatabasesRecord] = useState(null);
const [databasesRecordId, setDatabasesRecordId] = useState(null);
const [tableData, setTableData] = useState([]);
const [tableDataCount, setTableDataCount] = useState(0);//Table数据
const [limit, setLimit] = useState(10);
const [currentPage, setCurrentPage] = useState(1);
const [modalVisible, setModalVisible] = useState(false);
const [editData, setEditData] = useState({});
const initData = () => {
dispatch(metadataManagement.getMetadataModels({ modelTypes: ModelTypes }));
dispatch(metadataManagement.getMetadataDatabasesById(match.params.id)).then(res => {
if (res.success) {
setDatabasesRecord(res.payload.data);
setDatabasesRecordId(res.payload.data.id);
initTableData({ id: res.payload.data.id, limit, offset: 0 });
}
});
}
useEffect(() => {
setActiveKey('info')
initData();
}, [match.params.id])
const onTabChange = (key) => {
setActiveKey(key)
}
const onView = (record) => {
setDatabasesRecordId(record.id);
dispatch(push(`/metadataManagement/latestMetadata/detail/${record.id}`));
}
const renderBasicInfo = () => {
return databasesRecord ? <div style={{ marginLeft: 24 }}>
{/* <Divider orientation="left" orientationMargin="0" plain>基本信息</Divider> */}
< div style={{ lineHeight: '35px', marginLeft: 32 }}>
<div > 元数据名称<span style={{ color: '#7F7F7F' }}>{databasesRecord.name}</span></div>
<div > 元数据代码<span style={{ color: '#7F7F7F' }}>{databasesRecord.code}</span></div>
<div > 元数据类型<span style={{ color: '#7F7F7F' }}>{databasesRecord.type}</span></div>
<div > 创建时间<span style={{ color: '#7F7F7F' }}>{moment(databasesRecord.createAt).format("YYYY-MM-DD HH:mm:ss")}</span></div>
<div > 修改时间<span style={{ color: '#7F7F7F' }}>{databasesRecord.updateAt ? moment(databasesRecord.updateAt).format("YYYY-MM-DD HH:mm:ss") : ''}</span></div>
<div > 上下文路径<span style={{ color: '#7F7F7F' }}>{'/' + resourceCatalogPath.join('/')}</span></div>
<div > 元数据详情<span style={{ color: '#7F7F7F' }}>{databasesRecord.description}</span></div>
</div >
<Divider orientation="left" orientationMargin="5" plain>属性</Divider>
< div style={{ lineHeight: '35px', marginLeft: 32 }}>
{databasesRecord.attributesParam ? metadataModels && metadataModels.filter(mm => mm.modelType === databasesRecord.type).map(mm =>
<div > {mm.attributeName}<span style={{ color: '#7F7F7F' }}>{databasesRecord.attributesParam[mm.attributeCode]}</span></div>) : ''}
</div >
</div > : <></>
}
const initTableData = (query = {}) => {
dispatch(metadataManagement.getMetadataDatabases({ ...query })).then(res => {
if (res.success) {
setTableData(res.payload.data.rows);
setTableDataCount(res.payload.data.count);
}
})
}
//新建
const onConfirm = (values) => {
let obj = {
parent: databasesRecord.id,
createBy: user.id, catalog: databasesRecord.catalog,
catalogKey: sessionStorage.getItem('jumpSelectedKey'), ...values
}
dispatch(metadataManagement.postMeatadataDatabases(obj)).then(() => {
setCurrentPage(1);
initTableData({ id: databasesRecord.id, limit, offset: 0 });
setModalVisible(false);
});
}
const renderConfigInfo = () => {
const columns = [
{
title: '元数据名称',
dataIndex: 'name',
key: 'name',
ellipsis: true
}, {
title: '元数据代码',
dataIndex: 'code',
key: 'code',
ellipsis: true
}, {
title: '元数据类型',
dataIndex: 'type',
key: 'type',
}, {
title: '操作',
dataIndex: 'action',
render: (text, record) => {
return <a onClick={() => onView(record)}>查看</a>
}
}];
return databasesRecord && ConfigurableTypes['表'].includes(databasesRecord.type) ? null : <Spin spinning={isRequesting}>
<div style={{ marginBottom: 16 }}>
<Button type='primary' onClick={() => {
setEditData({ add: true, title: '新建库表元数据', record: { path: '/' + resourceCatalogPath.join('/'), type: ConfigurableTypes[databasesRecord.type][0] } });
setModalVisible(true);
}}>新建</Button>
</div>
<Table
scroll={{ y: clientHeight - 320 }}
rowKey='id'
columns={columns}
dataSource={tableData}
pagination={{
current: currentPage,
pageSize: limit,
total: tableDataCount,
showSizeChanger: true,
// showQuickJumper: true,
showTotal: (total) => { return <span style={{ fontSize: 15 }}>{`${Math.ceil(total / limit)} 页,${total}`}</span> },
onShowSizeChange: (currentPage, pageSize) => {
setCurrentPage(currentPage);
setLimit(pageSize);
},
onChange: (page, pageSize) => {
setCurrentPage(page);
setLimit(pageSize);
let queryParams = {
id: databasesRecord.id,
page: page - 1,
size: pageSize
};
initTableData(queryParams);
}
}}
>
</Table>
{
modalVisible ?
<MetadataDatabaseModal
modelTypes={ConfigurableTypes[databasesRecord.type]}
metadataModels={metadataModels.filter(m => ConfigurableTypes[databasesRecord.type].includes(m.modelType))}
editData={editData}
onCancel={() => setModalVisible(false)}
onConfirm={onConfirm} /> : ''
}
</Spin >
}
return <div>
<Tabs defaultActiveKey="info"
onChange={onTabChange}
activeKey={activeKey}
items={[
{
label: <span>基本信息</span>,
key: 'info', children: renderBasicInfo()
},
{
label: <span>组合</span>,
key: 'detailConfig', children: renderConfigInfo()
}
]}>
</Tabs>
{
}
</div >
}
function mapStateToProps(state) {
const { global, auth, metadataModels } = state;
return {
user: auth.user,
actions: global.actions,
clientHeight: global.clientHeight,
isRequesting: metadataModels.isRequesting,
metadataModels: metadataModels.data,
};
}
export default connect(mapStateToProps)(MetadataDetails)