xieyonghong 3 lat temu
rodzic
commit
c946d82b7f

+ 21 - 5
src/components/ProTableCard/CardItems/AlarmConfig.tsx

@@ -3,6 +3,8 @@ import { TableCard } from '@/components';
 import '@/style/common.less';
 import '../index.less';
 import { StatusColorEnum } from '@/components/BadgeStatus';
+import { Tooltip } from 'antd';
+import { Store } from 'jetlinks-store';
 
 export interface AlarmConfigProps extends ConfigurationItem {
   detail?: React.ReactNode;
@@ -31,16 +33,30 @@ export default (props: AlarmConfigProps) => {
         </div>
         <div className={'card-item-body'}>
           <div className={'card-item-header'}>
-            <span className={'card-item-header-name ellipsis'}>{props.name}</span>
+            <span className={'card-item-header-name ellipsis'}>{props?.name}</span>
           </div>
           <div className={'card-item-content'}>
             <div>
-              <label>告警名称</label>
-              <div className={'ellipsis'}>{props.name}</div>
+              <label>关联场景联动</label>
+              <div className={'ellipsis'}>
+                <Tooltip title={props?.sceneName || ''}>{props?.sceneName || ''}</Tooltip>
+              </div>
             </div>
             <div>
-              <label>说明</label>
-              <div className={'ellipsis'}>{props.description}</div>
+              <label>告警级别</label>
+              <div className={'ellipsis'}>
+                <Tooltip
+                  title={
+                    (Store.get('default-level') || []).find(
+                      (item: any) => item?.level === props?.level,
+                    )?.title || props?.level
+                  }
+                >
+                  {(Store.get('default-level') || []).find(
+                    (item: any) => item?.level === props?.level,
+                  )?.title || props?.level}
+                </Tooltip>
+              </div>
             </div>
           </div>
         </div>

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

@@ -6,6 +6,7 @@ import Status from './Status';
 import './index.less';
 import classNames from 'classnames';
 import { Store } from 'jetlinks-store';
+import { DiagnoseStatusModel } from './Status/model';
 
 interface ListProps {
   key: string;
@@ -126,6 +127,7 @@ const Diagnose = () => {
     return () => {
       Store.set('diagnose', []);
       Store.set('diagnose-status', []);
+      DiagnoseStatusModel.model = true;
     };
   }, []);
   return (

+ 7 - 6
src/pages/link/Type/Detail/index.tsx

@@ -16,7 +16,7 @@ import {
 import type { ISchema } from '@formily/json-schema';
 import { useEffect, useMemo, useRef } from 'react';
 import type { Field } from '@formily/core';
-import { createForm, onFieldValueChange } from '@formily/core';
+import { createForm, onFieldReact, onFieldValueChange } from '@formily/core';
 import { Card, message } from 'antd';
 import styles from './index.less';
 import { useAsyncDataSource } from '@/utils/util';
@@ -43,9 +43,9 @@ const filterConfigByType = (data: any[], type: string) => {
     _temp = 'UDP';
   }
   // 只保留ports 包含type的数据
-  const _config = data.filter((item) => Object.keys(item.ports).includes(_temp));
+  const _config = data?.filter((item) => Object.keys(item.ports).includes(_temp));
   // 只保留ports的type数据
-  return _config.map((i) => {
+  return _config?.map((i) => {
     i.ports = i.ports[_temp];
     return i;
   });
@@ -121,12 +121,13 @@ const Save = observer(() => {
               state.dataSource = _host.map((item) => ({ label: item.host, value: item.host }));
             });
           });
-          onFieldValueChange('grid.configuration.panel1.layout2.host', (field, f1) => {
+          onFieldReact('grid.configuration.panel1.layout2.host', async (field, f1) => {
             const value = (field as Field).value;
             const type = (field.query('type').take() as Field).value;
-            const _port = filterConfigByType(_.cloneDeep(configRef.current), type);
+            const resp = await service.getResourcesCurrent();
+            const current = resp?.result;
+            const _port = filterConfigByType(_.cloneDeep(current), type);
             const _host = _port.find((item) => item.host === value);
-            console.log(_host, 'host');
             f1.setFieldState('grid.configuration.panel1.layout2.port', (state) => {
               state.dataSource = _host?.ports.map((p: any) => ({ label: p, value: p }));
             });

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

@@ -90,8 +90,8 @@ const BindUser = (props: Props) => {
           [
             {
               userId: values.user,
-              providerName: props.data?.name,
-              thirdPartyUserId: props.data?.id,
+              providerName: props.data?.thirdPartyUserName,
+              thirdPartyUserId: props.data?.thirdPartyUserId,
             },
           ],
         );

+ 1 - 1
src/pages/notice/Template/Detail/index.tsx

@@ -125,7 +125,7 @@ const Detail = observer(() => {
             const _provider = field.query('provider').value();
             if (_provider === 'corpMessage') {
               field.componentProps = {
-                disabled: true,
+                // disabled: true,
                 rows: 5,
                 placeholder:
                   '变量格式:${name};\n 示例:尊敬的${name},${time}有设备触发告警,请注意处理',

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

@@ -1,6 +1,6 @@
 import { message, Modal, Typography } from 'antd';
 import { useMemo } from 'react';
-import { createForm } from '@formily/core';
+import { createForm, onFieldInit } from '@formily/core';
 import { createSchemaField } from '@formily/react';
 import { Form, FormGrid, FormItem, Input, Radio, Select } from '@formily/antd';
 import { ISchema } from '@formily/json-schema';
@@ -72,7 +72,15 @@ const Save = (props: Props) => {
       createForm({
         initialValues: props.data,
         validateFirst: true,
-        effects() {},
+        effects() {
+          onFieldInit('*(sceneId,targetType)', async (field) => {
+            if (!props?.data?.id) return;
+            const resp = await service.getAlarmCountById(props.data.id);
+            field.setComponentProps({
+              disabled: resp.result > 0,
+            });
+          });
+        },
       }),
     [props.data, props.visible],
   );

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

@@ -11,12 +11,13 @@ import {
   PlusOutlined,
 } from '@ant-design/icons';
 import { useIntl } from '@@/plugin-locale/localeExports';
-import { useRef, useState } from 'react';
+import { useEffect, useRef, useState } from 'react';
 import { Badge, message, Space } from 'antd';
 import ProTableCard from '@/components/ProTableCard';
 import Save from './Save';
 import Service from '@/pages/rule-engine/Alarm/Configuration/service';
 import AlarmConfig from '@/components/ProTableCard/CardItems/AlarmConfig';
+import { Store } from 'jetlinks-store';
 
 const service = new Service('alarm/config');
 
@@ -39,6 +40,12 @@ const Configuration = () => {
     {
       title: '告警级别',
       dataIndex: 'level',
+      render: (text: any) => (
+        <span>
+          {(Store.get('default-level') || []).find((item: any) => item?.level === text)?.title ||
+            text}
+        </span>
+      ),
     },
     {
       title: '关联场景联动',
@@ -167,6 +174,14 @@ const Configuration = () => {
 
   const [param, setParam] = useState({});
 
+  useEffect(() => {
+    service.queryDefaultLevel().then((resp) => {
+      if (resp.status === 200) {
+        Store.set('default-level', resp.result?.levels || []);
+      }
+    });
+  }, []);
+
   return (
     <PageContainer>
       <SearchComponent

+ 17 - 0
src/pages/rule-engine/Alarm/Configuration/service.ts

@@ -32,6 +32,23 @@ class Service extends BaseService<ConfigItem> {
       method: 'POST',
       data: {},
     });
+
+  public getAlarmCountById = (id: string) =>
+    request(`/${SystemConst.API_BASE}/alarm/record/_count`, {
+      method: 'POST',
+      data: {
+        terms: [
+          {
+            column: 'alarmConfigId',
+            value: id,
+          },
+        ],
+      },
+    });
+  public queryDefaultLevel = () =>
+    request(`/${SystemConst.API_BASE}/alarm/config/default/level`, {
+      method: 'GET',
+    });
 }
 
 export default Service;

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

@@ -36,18 +36,33 @@ const SolveLog = (props: Props) => {
 
   const columns: ProColumns<AlarmLogSolveHistoryItem>[] = [
     {
-      dataIndex: 'handleTIme',
+      dataIndex: 'handleTime',
       title: '处理时间',
+      valueType: 'dateTime',
       render: (text: any) => <span>{moment(text).format('YYYY-MM-DD HH:mm:ss')}</span>,
     },
     {
       dataIndex: 'handleType',
       title: '处理类型',
-      render: (text: any) => <span>{typeMap.get(text) || ''}</span>,
+      render: (text: any, record: any) => (
+        <span>{typeMap.get(record?.handleType?.value) || ''}</span>
+      ),
+      valueType: 'select',
+      valueEnum: {
+        system: {
+          text: '系统',
+          status: 'system',
+        },
+        user: {
+          text: '人工',
+          status: 'user',
+        },
+      },
     },
     {
       dataIndex: 'createTime',
       title: '告警时间',
+      valueType: 'dateTime',
       render: (text: any) => <span>{moment(text).format('YYYY-MM-DD HH:mm:ss')}</span>,
     },
     {

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

@@ -66,7 +66,7 @@
           border-right: 1px solid rgba(0, 0, 0, 0.09);
 
           .alarm-type {
-            max-width: 120px;
+            width: 40px;
 
             .name {
               color: #000;

+ 4 - 26
src/pages/rule-engine/Alarm/Log/TabComponent/index.tsx

@@ -46,31 +46,9 @@ const TabComponent = observer((props: Props) => {
       dataIndex: 'name',
     },
     {
-      title: '级别',
-      dataIndex: 'level',
-      valueType: 'select',
-      valueEnum: {
-        1: {
-          text: '级别一',
-          status: '1',
-        },
-        2: {
-          text: '级别二',
-          status: '2',
-        },
-        3: {
-          text: '级别三',
-          status: '3',
-        },
-        4: {
-          text: '级别四',
-          status: '4',
-        },
-        5: {
-          text: '级别五',
-          status: '5',
-        },
-      },
+      title: '最近告警时间',
+      dataIndex: 'alarmTime',
+      valueType: 'dateTime',
     },
     {
       title: '状态',
@@ -178,7 +156,7 @@ const TabComponent = observer((props: Props) => {
                         <div className="alarm-log-time">
                           <div className="log-title">最近告警时间</div>
                           <div className="context">
-                            {moment(item.alarmDate).format('YYYY-MM-DD HH:mm:ss')}
+                            {moment(item.alarmTime).format('YYYY-MM-DD HH:mm:ss')}
                           </div>
                         </div>
                         <div

+ 29 - 29
src/pages/rule-engine/Scene/service.ts

@@ -1,8 +1,8 @@
 import { request } from '@@/plugin-request/request';
 import BaseService from '@/utils/BaseService';
 import type { SceneItem } from '@/pages/rule-engine/Scene/typings';
-import { defer, from, lastValueFrom, shareReplay } from 'rxjs';
-import { filter, map } from 'rxjs/operators';
+// import { defer, from, lastValueFrom, shareReplay } from 'rxjs';
+// import { filter, map } from 'rxjs/operators';
 
 class Service extends BaseService<SceneItem> {
   startScene = (id: string) => request(`${this.uri}/${id}/_enable`, { method: 'PUT' });
@@ -11,11 +11,11 @@ class Service extends BaseService<SceneItem> {
 
   updateScene = (data: any) => request(`${this.uri}/${data.id}`, { method: 'PUT', data });
 
-  // getParseTerm = (data: Record<string, any>) =>
-  //   request(`${this.uri}/parse-term-column`, {
-  //     method: 'POST',
-  //     data,
-  //   }).then((resp) => resp.result);
+  getParseTerm = (data: Record<string, any>) =>
+    request(`${this.uri}/parse-term-column`, {
+      method: 'POST',
+      data,
+    }).then((resp) => resp.result);
   // getParseTerm = (data: Record<string, any>) => {
   //   const oldParams = Store.get('request-params-parse-term');
   //   const list = Store.get('parse-term');
@@ -35,29 +35,29 @@ class Service extends BaseService<SceneItem> {
   //   });
   // };
 
-  private cacheTerm$: Promise<any> | undefined;
+  // private cacheTerm$: Promise<any> | undefined;
 
-  getParseTerm = (data: Record<string, any>) => {
-    if (!this.cacheTerm$) {
-      this.cacheTerm$ = lastValueFrom(
-        defer(() =>
-          from(
-            request(`${this.uri}/parse-term-column`, {
-              method: 'POST',
-              data,
-            }),
-          ),
-        ).pipe(
-          filter((item) => item.status === 200),
-          map((item) => {
-            return item.result;
-          }),
-          shareReplay(1, 100),
-        ),
-      );
-    }
-    return this.cacheTerm$;
-  };
+  // getParseTerm = (data: Record<string, any>) => {
+  //   if (!this.cacheTerm$) {
+  //     this.cacheTerm$ = lastValueFrom(
+  //       defer(() =>
+  //         from(
+  //           request(`${this.uri}/parse-term-column`, {
+  //             method: 'POST',
+  //             data,
+  //           }),
+  //         ),
+  //       ).pipe(
+  //         filter((item) => item.status === 200),
+  //         map((item) => {
+  //           return item.result;
+  //         }),
+  //         // shareReplay(1, 100),
+  //       ),
+  //     );
+  //   }
+  //   return this.cacheTerm$;
+  // };
 }
 
 export default Service;