import React, { useEffect, useState } from 'react'; import { connect } from 'react-redux'; import { Spin, Table, Popconfirm, Button, Input, Row, Col } from 'antd'; import { ButtonGroup } from '$components'; import MetadataRestapiModal from '../components/metadataRestapiModal'; import MetadataTagModal from '../components/metadataTagModal'; import MetadataResourceModal from '../components/metadataResourceModal'; const RestapisTable = (props) => { const { user, dispatch, actions, clientHeight, resourceCatalogId, resourceCatalogKey, isRequesting, metadataModels, tagList, metadataResourceApplications, params } = props; const { metadataManagement } = actions; const [tableData, setTableData] = useState([]); const [tableDataCount, setTableDataCount] = useState(0);//Table数据 const [keywords, setKeywords] = useState(''); const [limit, setLimit] = useState(10); const [currentPage, setCurrentPage] = useState(1); const [modalVisible, setModalVisible] = useState(false); const [editData, setEditData] = useState({}); const [tagModalVisible, setTagModalVisible] = useState(false); const [editTagData, setEditTagData] = useState({}); const [resourceModalVisible, setResourceModalVisible] = useState(false); const [editResourceData, setEditResourceData] = useState({}); useEffect(() => { dispatch(metadataManagement.getTagList()); initData({ limit, offset: currentPage - 1 }); }, []); const initData = (query = {}) => { dispatch(metadataManagement.getMetadataRestapis({ resourceId: params?.type == 'restapis' ? params?.resourceId : null, catalog: resourceCatalogId, keywords, ...query })).then(res => { if (res.success) { setTableData(res.payload.data.rows); setTableDataCount(res.payload.data.count); let resourceNames = []; res.payload.data.rows.map(r => { resourceNames.push(r.name); }) if (resourceNames.length) dispatch(metadataManagement.getMetadataResourceApplications({ resourceNames: resourceNames.join(','), type: '接口' })) } }) } const onEdit = (record) => { dispatch(metadataManagement.getMetadataModels({ modelTypes: '接口' })).then(res => { if (res.success) { setEditData({ title: '修改接口元数据', record: { ...record, ...record.attributesParam } }); setModalVisible(true); } }) } const confirmDelete = (id) => { dispatch(metadataManagement.delMetadataRestapis(id)).then(res => { if (res.success) { onSearch(); setModalVisible(false); } }); } const marking = (id) => { dispatch(metadataManagement.getTagMetadata(id, 'restapi')).then(res => { if (res.success) { const obj = { tagSet: [], tags: [], id: id }; if (res.payload.data.length) { const tagSetIds = res.payload.data.map(d => d.tagSet) obj.tagSet = [...new Set(tagSetIds)]; obj.tags = res.payload.data.map(d => d.id); } setEditTagData({ record: obj }); setTagModalVisible(true); } }) } const onConfirmTag = (values) => { dispatch(metadataManagement.postTagMetadata({ restapi: editTagData.record.id, ...values })).then(res => { if (res.success) { onSearch(); setTagModalVisible(false); } }); } const applyResources = (record) => { setEditResourceData({ record: { resourceId: record.id, resourceName: record.name, applyBy: user.id, applyByName: user.name, resourceType: '接口' } }); setResourceModalVisible(true); } const onConfirmResource = (values) => { dispatch(metadataManagement.postMetadataResourceApplications(values)).then(res => { if (res.success) { onSearch(); setResourceModalVisible(false); } }); } const columns = [{ title: '接口名称', dataIndex: 'name', key: 'name', ellipsis: true, width: '23%' }, { title: '接口路由', dataIndex: 'url', key: 'url', ellipsis: true, width: '23%' }, { title: '接口类型', dataIndex: 'method', key: 'method', width: '10%' }, { title: '传参', dataIndex: 'queryParam', key: 'queryParam', ellipsis: true, width: '20%' }, { title: '返回值', dataIndex: 'return', key: 'return', ellipsis: true, width: '23%' }, { title: '标签', dataIndex: 'tags', key: 'tags', width: '23%', ellipsis: true, render: (text, record, index) => { let tagName = record.tagRestapis.map(tagSet => tagSet.tag.name); return tagName.join(','); } }, { title: '状态', dataIndex: 'enabled', key: 'enabled', width: '10%', render: (text) => {text ? '启用' : '禁用'} }, { title: '操作', dataIndex: 'action', width: '8%', render: (text, record) => { let resourceApplicationsRecords = metadataResourceApplications.filter(ra => ra.applyBy == user.id && ra.resourceName === record.name && ra.resourceId == record.id); return {user.role == '数据消费者' ? null : <> onEdit(record)}>编辑 confirmDelete(record.id)} > 删除 marking(record.id)}>打标 } {user.role == '系统管理员' ? '' : resourceApplicationsRecords.length === 0 ? applyResources(record)}>申请资源 : 申请资源} } }]; const onSearch = () => { setCurrentPage(1); initData({ limit, offset: 0 }); } //新建、修改 const onConfirm = (values) => { let obj = {} if (editData.add) { obj = { createBy: user.id, catalog: resourceCatalogId, catalogKey: resourceCatalogKey, ...values } dispatch(metadataManagement.postMetadataRestapis(obj)).then(res => { if (res.success) { onSearch(); setModalVisible(false); } }); } else { obj = { catalog: resourceCatalogId, catalogKey: resourceCatalogKey, ...values } dispatch(metadataManagement.putMetadataRestapis(editData.record.id, obj)).then(res => { if (res.success) { onSearch(); setModalVisible(false); } }); } } return {user.role == '数据消费者' ? null : <> } setKeywords(e.target.value || '')} /> { return {`共${Math.ceil(total / limit)}页,${total}项`} }, onShowSizeChange: (currentPage, pageSize) => { setCurrentPage(currentPage); setLimit(pageSize); }, onChange: (page, pageSize) => { setCurrentPage(page); setLimit(pageSize); let queryParams = { offset: page - 1, limit: pageSize }; initData(queryParams); } }} >
{ modalVisible ? m.modelType === '接口')} editData={editData} onCancel={() => { setModalVisible(false); }} onConfirm={onConfirm} /> : '' } { tagModalVisible ? setTagModalVisible(false)} onConfirm={onConfirmTag} /> : '' } { resourceModalVisible ? setResourceModalVisible(false)} onConfirm={onConfirmResource} /> : '' }
} function mapStateToProps(state) { const { global, auth, metadataRestapis, metadataModels, tagList, tagMetadata, metadataResourceApplications } = state; return { user: auth.user, actions: global.actions, clientHeight: global.clientHeight, isRequesting: metadataRestapis.isRequesting || metadataModels.isRequesting || tagList.isRequesting || tagMetadata.isRequesting || metadataResourceApplications.isRequesting, metadataModels: metadataModels.data, tagList: tagList.data || [], metadataResourceApplications: metadataResourceApplications.data || [] }; } export default connect(mapStateToProps)(RestapisTable)