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/metadataDatabaseModal';
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.join(',') }));
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={{ lineHeight: '35px', marginLeft: 32 }}>
元数据名称:{databasesRecord.name}
元数据代码:{databasesRecord.code}
元数据类型:{databasesRecord.type}
创建时间:{moment(databasesRecord.createAt).format("YYYY-MM-DD HH:mm:ss")}
修改时间:{databasesRecord.updateAt ? moment(databasesRecord.updateAt).format("YYYY-MM-DD HH:mm:ss") : ''}
上下文路径:{'/' + resourceCatalogPath.join('/')}
元数据详情:{databasesRecord.description}
属性
< div style={{ lineHeight: '35px', marginLeft: 32 }}>
{metadataModels && metadataModels.filter(mm => mm.modelType === databasesRecord.type).map(mm =>
{mm.attributeName.length > 10 ? mm.attributeName.substring(0, 10) + '...' : mm.attributeName}:
{databasesRecord.attributesParam && databasesRecord.attributesParam[mm.attributeCode] || ''}
)}
: <>>
}
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.postMetadataDatabases(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 onView(record)}>查看
}
}];
return databasesRecord && (ConfigurableTypes['表'].includes(databasesRecord.type) || databasesRecord.type === '视图') ? null :
{ return {`共${Math.ceil(total / limit)} 页,${total} 项`} },
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);
}
}}
>
{
modalVisible ?
ConfigurableTypes[databasesRecord.type].includes(m.modelType))}
editData={editData}
onCancel={() => setModalVisible(false)}
onConfirm={onConfirm} /> : ''
}
}
return
基本信息,
key: 'info', children: renderBasicInfo()
},
{
label: 组合,
key: 'detailConfig', children: renderConfigInfo()
}
]}>
{
}
}
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)