Przeglądaj źródła

fix: 修改告警记录

sun-chaochao 3 lat temu
rodzic
commit
9fa6696f60

+ 7 - 1
src/pages/device/Instance/Detail/Config/index.tsx

@@ -145,7 +145,13 @@ const Config = () => {
       </div>
       <div>
         {(metadata || []).map((i) => (
-          <Descriptions size="small" column={3} key={i.name} bordered title={<h4>{i.name}</h4>}>
+          <Descriptions
+            size="small"
+            column={3}
+            key={i.name}
+            bordered
+            title={<h4 style={{ fontSize: 15 }}>{i.name}</h4>}
+          >
             {(i?.properties || []).map((item: any) => (
               <Descriptions.Item
                 span={1}

+ 2 - 0
src/pages/device/Instance/Detail/MetadataLog/Property/index.tsx

@@ -75,6 +75,7 @@ const PropertyLog = (props: Props) => {
       title="详情"
       visible={visible}
       onCancel={() => close()}
+      onOk={() => close()}
       width="45vw"
     >
       <div style={{ marginBottom: '20px' }}>
@@ -106,6 +107,7 @@ const PropertyLog = (props: Props) => {
                 et,
               );
             }}
+            style={{ minWidth: 220 }}
           >
             <Radio.Button value="today">今日</Radio.Button>
             <Radio.Button value="week">近一周</Radio.Button>

+ 1 - 1
src/pages/link/AccessConfig/Detail/Access/index.tsx

@@ -61,7 +61,7 @@ const Access = (props: Props) => {
   ProcotoleMapping.set('mqtt-client-gateway', 'MQTT');
   ProcotoleMapping.set('mqtt-server-gateway', 'MQTT');
   ProcotoleMapping.set('tcp-server-gateway', 'TCP');
-  ProcotoleMapping.set('child-device', 'Gateway');
+  ProcotoleMapping.set('child-device', '');
 
   const queryNetworkList = (id: string, params?: any) => {
     service.getNetworkList(MetworkTypeMapping.get(id), params).then((resp) => {

+ 1 - 1
src/pages/notice/Config/BindUser/index.tsx

@@ -37,7 +37,7 @@ const BindUser = (props: Props) => {
   };
 
   useEffect(() => {
-    if (props.data?.id) {
+    if (props.data?.thirdPartyUserId) {
       getUsers(props.data.id);
     }
   }, [props.data]);

+ 1 - 1
src/pages/rule-engine/Alarm/Configuration/Save/index.tsx

@@ -3,7 +3,7 @@ import { useMemo } from 'react';
 import { createForm } from '@formily/core';
 import { createSchemaField } from '@formily/react';
 import { Form, FormGrid, FormItem, Input, Radio, Select } from '@formily/antd';
-import { ISchema } from '@formily/json-schema';
+import type { ISchema } from '@formily/json-schema';
 import { PermissionButton } from '@/components';
 import { PlusOutlined } from '@ant-design/icons';
 import Service from '@/pages/rule-engine/Alarm/Configuration/service';

+ 24 - 14
src/pages/rule-engine/Alarm/Configuration/index.tsx

@@ -24,6 +24,7 @@ const Configuration = () => {
   const intl = useIntl();
   const [visible, setVisible] = useState<boolean>(false);
   const actionRef = useRef<ActionType>();
+  const { permission } = PermissionButton.usePermission('rule-engine/Alarm/Configuration');
 
   const [current, setCurrent] = useState<any>();
   const columns: ProColumns<ConfigurationItem>[] = [
@@ -64,8 +65,13 @@ const Configuration = () => {
             key="trigger"
             type="link"
             style={{ padding: 0 }}
-            isPermission={true}
+            isPermission={permission.tigger}
+            tooltip={{
+              title: record.state?.value === 'disabled' ? '未启用,不能手动触发' : '',
+            }}
+            disabled={record.state?.value === 'disabled'}
             popConfirm={{
+              disabled: record.state?.value === 'disabled',
               title: '确认手动触发?',
               onConfirm: async () => {
                 await service._execute(record.sceneId);
@@ -83,7 +89,7 @@ const Configuration = () => {
           </PermissionButton>
         ),
         <PermissionButton
-          isPermission={true}
+          isPermission={permission.update}
           key="edit"
           style={{ padding: 0 }}
           tooltip={{
@@ -101,7 +107,7 @@ const Configuration = () => {
           <EditOutlined />
         </PermissionButton>,
         <PermissionButton
-          isPermission={true}
+          isPermission={permission.action}
           key="action"
           style={{ padding: 0 }}
           popConfirm={{
@@ -140,19 +146,17 @@ const Configuration = () => {
         </PermissionButton>,
         <PermissionButton
           type="link"
-          isPermission={true}
+          isPermission={permission.delete}
           key="delete"
           disabled={record.state?.value !== 'disabled'}
           style={{ padding: 0 }}
           popConfirm={{
+            disabled: record.state?.value !== 'disabled',
             title: '确认删除?',
             onConfirm: () => service.remove(record.id),
           }}
           tooltip={{
-            title: intl.formatMessage({
-              id: 'pages.data.option.remove',
-              defaultMessage: '删除',
-            }),
+            title: record.state?.value === 'disabled' ? '删除' : '已启用,不能删除',
           }}
         >
           <DeleteOutlined />
@@ -188,9 +192,14 @@ const Configuration = () => {
                 <PermissionButton
                   key="trigger"
                   type="link"
-                  isPermission={true}
+                  tooltip={{
+                    title: record.state?.value === 'disabled' ? '未启用,不能手动触发' : '',
+                  }}
+                  disabled={record.state?.value === 'disabled'}
+                  isPermission={permission.tigger}
                   popConfirm={{
                     title: '确认手动触发?',
+                    disabled: record.state?.value === 'disabled',
                     onConfirm: async () => {
                       await service._execute(record.sceneId);
                       message.success(
@@ -208,7 +217,7 @@ const Configuration = () => {
                 </PermissionButton>
               ) : null,
               <PermissionButton
-                isPermission={true}
+                isPermission={permission.update}
                 key="edit"
                 type="link"
                 onClick={() => {
@@ -220,7 +229,7 @@ const Configuration = () => {
                 编辑
               </PermissionButton>,
               <PermissionButton
-                isPermission={true}
+                isPermission={permission.action}
                 style={{ padding: 0 }}
                 popConfirm={{
                   title: intl.formatMessage({
@@ -265,17 +274,18 @@ const Configuration = () => {
               <PermissionButton
                 type="link"
                 tooltip={{
-                  title: '删除',
+                  title: record.state?.value === 'disabled' ? '删除' : '已启用,不能删除',
                 }}
                 disabled={record.state?.value !== 'disabled'}
                 popConfirm={{
+                  disabled: record.state?.value !== 'disabled',
                   title: '确认删除?',
                   onConfirm: async () => {
                     await service.remove(record.id);
                     actionRef.current?.reset?.();
                   },
                 }}
-                isPermission={true}
+                isPermission={permission.delete}
                 key="delete"
               >
                 <DeleteOutlined />
@@ -286,7 +296,7 @@ const Configuration = () => {
         headerTitle={
           <Space>
             <PermissionButton
-              isPermission={true}
+              isPermission={permission.add}
               onClick={() => {
                 setCurrent(undefined);
                 setVisible(true);

+ 8 - 6
src/pages/rule-engine/Alarm/Log/Detail/Info.tsx

@@ -1,6 +1,7 @@
 import { Descriptions, Modal } from 'antd';
 import { useEffect, useState } from 'react';
 import moment from 'moment';
+import { Store } from 'jetlinks-store';
 
 interface Props {
   data: Partial<AlarmLogHistoryItem>;
@@ -20,27 +21,28 @@ const Info = (props: Props) => {
         {data.targetType === 'device' && (
           <>
             <Descriptions.Item label="告警设备" span={1}>
-              {data?.targetName}
+              {data?.targetName || '--'}
             </Descriptions.Item>
             <Descriptions.Item label="设备ID" span={1}>
-              {data?.targetId}
+              {data?.targetId || '--'}
             </Descriptions.Item>
           </>
         )}
         <Descriptions.Item label="告警名称" span={1}>
-          {data?.alarmConfigName}
+          {data?.alarmConfigName || '--'}
         </Descriptions.Item>
         <Descriptions.Item label="告警时间" span={1}>
           {moment(data?.alarmTime).format('YYYY-MM-DD HH:mm:ss')}
         </Descriptions.Item>
         <Descriptions.Item label="告警级别" span={1}>
-          {data?.level}
+          {(Store.get('default-level') || []).find((item: any) => item?.level === data?.level)
+            ?.title || data?.level}
         </Descriptions.Item>
         <Descriptions.Item label="告警说明" span={1}>
-          {data?.description}
+          {data?.description || '--'}
         </Descriptions.Item>
         <Descriptions.Item label="告警流水" span={2}>
-          {data?.alarmInfo}
+          {data?.alarmInfo || '--'}
         </Descriptions.Item>
       </Descriptions>
     </Modal>

+ 8 - 2
src/pages/rule-engine/Alarm/Log/Detail/index.tsx

@@ -40,20 +40,25 @@ const Detail = observer(() => {
     {
       dataIndex: 'alarmTime',
       title: '告警时间',
+      valueType: 'dateTime',
       render: (text: any) => <span>{moment(text).format('YYYY-MM-DD HH:mm:ss')}</span>,
     },
     {
       dataIndex: 'alarmConfigName',
       title: '告警名称',
+      hideInSearch: true,
     },
     {
       dataIndex: 'description',
       title: '说明',
+      hideInSearch: true,
     },
     {
       dataIndex: 'action',
       title: '操作',
-      render: (record: any) => (
+      hideInSearch: true,
+      valueType: 'option',
+      render: (_: any, record: any) => (
         <Button type="link">
           <SearchOutlined
             onClick={() => {
@@ -74,9 +79,10 @@ const Detail = observer(() => {
           initColumns.splice(2, 0, {
             dataIndex: 'targetName',
             title: '告警设备',
+            hideInSearch: true,
           });
         }
-        AlarmLogModel.columns = initColumns;
+        AlarmLogModel.columns = [...initColumns];
       }
     });
   }, [params.id]);

+ 1 - 0
src/pages/rule-engine/Alarm/Log/SolveComponent/index.tsx

@@ -26,6 +26,7 @@ const SolveComponent = (props: Props) => {
         form={form}
         onFinish={async (values: any) => {
           const resp = await service.handleLog(data?.id || '', {
+            id: data?.id || '',
             describe: values.describe,
             type: 'user',
             state: 'normal',

+ 25 - 0
src/pages/rule-engine/Alarm/Log/TabComponent/index.less

@@ -140,6 +140,31 @@
             color: #fff;
           }
         }
+        .alarm-log-disabled {
+          display: flex;
+          justify-content: center;
+          width: 72px;
+          height: 72px;
+          border: 1px solid rgba(0, 0, 0, 0.25);
+          .btn {
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            justify-content: center;
+            width: 72px;
+            height: 72px;
+            .icon {
+              margin-bottom: 5px;
+              color: rgba(0, 0, 0, 0.25);
+              font-size: 25px;
+            }
+
+            div {
+              color: rgba(0, 0, 0, 0.25);
+              font-size: 12px;
+            }
+          }
+        }
       }
     }
   }

+ 27 - 16
src/pages/rule-engine/Alarm/Log/TabComponent/index.tsx

@@ -1,7 +1,7 @@
 import SearchComponent from '@/components/SearchComponent';
 import { FileFilled, FileTextFilled, ToolFilled } from '@ant-design/icons';
 import type { ProColumns } from '@jetlinks/pro-table';
-import { Badge, Button, Card, Col, Empty, Pagination, Row, Space } from 'antd';
+import { Badge, Button, Card, Col, Empty, Pagination, Row, Space, Tooltip } from 'antd';
 import { useEffect, useState } from 'react';
 import './index.less';
 import SolveComponent from '../SolveComponent';
@@ -12,6 +12,8 @@ import { observer } from '@formily/reactive-react';
 import { service } from '@/pages/rule-engine/Alarm/Log';
 import { getMenuPathByParams, MENUS_CODE } from '@/utils/menu';
 import { useHistory } from 'umi';
+import PermissionButton from '@/components/PermissionButton';
+import classNames from 'classnames';
 
 interface Props {
   type: string;
@@ -37,6 +39,7 @@ colorMap.set(4, '#999999');
 colorMap.set(5, '#C4C4C4');
 
 const TabComponent = observer((props: Props) => {
+  const { permission } = PermissionButton.usePermission('rule-engine/Alarm/Log');
   const columns: ProColumns<any>[] = [
     {
       title: '名称',
@@ -166,7 +169,9 @@ const TabComponent = observer((props: Props) => {
                         />
                         <div className="alarm-type">
                           <div className="name">{titleMap.get(item.targetType)}</div>
-                          <div className="text">{item.targetName}</div>
+                          <div className="text">
+                            <Tooltip title={item.targetName}>{item.targetName}</Tooltip>
+                          </div>
                         </div>
                       </div>
                       <div className="alarm-log-right">
@@ -197,20 +202,26 @@ const TabComponent = observer((props: Props) => {
                     <div className="alarm-log-actions">
                       <Space>
                         {item.state.value === 'warning' && (
-                          <div className="alarm-log-action">
-                            <Button
-                              type={'link'}
-                              onClick={() => {
-                                AlarmLogModel.solveVisible = true;
-                                AlarmLogModel.current = item;
-                              }}
-                            >
-                              <div className="btn">
-                                <ToolFilled className="icon" />
-                                <div>告警处理</div>
-                                {/* action */}
-                              </div>
-                            </Button>
+                          <div
+                            className={classNames(
+                              permission.action ? 'alarm-log-action' : 'alarm-log-disabled',
+                            )}
+                          >
+                            <Tooltip title={permission.action ? '' : '暂无权限,请联系管理员'}>
+                              <Button
+                                type={'link'}
+                                disabled={!permission.action}
+                                onClick={() => {
+                                  AlarmLogModel.solveVisible = true;
+                                  AlarmLogModel.current = item;
+                                }}
+                              >
+                                <div className="btn">
+                                  <ToolFilled className="icon" />
+                                  <div>告警处理</div>
+                                </div>
+                              </Button>
+                            </Tooltip>
                           </div>
                         )}
                         <div className="alarm-log-action">

+ 2 - 0
src/pages/rule-engine/Alarm/Log/index.tsx

@@ -4,6 +4,7 @@ import { useEffect } from 'react';
 import { AlarmLogModel } from './model';
 import TabComponent from './TabComponent';
 import Service from './service';
+import { Store } from 'jetlinks-store';
 
 export const service = new Service('alarm/record');
 
@@ -30,6 +31,7 @@ const Log = observer(() => {
   useEffect(() => {
     service.queryDefaultLevel().then((resp) => {
       if (resp.status === 200) {
+        Store.set('default-level', resp.result?.levels || []);
         AlarmLogModel.defaultLevel = resp.result?.levels || [];
       }
     });

+ 6 - 1
src/pages/rule-engine/Alarm/Log/model.ts

@@ -21,18 +21,23 @@ export const AlarmLogModel = model<{
     {
       dataIndex: 'alarmTime',
       title: '告警时间',
+      valueType: 'dateTime',
     },
     {
-      dataIndex: 'alarmName',
+      dataIndex: 'alarmConfigName',
       title: '告警名称',
+      hideInSearch: true,
     },
     {
       dataIndex: 'description',
       title: '说明',
+      hideInSearch: true,
     },
     {
       dataIndex: 'action',
       title: '操作',
+      hideInSearch: true,
+      valueType: 'option',
     },
   ],
 });

+ 1 - 0
src/utils/menu/router.ts

@@ -129,6 +129,7 @@ export enum BUTTON_PERMISSION_ENUM {
   'channel' = 'channel',
   'debug' = 'debug',
   'log' = 'log',
+  'tigger' = 'tigger',
 }
 
 // 调试按钮、通知记录、批量导出、批量导入、选择通道、推送、分配资产、绑定用户对应的ID是啥