import { PageContainer } from '@ant-design/pro-layout'; import { observer } from '@formily/react'; import { model } from '@formily/reactive'; import { useIntl } from '@@/plugin-locale/localeExports'; import { useDomFullHeight } from '@/hooks'; import { useEffect, useState } from 'react'; import { Empty, PermissionButton } from '@/components'; import { ProColumns } from '@jetlinks/pro-table'; import service from '@/pages/DataCollect/service'; import SearchComponent from '@/components/SearchComponent'; import { Card, Col, Pagination, Row } from 'antd'; import ChannelCard from '@/components/ProTableCard/CardItems/DataCollect/channel'; import { DeleteOutlined, EditOutlined, PlayCircleOutlined, StopOutlined } from '@ant-design/icons'; import { onlyMessage } from '@/utils/util'; import Save from '@/pages/DataCollect/Channel/Save'; import { getMenuPathByCode, MENUS_CODE } from '@/utils/menu'; import useHistory from '@/hooks/route/useHistory'; const ChannelModel = model<{ visible: boolean; current: Partial; currentPage: number; }>({ visible: false, current: {}, currentPage: 0, }); export default observer(() => { const intl = useIntl(); const { minHeight } = useDomFullHeight(`.data-collect-channel-card`, 24); const [param, setParam] = useState({ pageSize: 12, terms: [] }); const { permission } = PermissionButton.usePermission('DataCollect/Channel'); const [loading, setLoading] = useState(true); const [dataSource, setDataSource] = useState({ data: [], pageSize: 12, pageIndex: 0, total: 0, }); const history = useHistory(); const columns: ProColumns[] = [ { title: '通道名称', dataIndex: 'name', }, { title: '通讯协议', dataIndex: 'provider', valueType: 'select', valueEnum: { OPC_UA: { text: 'OPC_UA', status: 'OPC_UA', }, MODBUS_TCP: { text: 'MODBUS_TCP', status: 'MODBUS_TCP', }, }, }, { title: '状态', dataIndex: 'state', valueType: 'select', valueEnum: { enabled: { text: '正常', status: 'enabled', }, disabled: { text: '禁用', status: 'disabled', }, }, }, { title: '运行状态', dataIndex: 'runningState', valueType: 'select', valueEnum: { running: { text: '运行中', status: 'running', }, partialError: { text: '部分错误', status: 'partialError', }, failed: { text: '错误', status: 'failed', }, // stopped: { // text: '已停止', // status: 'stopped', // }, }, }, { title: '说明', dataIndex: 'description', }, ]; const handleSearch = (params: any) => { setLoading(true); setParam(params); service .queryChannel({ ...params, sorts: [{ name: 'createTime', order: 'desc' }] }) .then((resp) => { if (resp.status === 200) { setDataSource(resp.result); } setLoading(false); }); }; useEffect(() => { handleSearch(param); }, []); const getState = (record: Partial) => { if (record) { if (record?.state?.value === 'enabled') { return { ...record?.runningState }; } else { return { text: '禁用', value: 'disabled', }; } } else { return {}; } }; const onPageChange = (page: number, size: number) => { if (ChannelModel.currentPage === size) { handleSearch({ ...param, pageIndex: page - 1, pageSize: size, }); } else { ChannelModel.currentPage = size; handleSearch({ ...param, pageIndex: 0, pageSize: size, }); } }; return ( field={columns} target="data-collect-channel" onSearch={(data) => { const dt = { pageSize: 12, terms: [...data?.terms], }; handleSearch(dt); }} />
{ ChannelModel.visible = true; ChannelModel.current = {}; }} key="button" type="primary" > 新增通道
{dataSource?.data.length > 0 ? ( {(dataSource?.data || []).map((record: any) => ( { ChannelModel.current = record; ChannelModel.visible = true; }} key={'edit'} isPermission={permission.update} > {intl.formatMessage({ id: 'pages.data.option.edit', defaultMessage: '编辑', })} , { const resp = record?.state?.value !== 'disabled' ? await service.updateChannel(record.id, { state: 'disabled', runningState: 'stopped', }) : await service.updateChannel(record.id, { state: 'enabled', runningState: 'running', }); if (resp.status === 200) { onlyMessage('操作成功!'); handleSearch(param); } else { onlyMessage('操作失败!', 'error'); } }, }} > {record?.state?.value !== 'disabled' ? ( ) : ( )} {intl.formatMessage({ id: `pages.data.option.${ record?.state?.value !== 'disabled' ? 'disabled' : 'enabled' }`, defaultMessage: record?.state?.value !== 'disabled' ? '禁用' : '启用', })} , { await service.removeChannel(record.id); handleSearch(param); onlyMessage( intl.formatMessage({ id: 'pages.data.option.success', defaultMessage: '操作成功!', }), ); }, }} > , ]} onClick={() => { const url = getMenuPathByCode(MENUS_CODE['DataCollect/Collector']); history.push(url, { channelId: record.id }); }} /> ))} ) : (
)}
{dataSource?.data?.length > 0 && (
{ onPageChange(page, size); }} onShowSizeChange={(current, size) => { handleSearch({ ...param, pageIndex: 1, pageSize: size, }); }} pageSizeOptions={[12, 24, 48, 96]} pageSize={dataSource?.pageSize} showTotal={(num) => { const minSize = dataSource?.pageIndex * dataSource?.pageSize + 1; const MaxSize = (dataSource?.pageIndex + 1) * dataSource?.pageSize; return `第 ${minSize} - ${MaxSize > num ? num : MaxSize} 条/总共 ${num} 条`; }} />
)}
{ChannelModel.visible && ( { ChannelModel.visible = false; }} reload={() => { ChannelModel.visible = false; handleSearch(param); }} /> )}
); });