import Service from '@/pages/system/DataSource/service'; import { PageContainer } from '@ant-design/pro-layout'; import SearchComponent from '@/components/SearchComponent'; import type { ActionType, ProColumns } from '@jetlinks/pro-table'; import ProTable from '@jetlinks/pro-table'; import { Badge, Popconfirm } from 'antd'; import { DeleteOutlined, EditOutlined, PlayCircleOutlined, PlusOutlined, StopOutlined, } from '@ant-design/icons'; import { useIntl } from '@@/plugin-locale/localeExports'; import { useEffect, useRef, useState } from 'react'; import { observer } from '@formily/react'; import { AIcon, PermissionButton } from '@/components'; import usePermissions from '@/hooks/permission'; import Save from './Save'; import { Store } from 'jetlinks-store'; import { getMenuPathByCode, MENUS_CODE } from '@/utils/menu'; import { useHistory } from 'umi'; import { useDomFullHeight } from '@/hooks'; import { onlyMessage } from '@/utils/util'; export const service = new Service('datasource/config'); const DataSource = observer(() => { const intl = useIntl(); const actionRef = useRef(); const history = useHistory>(); const { permission: userPermission } = usePermissions('system/DataSource'); const [visible, setVisible] = useState(false); const [current, setCurrent] = useState>({}); const { minHeight } = useDomFullHeight(`.datasource`, 24); useEffect(() => { service.getType().then((res) => { if (res.status === 200) { const list = res?.result.map((pItem: any) => ({ label: pItem.name, value: pItem.id })); Store.set('datasource-type', list); } }); }, []); const columns: ProColumns[] = [ { title: '名称', dataIndex: 'name', ellipsis: true, fixed: 'left', width: 250, }, { title: '类型', dataIndex: 'typeId', ellipsis: true, valueType: 'select', request: async () => { const res = await service.getType(); if (res.status === 200) { const list = res.result.map((pItem: any) => ({ label: pItem.name, value: pItem.id })); return list; } return []; }, render: (_, row) => (Store.get('datasource-type') || []).find((item: any) => row.typeId === item.value) ?.label || row.typeId, filterMultiple: true, }, { dataIndex: 'description', title: '说明', ellipsis: true, }, { title: intl.formatMessage({ id: 'pages.searchTable.titleStatus', defaultMessage: '状态', }), dataIndex: 'state', valueType: 'select', width: 120, valueEnum: { enabled: { text: intl.formatMessage({ id: 'pages.searchTable.titleStatus.normal', defaultMessage: '正常', }), status: 'enabled', }, disabled: { text: intl.formatMessage({ id: 'pages.searchTable.titleStatus.disable', defaultMessage: '已禁用', }), status: 'disabled', }, }, render: (_, record) => ( ), }, { title: intl.formatMessage({ id: 'pages.data.option', defaultMessage: '操作', }), valueType: 'option', width: 200, fixed: 'right', render: (_, record) => [ { setCurrent(record); setVisible(true); }} tooltip={{ title: intl.formatMessage({ id: 'pages.data.option.edit', defaultMessage: '编辑', }), }} > , { const url = getMenuPathByCode(MENUS_CODE[`system/DataSource/Management`]); history.push(`${url}?id=${record.id}`); }} tooltip={{ title: record?.typeId === 'rabbitmq' ? '暂不支持管理功能' : record.state?.value !== 'enabled' ? '请先启用数据源' : '管理', }} > , { const resp = await service.changeStatus( record.id, record.state?.value === 'enabled' ? 'disable' : 'enable', ); if (resp.status === 200) { onlyMessage( intl.formatMessage({ id: 'pages.data.option.success', defaultMessage: '操作成功!', }), ); actionRef.current?.reload(); } }, }} tooltip={{ title: intl.formatMessage({ id: `pages.data.option.${record.state?.value === 'enabled' ? 'disabled' : 'enabled'}`, defaultMessage: record.state?.value === 'enabled' ? '禁用' : '启用', }), }} > {record.state?.value === 'enabled' ? : } , { const resp: any = await service.remove(record.id); if (resp.status === 200) { onlyMessage( intl.formatMessage({ id: 'pages.data.option.success', defaultMessage: '操作成功!', }), ); actionRef.current?.reload(); } }} title="确认删除?" > , ], }, ]; const [param, setParam] = useState({}); return ( field={columns} target="datasource" onSearch={(data) => { // 重置分页数据 actionRef.current?.reset?.(); setParam(data); }} /> actionRef={actionRef} params={param} columns={columns} search={false} rowKey="id" columnEmptyText={''} scroll={{ x: 1366 }} tableClassName={'datasource'} tableStyle={{ minHeight }} headerTitle={ { setCurrent({}); setVisible(true); }} isPermission={userPermission.add} key="add" icon={} type="primary" > {intl.formatMessage({ id: 'pages.data.option.add', defaultMessage: '新增', })} } request={async (params) => service.query({ ...params, sorts: [{ name: 'createTime', order: 'desc' }] }) } /> {visible && ( { setVisible(false); }} data={current} reload={() => { setVisible(false); actionRef.current?.reload(); }} /> )} ); }); export default DataSource;