import React, { useEffect, useState } from 'react'; import { connect } from 'react-redux'; import { Spin, Table, Popconfirm, Button, Input } from 'antd'; import moment from 'moment'; import FileSaver from 'file-saver'; import BusinessDatabaseModal from '../components/businessDatabaseModal'; const BusinessFilesTable = (props) => { const { user, dispatch, actions, clientHeight, resourceCatalogId, resourceCatalogPath, isRequesting, metadataModels } = props; const { metadataManagement } = actions; const SortValues = { 'ascend': 'asc', 'descend': 'desc' }; const [tableData, setTableData] = useState([]); const [tableDataCount, setTableDataCount] = useState(0);//Table数据 const [updateAtSort, setUpdateAtSort] = useState('descend'); const [keywords, setKeywords] = useState(''); const [limit, setLimit] = useState(10); const [currentPage, setCurrentPage] = useState(1); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [selectedRows, setSelectedRows] = useState([]); const [modalVisible, setModalVisible] = useState(false); const [editData, setEditData] = useState({}); useEffect(() => { setUpdateAtSort('descend'); onSearch('descend'); }, []); const initData = (query = {}) => { dispatch(metadataManagement.getBusinessMetadataRestapis({ catalog: resourceCatalogId, keywords, orderBy: 'updateAt', ...query })).then(res => { if (res.success) { setTableData(res.payload.data.rows); setTableDataCount(res.payload.data.count); } }) } const onAdd = (record, add) => { dispatch(metadataManagement.getMetadataModels({ modelTypes: '接口' })).then(res => { if (res.success) { if (!add) setEditData({ title: '查看业务元数据', record: { path: '/' + resourceCatalogPath.join('/'), businessMetadata: record.businessMetadataRestapis, ...record, ...record.attributesParam } }); else setEditData({ add: true, title: '新建业务元数据', record: { businessMetadata: record.businessMetadataRestapis, ...record } }); setModalVisible(true); } }) } const confirmDelete = (id) => { dispatch(metadataManagement.delBusinessMetadataRestapis(id)).then(res => { if (res.success) { onSearch(); setModalVisible(false); } }); } const onTableChange = (pagination, filters, sorter) => { let limit = Number.parseInt(pagination.pageSize); let offset = Number.parseInt(pagination.current) - 1; setCurrentPage(pagination.current); setLimit(limit); let query = { offset, limit, orderDirection: SortValues[updateAtSort] }; if (sorter.columnKey === 'updateAt') { query.orderDirection = SortValues[sorter.order]; setUpdateAtSort(sorter.order); } setSelectedRowKeys([]); setSelectedRows([]); initData(query); } const columns = [ { title: '元数据名称', dataIndex: 'name', key: 'name', ellipsis: true, fixed: 'left', width: '7%', }, { title: '元数据类型', dataIndex: 'type', key: 'type', fixed: 'left', width: '6%', render: (text, record, index) => { return '接口' } }, { title: '信息资源名称', dataIndex: 'resourceName', key: 'resourceName', ellipsis: true, render: (text, record, index) => { let data = record.businessMetadataRestapis; if (data && data.length) return data[0].resourceName; else return '' } }, { title: '信息资源摘要', dataIndex: 'resourceAbstract', key: 'resourceAbstract', ellipsis: true, render: (text, record, index) => { let data = record.businessMetadataRestapis; if (data && data.length) return data[0].resourceAbstract; else return '' } }, { title: '信息资源提供方', dataIndex: 'resourceProvider', key: 'resourceProvider', ellipsis: true, render: (text, record, index) => { let data = record.businessMetadataRestapis; if (data && data.length) return data[0].resourceProvider; else return '' } }, { title: '信息资源分类', dataIndex: 'resourceCategory', key: 'resourceCategory', ellipsis: true, render: (text, record, index) => { let data = record.businessMetadataRestapis; if (data && data.length) return data[0].resourceCategory; else return '' } }, { title: '信息资源标识符', dataIndex: 'resourceId', key: 'resourceId', ellipsis: true, render: (text, record, index) => { let data = record.businessMetadataRestapis; if (data && data.length) return data[0].resourceId; else return '' } }, { title: '元数据标识符', dataIndex: 'metadataId', key: 'metadataId', ellipsis: true, render: (text, record, index) => { let data = record.businessMetadataRestapis; if (data && data.length) return data[0].metadataId; else return '' } }, { title: '创建者', dataIndex: 'createBy', key: 'createBy', ellipsis: true, render: (text, record, index) => { let data = record.businessMetadataRestapis; if (data && data.length) return data[0].user.username; else return '' } }, { title: '最后执行时间', dataIndex: 'updateAt', key: 'updateAt', width: '8%', sortOrder: updateAtSort, sorter: (a, b) => moment(a.updateAt).valueOf() - moment(b.updateAt).valueOf(), sortDirections: ['descend', 'ascend', 'descend'], render: (text, record, index) => { let data = record.businessMetadataRestapis; if (data && data.length) return data[0].updateAt && moment(data[0].updateAt).format('YYYY-MM-DD HH:mm:ss') else return '' } }, { title: '操作', dataIndex: 'action', width: '5%', fixed: 'right', render: (text, record) => { if (record.businessMetadataRestapis.length) { return
onAdd(record, false)}>查看 confirmDelete(record.businessMetadataRestapis[0].id)} > 删除
} else return onAdd(record, true)}>新建 } }]; const onSearch = (sort) => { setSelectedRowKeys([]); setSelectedRows([]); setCurrentPage(1); initData({ limit, offset: 0, orderDirection: SortValues[sort || updateAtSort] }); } const handleExport = (isAll = false) => { let tableHeader = ``; columns.filter(c => c.dataIndex != 'action').map(c => { tableHeader += `
${c.title}
`; }); tableHeader += ''; if (isAll) { dispatch(metadataManagement.getBusinessMetadataRestapis({ catalog: resourceCatalogId })).then(res => { if (res.success) { handleExportTable(tableHeader, res.payload.data.rows); } }) } else { let data = [] if (updateAtSort === 'descend') { data = selectedRows.sort((a, b) => moment(b.updateAt).valueOf() - moment(a.updateAt).valueOf()); } else { data = selectedRows.sort((a, b) => moment(a.updateAt).valueOf() - moment(b.updateAt).valueOf()); } handleExportTable(tableHeader, data); } } const handleExportTable = (tableHeader, contentData) => { let tableContent = ''; contentData.map(cd => { tableContent += ``; tableContent += `
${cd.name}
`; tableContent += `
接口
`; let data = cd.businessMetadataRestapis; tableContent += `
${data && data.length && data[0].resourceName || ''}
`; tableContent += `
${data && data.length && data[0].resourceAbstract || ''}
`; tableContent += `
${data && data.length && data[0].resourceProvider || ''}
`; tableContent += `
${data && data.length && data[0].resourceCategory || ''}
`; tableContent += `
${data && data.length && data[0].resourceId || ''}
`; tableContent += `
${data && data.length && data[0].metadataId || ''}
`; tableContent += `
${data && data.length && data[0].user.username || ''}
`; tableContent += `
${data && data.length && data[0].updateAt && moment(data[0].updateAt).format('YYYY-MM-DD HH:mm:ss') || ''}
`; tableContent += ``; }) let exportTable = `\uFEFF ${tableHeader} ${tableContent}
`; let tempStr = new Blob([exportTable], { type: 'text/plain;charset=utf-8' }); FileSaver.saveAs(tempStr, `接口业务元数据导出.xls`); } //新建、修改 const onConfirm = (values) => { let obj = {} if (editData.add) { obj = { createBy: user.id, metadataRestapiId: editData.record.id, ...values } dispatch(metadataManagement.postBusinessMetadataRestapis(obj)).then(res => { if (res.success) { onSearch(); setModalVisible(false); } }); } else { obj = { ...values } dispatch(metadataManagement.putBusinessMetadataRestapis(editData.record.businessMetadataRestapis[0].id, obj)).then(res => { if (res.success) { onSearch(); setModalVisible(false); } }); } } return
{ tableDataCount == 0 ? : selectedRowKeys && selectedRowKeys.length ? : handleExport(true)} okText="确定" cancelText="取消"> } setKeywords(e.target.value || '')} />
{ return {`共${Math.ceil(total / limit)}页,${total}项`} }, }} rowSelection={{ onChange: (selectedRowKeys, selectedRows) => { setSelectedRowKeys(selectedRowKeys) setSelectedRows(selectedRows); }, selectedRowKeys: selectedRowKeys }} >
{ modalVisible ? '接口' === m.modelType)} editData={editData} onCancel={() => setModalVisible(false)} onConfirm={onConfirm} resourceCatalogPath={resourceCatalogPath} businessType='接口' /> : '' }
} function mapStateToProps(state) { const { global, auth, businessMetadataRestapis, metadataModels } = state; return { user: auth.user, actions: global.actions, clientHeight: global.clientHeight, isRequesting: businessMetadataRestapis.isRequesting || metadataModels.isRequesting, metadataModels: metadataModels.data }; } export default connect(mapStateToProps)(BusinessFilesTable)