import { PageContainer } from '@ant-design/pro-layout'; import React, { useRef, useState } from 'react'; import type { ActionType, ProColumns } from '@jetlinks/pro-table'; import type { SceneItem } from '@/pages/rule-engine/Scene/typings'; import { DeleteOutlined, EditOutlined, LikeOutlined, PlayCircleOutlined, PlusOutlined, StopOutlined, } from '@ant-design/icons'; import { PermissionButton, ProTableCard } from '@/components'; import SearchComponent from '@/components/SearchComponent'; import SceneCard from '@/components/ProTableCard/CardItems/Scene'; import Service from './service'; import { useIntl } from 'umi'; import { onlyMessage } from '@/utils/util'; import useHistory from '@/hooks/route/useHistory'; import Save from './Save/save'; import { getMenuPathByCode } from '@/utils/menu'; // import { Spin } from 'antd'; export const service = new Service('scene'); const Scene = () => { const intl = useIntl(); const actionRef = useRef(); const { permission } = PermissionButton.usePermission('rule-engine/Scene'); const [searchParams, setSearchParams] = useState({}); const [visible, setVisible] = useState(false); const [current, setCurrent] = useState>({}); const history = useHistory(); const deleteById = async (id: string) => { // const alarmResp = await service.sceneByAlarm(id); // if (alarmResp.status === 200 && !alarmResp.result) { const resp: any = await service.remove(id); if (resp.status === 200) { actionRef.current?.reload(); } // } else { // onlyMessage('该场景已绑定告警,不可删除', 'warning'); // } }; const Tools = (record: SceneItem): React.ReactNode[] => { return [ { setVisible(true); setCurrent(record); }} > {intl.formatMessage({ id: 'pages.data.option.edit', defaultMessage: '编辑', })} , record.triggerType === 'manual' && ( { await service._execute(record.id); onlyMessage( intl.formatMessage({ id: 'pages.data.option.success', defaultMessage: '操作成功!', }), ); actionRef.current?.reload(); }, }} > {'手动触发'} ), { if (record.state.value !== 'started') { const resp = await service.startScene(record.id); if (resp.status === 200) { onlyMessage( intl.formatMessage({ id: 'pages.data.option.success', defaultMessage: '操作成功!', }), ); actionRef.current?.reload(); } } else { const resp = await service.stopScene(record.id); if (resp.status === 200) { onlyMessage( intl.formatMessage({ id: 'pages.data.option.success', defaultMessage: '操作成功!', }), ); actionRef.current?.reload(); } } }, }} > {record.state.value === 'started' ? : } {intl.formatMessage({ id: `pages.data.option.${record.state.value === 'started' ? 'disable' : 'enabled'}`, defaultMessage: record.state.value === 'started' ? '禁用' : '启用', })} , : title, // okButtonProps: { // loading: loading, // }, title: '确定删除?', disabled: record.state.value === 'started', onConfirm: () => { deleteById(record.id); }, }} tooltip={{ title: record.state.value === 'started' ? 请先禁用该场景,再删除 : '', }} > , ]; }; const columns: ProColumns[] = [ { dataIndex: 'name', fixed: 'left', ellipsis: true, width: 300, title: intl.formatMessage({ id: 'pages.table.name', defaultMessage: '名称', }), }, { dataIndex: 'triggerType', title: intl.formatMessage({ id: 'pages.ruleEngine.scene.triggers', defaultMessage: '触发方式', }), valueType: 'select', valueEnum: { manual: { text: '手动触发', status: 'manual', }, timer: { text: '定时触发', status: 'timer', }, device: { text: '设备触发', status: 'device', }, }, }, { dataIndex: 'description', title: intl.formatMessage({ id: 'pages.system.description', defaultMessage: '说明', }), }, { dataIndex: 'state', title: intl.formatMessage({ id: 'pages.searchTable.titleStatus', defaultMessage: '状态', }), valueType: 'select', valueEnum: { started: { text: '正常', status: 'started', }, disable: { text: '禁用', status: 'disable', }, }, }, ]; return ( { actionRef.current?.reset?.(); setSearchParams(data); }} /> columns={columns} actionRef={actionRef} scroll={{ x: 1366 }} params={searchParams} columnEmptyText={''} gridColumn={1} onlyCard={true} options={{ fullScreen: true }} request={(params) => service.query({ ...params, sorts: [ { name: 'createTime', order: 'desc', }, ], }) } rowKey="id" search={false} headerTitle={[ } type="primary" isPermission={permission.add} onClick={() => { setCurrent({}); setVisible(true); }} > {intl.formatMessage({ id: 'pages.data.option.add', defaultMessage: '新增', })} , ]} cardRender={(record) => ( { const url = getMenuPathByCode('rule-engine/Scene/Save'); history.push(`${url}?triggerType=${record.trigger?.type}&id=${record?.id}`); }} tools={Tools(record)} /> )} /> {visible && ( { setVisible(false); }} /> )} ); }; export default Scene;