diff --git a/config/routes.ts b/config/routes.ts index a7aa996..c751f1a 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -412,12 +412,12 @@ export default [ path: '/offline/videoAnalysis', component: 'VideoAnalysis', }, - // { - // name: 'alarm-list', - // path: '/offline/alarm-list', - // component: 'Alarm/AlarmList', - // access: 'canReadMenu', - // }, + { + name: 'OfflineAlarmRules', + path: '/offline/OfflineAlarmRules', + component: 'Alarm/OfflineAlarmRules', + access: 'canReadMenu', + }, { name: 'involved-list-upload', path: '/offline/involved-list-upload', diff --git a/src/app.tsx b/src/app.tsx index b3092b7..f9afe31 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -98,7 +98,7 @@ export async function getInitialState(): Promise<{ "name": "involved-list", "path": "/realTime/involved-list", "routes": [], - "title": "重点关注", + "title": "告警汇总", } ] }, @@ -151,16 +151,16 @@ export async function getInitialState(): Promise<{ "routes": [], "title": "视频分析", }, - // { - // "access": "", - // "component": "Alarm/AlarmRules", - // "icon": "", - // "key": "", - // "name": "alarm_rules", - // "path": "/offline/alarm_rules", - // "routes": [], - // "title": "告警规则", - // }, + { + "access": "", + "component": "Alarm/OfflineAlarmRules", + "icon": "", + "key": "", + "name": "OfflineAlarmRules", + "path": "/offline/OfflineAlarmRules", + "routes": [], + "title": "告警规则", + }, { "access": "", "component": "Alarm/InvolvedListUpload", @@ -169,7 +169,7 @@ export async function getInitialState(): Promise<{ "name": "involved-list-upload", "path": "/offline/involved-list-upload", "routes": [], - "title": "重点关注(上传)", + "title": "告警汇总", } ] }, diff --git a/src/pages/Alarm/InvolvedList/index.tsx b/src/pages/Alarm/InvolvedList/index.tsx index 1491163..47a7295 100644 --- a/src/pages/Alarm/InvolvedList/index.tsx +++ b/src/pages/Alarm/InvolvedList/index.tsx @@ -1,6 +1,6 @@ import { alarmRulesEnums } from '@/enums/status'; import { ActionType, PageContainer, ProCard, ProList, useIntl } from '@ant-design/pro-components'; -import { Image, Modal, Tabs } from 'antd'; +import { Button, DatePicker, Image, Modal, Tabs } from 'antd'; import React, { useEffect, useRef, useState } from 'react'; import { proTablePaginationOptions } from '../../../../config/defaultTable'; // import DeviceStatusCard from './components/DeviceStatusCard'; @@ -10,6 +10,7 @@ import { QuestionCircleFilled } from '@ant-design/icons'; import InvolvedDetails from './components/InvolvedDetails'; import moment from 'moment'; import ImageWithPopover from './components/ImageWithPopover'; +import locale from 'antd/es/date-picker/locale/zh_CN'; /** * @交互说明 @@ -65,6 +66,9 @@ const InvolvedList: React.FC = () => { const [tab, setTab] = useState(alarmRulesEnums[0].key); const [tabs, setTabs] = useState([]); + + const [importDate, setImportDate] = useState(null); + const [innerDate, setInnerDate] = useState(null); // const changeProjectTab = (key: string) => { // setTab(key); // console.log(key); @@ -223,12 +227,13 @@ const InvolvedList: React.FC = () => { } // 初始化加载 - async function initList(tabId:string = '1') { + async function initList(tabId:string = '1',date: any = null) { const reqParams = { page: currentPage, pageSize: currentPageSize, // desc: false, classify: tabId, + analyse_time: date // ...rest, }; const resp = await getInvolvedList({ ...reqParams }); @@ -264,6 +269,12 @@ const InvolvedList: React.FC = () => { // // }; // }} } + const onChange: DatePickerProps['onChange'] = (date, dateString) => { + console.log(dateString); + setImportDate(date) + setInnerDate(dateString) + console.log(importDate,'importDate'); + }; useEffect(() => { getTabs(); initList(); @@ -300,6 +311,27 @@ const InvolvedList: React.FC = () => { changeProjectTab(key); }} > */} +
+ 选择导入时间: + + +
className="gn" ghost={true} diff --git a/src/pages/Alarm/OfflineAlarmRules/components/UpdateForm.tsx b/src/pages/Alarm/OfflineAlarmRules/components/UpdateForm.tsx new file mode 100644 index 0000000..1417e52 --- /dev/null +++ b/src/pages/Alarm/OfflineAlarmRules/components/UpdateForm.tsx @@ -0,0 +1,200 @@ +import { putDeviceCategoryUpdateDeviceCategory } from '@/services/device/DeviceCategory'; +import { postDeviceGroupGetDeviceGroupFkSelect } from '@/services/device/DeviceGroup'; +import { postAlarmRules } from '@/services/alarm/AlarmRules'; +import { ModalForm, ProForm, ProFormFieldSet, ProFormSelect, ProFormSwitch, ProFormText } from '@ant-design/pro-components'; +import { FormattedMessage, useIntl } from '@umijs/max'; +import { Form, message } from 'antd'; +import React, { useState } from 'react'; +import { + proFormSmallItemStyleProps, + proFormSmallModelWidth, +} from '../../../../../config/defaultForm'; +import styles from './updateForm.less' +export type FormValueType = { + target?: string; + template?: string; + type?: string; + time?: string; + frequency?: string; +} & Partial; + +export type UpdateFormProps = { + updateModalOpen: boolean; + handleModal: () => void; + values: Partial; + reload: any; +}; +const UpdateForm: React.FC = (props) => { + const intl = useIntl(); + const [form] = Form.useForm(); + + return ( + + width={proFormSmallModelWidth} + title={intl.formatMessage({ + id: 'alarm_rules.page.form.title', + defaultMessage: `编辑单人徘徊告警`, + })} + open={props.updateModalOpen} + form={form} + autoFocusFirstInput + modalProps={{ + destroyOnClose: true, + onCancel: () => props.handleModal(), + okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), + cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), + }} + submitTimeout={2000} + onFinish={async (values) => { + values.id = props.values.id + values.is_use = values.is_use ? 1 : 0 + // console.log(values); + await postAlarmRules(values) + .then(() => { + message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); + props.reload(); + }) + .catch(() => { + message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); + }); + + props.handleModal(); + return true; + }} + > + + + } + checkedChildren="启用" + unCheckedChildren="关闭" + initialValue={props.values.is_use} + disabled={false} + /> + } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '请输入', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.name', + defaultMessage: '告警名称', + })}`} + required={true} + initialValue={props.values.warning_name} + disabled={false} + rules={[ + { + required: true, + message: ( + + ), + }, + ]} + /> +
触发条件
+
+ 当检测到风险人员单人,于 + } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '请输入', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.triggerConditions', + defaultMessage: '触发条件', + })}`} + required={true} + initialValue={props.values.time_period} + disabled={false} + rules={[ + { + required: true, + message: ( + + ), + }, + ]} + /> + 小时内,间隔 + } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '请输入', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.triggerConditions', + defaultMessage: '触发条件', + })}`} + required={true} + initialValue={props.values.time_interval} + disabled={false} + rules={[ + { + required: true, + message: ( + + ), + }, + ]} + /> + 小时,重复出现 + } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '请输入', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.triggerConditions', + defaultMessage: '触发条件', + })}`} + required={true} + initialValue={props.values.appear_number} + disabled={false} + rules={[ + { + required: true, + message: ( + + ), + }, + ]} + /> + 次,则触发警告。 +
+
+ + ); +}; +export default UpdateForm; diff --git a/src/pages/Alarm/OfflineAlarmRules/components/UpdateMultiForm.tsx b/src/pages/Alarm/OfflineAlarmRules/components/UpdateMultiForm.tsx new file mode 100644 index 0000000..7bcc5d8 --- /dev/null +++ b/src/pages/Alarm/OfflineAlarmRules/components/UpdateMultiForm.tsx @@ -0,0 +1,234 @@ +import { putDeviceCategoryUpdateDeviceCategory } from '@/services/device/DeviceCategory'; +import { postDeviceGroupGetDeviceGroupFkSelect } from '@/services/device/DeviceGroup'; +import { postAlarmRules } from '@/services/alarm/AlarmRules'; +import { ModalForm, ProForm, ProFormFieldSet, ProFormSelect, ProFormSwitch, ProFormText } from '@ant-design/pro-components'; +import { FormattedMessage, useIntl } from '@umijs/max'; +import { Form, message } from 'antd'; +import React, { useState } from 'react'; +import { + proFormSmallItemStyleProps, + proFormSmallModelWidth, +} from '../../../../../config/defaultForm'; +import styles from './updateForm.less' +export type FormValueType = { + target?: string; + template?: string; + type?: string; + time?: string; + frequency?: string; +} & Partial; + +export type UpdateFormProps = { + updateModalOpen: boolean; + handleModal: () => void; + values: Partial; + reload: any; +}; +const UpdateMultiForm: React.FC = (props) => { + const intl = useIntl(); + const [form] = Form.useForm(); + + return ( + + width={proFormSmallModelWidth} + title={intl.formatMessage({ + id: 'alarm_rules.page.form.multiTitle', + defaultMessage: `编辑${props.values.warning_name}`, + })} + open={props.updateModalOpen} + form={form} + autoFocusFirstInput + modalProps={{ + destroyOnClose: true, + onCancel: () => props.handleModal(), + okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), + cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), + }} + submitTimeout={2000} + onFinish={async (values) => { + values.id = props.values.id + values.is_use = values.is_use ? 1 : 0 + // console.log(values); + await postAlarmRules(values) + .then(() => { + message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); + props.reload(); + }) + .catch(() => { + message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); + }); + + props.handleModal(); + return true; + }} + > + + {/* } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '$$$', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.enabled', + defaultMessage: '$$$', + })}`} + required={false} + initialValue={props.values.enabled} + disabled={false} + /> */} + + } + checkedChildren="启用" + unCheckedChildren="关闭" + initialValue={props.values.is_use} + disabled={false} + /> + } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '请输入', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.name', + defaultMessage: '告警名称', + })}`} + required={true} + initialValue={props.values.warning_name} + disabled={false} + rules={[ + { + required: true, + message: ( + + ), + }, + ]} + /> +
触发条件
+
+ 当检测到风险人员人数大于 + } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '请输入', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.triggerConditions', + defaultMessage: '触发条件', + })}`} + required={true} + initialValue={props.values.person_number} + disabled={false} + rules={[ + { + required: true, + message: ( + + ), + }, + ]} + /> + 人时,则触发告警,触发间隔 + } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '请输入', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.time_interval', + defaultMessage: '时间', + })}`} + required={true} + initialValue={props.values.time_interval} + disabled={false} + rules={[ + { + required: true, + message: ( + + ), + }, + ]} + /> + 分钟。 +
+ {/* { timeStatus && + ({ + // list: value, + // startTime: value[0], + // endTime: value[1], + time_period: value[0], + time_interval: value[1], + appear_number: value[2], + })} + className={styles} + > + 当处于} + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '$$$', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.triggerConditions', + defaultMessage: '$$$', + })}`} + required={false} + initialValue={props.values.trigger_start_time} + disabled={false} + />至 + } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '$$$', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.triggerConditions', + defaultMessage: '$$$', + })}`} + required={false} + initialValue={props.values.trigger_end_time} + disabled={false} + />时间内,发现风险人员立即告警。 + } */} +
+ + ); +}; +export default UpdateMultiForm; diff --git a/src/pages/Alarm/OfflineAlarmRules/components/UpdateTimeForm.tsx b/src/pages/Alarm/OfflineAlarmRules/components/UpdateTimeForm.tsx new file mode 100644 index 0000000..d719e68 --- /dev/null +++ b/src/pages/Alarm/OfflineAlarmRules/components/UpdateTimeForm.tsx @@ -0,0 +1,223 @@ +import { putDeviceCategoryUpdateDeviceCategory } from '@/services/device/DeviceCategory'; +import { postDeviceGroupGetDeviceGroupFkSelect } from '@/services/device/DeviceGroup'; +import { postAlarmRules } from '@/services/alarm/AlarmRules'; +import { ModalForm, ProForm, ProFormFieldSet, ProFormSelect, ProFormSwitch, ProFormText, ProFormTimePicker } from '@ant-design/pro-components'; +import { FormattedMessage, useIntl } from '@umijs/max'; +import { Form, message } from 'antd'; +import React, { useState } from 'react'; +import { + proFormSmallItemStyleProps, + proFormSmallModelWidth, +} from '../../../../../config/defaultForm'; +import styles from './updateForm.less' +export type FormValueType = { + target?: string; + template?: string; + type?: string; + time?: string; + frequency?: string; +} & Partial; + +export type UpdateFormProps = { + updateModalOpen: boolean; + handleModal: () => void; + values: Partial; + reload: any; +}; +const UpdateTimeForm: React.FC = (props) => { + const intl = useIntl(); + const [form] = Form.useForm(); + + return ( + + width={proFormSmallModelWidth} + title={intl.formatMessage({ + id: 'alarm_rules.page.form.timeTitle', + defaultMessage: `编辑${props.values.warning_name}`, + })} + open={props.updateModalOpen} + form={form} + autoFocusFirstInput + modalProps={{ + destroyOnClose: true, + onCancel: () => props.handleModal(), + okText: intl.formatMessage({ id: 'common.yes', defaultMessage: '确认' }), + cancelText: intl.formatMessage({ id: 'common.no', defaultMessage: '取消' }), + }} + submitTimeout={2000} + onFinish={async (values) => { + values.id = props.values.id + values.is_use = values.is_use ? 1 : 0 + // console.log(values); + await postAlarmRules(values) + .then(() => { + message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); + props.reload(); + }) + .catch(() => { + message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); + }); + + props.handleModal(); + return true; + }} + > + + {/* } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '$$$', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.enabled', + defaultMessage: '$$$', + })}`} + required={false} + initialValue={props.values.enabled} + disabled={false} + /> */} + + } + checkedChildren="启用" + unCheckedChildren="关闭" + initialValue={props.values.is_use} + disabled={false} + /> + } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '请输入', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.name', + defaultMessage: '告警名称', + })}`} + required={true} + initialValue={props.values.warning_name} + disabled={false} + rules={[ + { + required: true, + message: ( + + ), + }, + ]} + /> +
触发条件
+
+ 当处于 + + ), + }, + ]} + /> + {/* } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '$$$', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.triggerConditions', + defaultMessage: '$$$', + })}`} + required={false} + initialValue={props.values.trigger_start_time} + disabled={false} + /> */} + + } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '请输入', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.triggerConditions', + defaultMessage: '触发条件', + })}`} + required={true} + initialValue={props.values.trigger_end_time} + disabled={false} + rules={[ + { + required: true, + message: ( + + ), + }, + ]} + /> + {/* } + placeholder={`${intl.formatMessage({ + id: 'common.please_input', + defaultMessage: '$$$', + })}${intl.formatMessage({ + id: 'alarm_rules.page.form.triggerConditions', + defaultMessage: '$$$', + })}`} + required={false} + initialValue={props.values.trigger_end_time} + disabled={false} + /> */} + 时间内,发现风险人员立即告警。 + {/* */} +
+
+ + ); +}; +export default UpdateTimeForm; diff --git a/src/pages/Alarm/OfflineAlarmRules/components/updateForm.less b/src/pages/Alarm/OfflineAlarmRules/components/updateForm.less new file mode 100644 index 0000000..8152d29 --- /dev/null +++ b/src/pages/Alarm/OfflineAlarmRules/components/updateForm.less @@ -0,0 +1,8 @@ +:global { + .ant-form-item-control-input-content { + .ant-space-gap-col-small { + align-items: center; + } + + } +} diff --git a/src/pages/Alarm/OfflineAlarmRules/index.tsx b/src/pages/Alarm/OfflineAlarmRules/index.tsx new file mode 100644 index 0000000..2620e48 --- /dev/null +++ b/src/pages/Alarm/OfflineAlarmRules/index.tsx @@ -0,0 +1,277 @@ +import AlarmLevelBox from '@/components/DictionaryBox/alarmLevel'; +import TableActionCard from '@/components/TableActionCard'; +import IsDelete from '@/components/TableActionCard/isDelete'; +import { alarmLevelStatusEnum } from '@/enums/status'; +import { + deleteDeviceCategoryDeleteDeviceCategory, + postDeviceCategoryGetDeviceCategoryList, +} from '@/services/device/DeviceCategory'; +import {getAlarmRules} from '@/services/alarm/AlarmRules' +import type { ActionType, ProColumns } from '@ant-design/pro-components'; +import { PageContainer, ProTable } from '@ant-design/pro-components'; +import { FormattedMessage, useIntl } from '@umijs/max'; +import { Button, Space, Tag, message } from 'antd'; +import React, { useRef, useState } from 'react'; +import { proTablePaginationOptions } from '../../../../config/defaultTable'; +import { proIconForTableActionStyle } from '../../../../config/defaultIcon'; +import { EditOutlined } from '@ant-design/icons'; +import UpdateForm from './components/UpdateForm'; +import UpdateMultiForm from './components/UpdateMultiForm'; +import UpdateTimeForm from './components/UpdateTimeForm'; +const OfflineAlarmRulesList: React.FC = () => { + /** + * @en-US International configuration + * @zh-CN 国际化配置 + * */ + const intl = useIntl(); + const actionRef = useRef(); + // 动态设置每页数量 + const [currentPageSize, setCurrentPageSize] = useState(10); + + const handleDestroy = async (selectedRow: API.DeviceCategory) => { + deleteDeviceCategoryDeleteDeviceCategory({ id: selectedRow.id }) + .then(() => { + message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '成功' })); + actionRef.current?.reload(); + }) + .catch(() => { + message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '失败' })); + }); + }; + + const [currentRow, setCurrentRow] = useState(); + // 编辑弹框 + const [updateModalOpen, setUpdateModalOpen] = useState(false); + const [updateMultiModalOpen, setUpdateMultiModalOpen] = useState(false); + const [updateTimeModalOpen, setUpdateTimeModalOpen] = useState(false); + + const handleUpdateModal = () => { + if (updateModalOpen) { + setUpdateModalOpen(false); + setCurrentRow(undefined); + } else { + setUpdateModalOpen(true); + } + }; + const handleUpdateMultiModal = () => { + if (updateMultiModalOpen) { + setUpdateMultiModalOpen(false); + setCurrentRow(undefined); + } else { + setUpdateMultiModalOpen(true); + } + }; + const handleUpdateTimeModal = () => { + setCurrentRow(undefined); + + if (updateTimeModalOpen) { + setUpdateTimeModalOpen(false); + } else { + setUpdateTimeModalOpen(true); + } + }; + + const getAlarmRulesList = async () => { + return { + code: 0, + success: true, + data: { + "list": [ + { + "id": 1, + "createTime": "2023-10-17T02:35:41.14308Z", + "updateTime": "2023-10-17T02:35:41.14308Z", + "name": "单人徘徊告警", + "status": "已启用", + "isEnabled": true, + "remark": "" + }, + { + "id": 2, + "createTime": "2023-10-17T02:40:28.292883Z", + "updateTime": "2023-10-26T03:02:51.356036Z", + "name": "多人聚集告警", + "status": "未启用", + "isEnabled": false, + "remark": "" + }, + { + "id": 4, + "createTime": "2023-12-12T02:54:52.204957Z", + "updateTime": "2023-12-12T02:54:52.204957Z", + "name": "敏感时间段告警", + "status": "未启用", + "isEnabled": false, + "remark": "" + } + ], + "total": 3, + "page": 1, + "pageSize": 10 + }, + msg: "获取成功" + } + } + + const columns: ProColumns[] = [ + { + title: , + dataIndex: 'warning_name', + hideInSearch: true, + }, + + { + title: , + dataIndex: 'id', + hideInSearch: true, + }, + { + title: , + dataIndex: 'is_use', + hideInSearch: true, + render: (dom) => { + return ( + + {dom === 1 ? '已启用' : '未启用'} + + ); + }, + }, + { + title: , + dataIndex: 'update_time', + sorter: true, + hideInSearch: true, + valueType: 'dateTime', + }, + + { + title: , + dataIndex: 'option', + valueType: 'option', + fixed: 'right', + render: (_, record) => [ + } + onClick={() => { + console.log(record); + if(record.id === 1) { + setUpdateModalOpen(true); + }else if(record.id === 2) { + setUpdateMultiModalOpen(true); + }else { + setUpdateTimeModalOpen(true); + } + setCurrentRow(record); + }} + > + + + ), + }, + // { + // key: 'destroy', + // renderDom: ( + // { + // handleDestroy(record).then(() => {}); + // }} + // > + // ), + // }, + ]} + >, + ], + }, + ]; + return ( + + + cardProps={{ + bodyStyle: { + padding: 20 + } + }} + options={{ fullScreen: false, setting: false, density: false, reload: false }} + actionRef={actionRef} + rowKey="key" + search={false} + showSorterTooltip={false} + pagination={{ + ...proTablePaginationOptions, + pageSize: currentPageSize, + onChange: (page, pageSize) => setCurrentPageSize(pageSize), + }} + columnsState={{ + persistenceKey: 'device_category_list', + persistenceType: 'localStorage', + }} + request={async (params = {}, sort) => { + const { current, ...rest } = params; + const reqParams = { + page: current, + desc: false, + orderKey: '', + ...rest, + }; + if (sort && Object.keys(sort).length) { + reqParams.orderKey = Object.keys(sort)[0]; + let sort_select = sort[reqParams.orderKey]; + reqParams.desc = sort_select === 'descend'; + } + // let resp = await postDeviceCategoryGetDeviceCategoryList({ ...reqParams }); + let resp = await getAlarmRules(reqParams); + console.log(resp); + return { + data: resp.data.results.map((v: API.DeviceCategory) => { + return { ...v, key: v.id }; + }), + success: resp.success, + total: resp.data.count, + current: resp.data.page, + pageSize: resp.data.pageSize, + }; + }} + columns={columns} + /> + + + + + ); +}; + +export default OfflineAlarmRulesList; diff --git a/src/pages/User/Login/index1.tsx b/src/pages/User/Login/index1.tsx index 9459eba..6a9329c 100644 --- a/src/pages/User/Login/index1.tsx +++ b/src/pages/User/Login/index1.tsx @@ -182,7 +182,7 @@ const Login: React.FC = () => { "name": "involved-list", "path": "/realTime/involved-list", "routes": [], - "title": "重点关注", + "title": "告警汇总", } ] }, @@ -235,16 +235,16 @@ const Login: React.FC = () => { "routes": [], "title": "视频分析", }, - // { - // "access": "", - // "component": "Alarm/AlarmRules", - // "icon": "", - // "key": "", - // "name": "alarm_rules", - // "path": "/offline/alarm_rules", - // "routes": [], - // "title": "告警规则", - // }, + { + "access": "", + "component": "Alarm/OfflineAlarmRules", + "icon": "", + "key": "", + "name": "OfflineAlarmRules", + "path": "/offline/OfflineAlarmRules", + "routes": [], + "title": "告警规则", + }, { "access": "", "component": "Alarm/InvolvedListUpload", @@ -253,7 +253,7 @@ const Login: React.FC = () => { "name": "involved-list-upload", "path": "/offline/involved-list-upload", "routes": [], - "title": "重点关注(上传)", + "title": "告警汇总", } ] },