Selaa lähdekoodia

fix(merge): merge sc

lind 3 vuotta sitten
vanhempi
commit
f839a75a20

+ 4 - 0
src/pages/device/Instance/Detail/Config/Edit.tsx

@@ -14,6 +14,7 @@ const componentMap = {
 interface Props {
   close: () => void;
   metadata: any[];
+  reload: () => void;
 }
 
 const Edit = (props: Props) => {
@@ -106,6 +107,9 @@ const Edit = (props: Props) => {
                     setTimeout(() => window.close(), 300);
                   }
                 } else {
+                  if (props.reload) {
+                    props.reload();
+                  }
                   props.close();
                 }
               }

+ 5 - 8
src/pages/device/Instance/Detail/Config/index.tsx

@@ -16,11 +16,7 @@ const Config = () => {
   const params = useParams<{ id: string }>();
   useEffect(() => {
     const id = InstanceModel.current?.id || params.id;
-    if (id) {
-      service.getConfigMetadata(id).then((response) => {
-        InstanceModel.config = response?.result;
-      });
-    } else {
+    if (!id) {
       history.goBack();
     }
   }, []);
@@ -29,7 +25,7 @@ const Config = () => {
   const [visible, setVisible] = useState<boolean>(false);
   const { permission } = PermissionButton.usePermission('device/Instance');
 
-  const id = InstanceModel.detail?.id || params?.id;
+  const id = params?.id;
 
   const getDetail = () => {
     service.detail(id || '').then((resp) => {
@@ -42,7 +38,8 @@ const Config = () => {
   useEffect(() => {
     if (id) {
       service.getConfigMetadata(id).then((config) => {
-        setMetadata(config?.result);
+        InstanceModel.config = config?.result || [];
+        setMetadata(config?.result || []);
       });
     }
   }, [id]);
@@ -180,8 +177,8 @@ const Config = () => {
           metadata={metadata || []}
           close={() => {
             setVisible(false);
-            getDetail();
           }}
+          reload={getDetail}
         />
       )}
     </div>

+ 11 - 5
src/pages/device/Instance/Detail/Reation/Edit.tsx

@@ -8,11 +8,12 @@ import { useParams } from 'umi';
 import { Button, Drawer, message, Space } from 'antd';
 import { action } from '@formily/reactive';
 import type { Response } from '@/utils/typings';
-import { useEffect, useState } from 'react';
+import { useEffect, useMemo, useState } from 'react';
 
 interface Props {
   close: () => void;
   data: any[];
+  reload: () => void;
 }
 
 const Edit = (props: Props) => {
@@ -40,10 +41,12 @@ const Edit = (props: Props) => {
     );
   };
 
-  const form = createForm({
-    validateFirst: true,
-    initialValues: initData,
-  });
+  const form = useMemo(() => {
+    return createForm({
+      validateFirst: true,
+      initialValues: initData,
+    });
+  }, []);
 
   const SchemaField = createSchemaField({
     components: {
@@ -143,6 +146,9 @@ const Edit = (props: Props) => {
                 if (resp.status === 200) {
                   message.success('操作成功!');
                   props.close();
+                  if (props.reload) {
+                    props.reload();
+                  }
                 }
               }
             }}

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

@@ -66,8 +66,8 @@ const Reation = () => {
           data={data || []}
           close={() => {
             setVisible(false);
-            getDetail();
           }}
+          reload={getDetail}
         />
       )}
     </div>

+ 1 - 1
src/pages/device/Instance/index.tsx

@@ -290,7 +290,7 @@ const Instance = () => {
       valueType: 'select',
       hideInTable: true,
       request: () =>
-        service.queryGatewayList().then((resp) =>
+        service.queryGatewayList().then((resp: any) =>
           resp.result.map((item: any) => ({
             label: item.name,
             value: `accessId is ${item.id}`,

+ 8 - 2
src/pages/device/Instance/service.ts

@@ -259,8 +259,14 @@ class Service extends BaseService<DeviceInstance> {
       method: 'GET',
     });
 
-  //接入方式
-  public queryGatewayList = () => request(`/${SystemConst.API_BASE}/gateway/device/providers`);
+  //接入网关
+  public queryGatewayList = () =>
+    request(`/${SystemConst.API_BASE}/gateway/device/_query/no-paging`, {
+      method: 'POST',
+      data: {
+        paging: false,
+      },
+    });
   // 保存设备关系
   public saveRelations = (id: string, data: any) =>
     request(`/${SystemConst.API_BASE}/device/instance/${id}/relations`, {

+ 0 - 15
src/pages/link/AccessConfig/Detail/Provider/index.less

@@ -27,18 +27,3 @@
   white-space: nowrap;
   text-overflow: ellipsis;
 }
-
-.title {
-  width: 100%;
-  margin-bottom: 10px;
-  overflow: hidden;
-  font-weight: 800;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-}
-
-.title::before {
-  margin-right: 10px;
-  background-color: #2810ff;
-  content: '|';
-}

+ 3 - 2
src/pages/link/AccessConfig/Detail/Provider/index.tsx

@@ -1,3 +1,4 @@
+import { TitleComponent } from '@/components';
 import { Button, Card, Col, Row } from 'antd';
 import { useEffect, useState } from 'react';
 import styles from './index.less';
@@ -28,7 +29,7 @@ const Provider = (props: Props) => {
   return (
     <>
       <Card>
-        <div className={styles.title}>自定义设备接入</div>
+        <TitleComponent data={'自定义设备接入'} />
         <Row gutter={[16, 16]}>
           {dataSource.map((item) => (
             <Col key={item.name} span={12}>
@@ -70,7 +71,7 @@ const Provider = (props: Props) => {
         </Row>
       </Card>
       <Card style={{ marginTop: 20 }}>
-        <div className={styles.title}>视频类设备接入</div>
+        <TitleComponent data={'视频类设备接入'} />
         <Row gutter={[16, 16]}>
           {mediaSource.map((item) => (
             <Col key={item.name} span={12}>

+ 28 - 5
src/pages/rule-engine/Alarm/Config/index.tsx

@@ -1,5 +1,5 @@
 import { PageContainer } from '@ant-design/pro-layout';
-import { Button, Card, Col, Divider, Image, message, Row, Table } from 'antd';
+import { Button, Card, Col, Divider, Image, message, Row, Table, Tooltip } from 'antd';
 import TitleComponent from '@/components/TitleComponent';
 import { createSchemaField } from '@formily/react';
 import { ArrayItems, Form, FormButtonGroup, FormGrid, FormItem, Input } from '@formily/antd';
@@ -11,6 +11,7 @@ import type { IOConfigItem } from '@/pages/rule-engine/Alarm/Config/typing';
 import Service from '@/pages/rule-engine/Alarm/Config/service';
 import styles from './index.less';
 import ReactMarkdown from 'react-markdown';
+import { QuestionCircleOutlined } from '@ant-design/icons';
 
 export const service = new Service('alarm/config');
 const ioImg = require('/public/images/alarm/io.png');
@@ -410,7 +411,7 @@ const Config = () => {
     <Row>
       <Col span={14}>
         <Card>
-          <TitleComponent data="告警级别配置" />
+          <TitleComponent data={'告警级别配置'} />
           <Form form={levelForm}>
             <SchemaField schema={levelSchema} />
             <FormButtonGroup.Sticky>
@@ -439,12 +440,30 @@ const Config = () => {
       <Col span={14}>
         <div>
           <Card>
-            <TitleComponent data="告警数据输出" />
+            <TitleComponent
+              data={
+                <span>
+                  告警数据输出
+                  <Tooltip title={'将告警数据输出到其他第三方系统'}>
+                    <QuestionCircleOutlined style={{ marginLeft: 5 }} />
+                  </Tooltip>
+                </span>
+              }
+            />
             <Form form={outputForm} layout="vertical">
               <SchemaField schema={ioSchema} />
             </Form>
             <Divider />
-            <TitleComponent data="告警处理结果输入" />
+            <TitleComponent
+              data={
+                <span>
+                  告警处理结果输入
+                  <Tooltip title={'接收第三方系统处理的告警结果'}>
+                    <QuestionCircleOutlined style={{ marginLeft: 5 }} />
+                  </Tooltip>
+                </span>
+              }
+            />
             <Form form={inputForm} layout="vertical">
               <SchemaField schema={ioSchema} />
               <FormButtonGroup.Sticky>
@@ -487,7 +506,11 @@ const Config = () => {
   );
 
   const list = [
-    { key: 'config', tab: '告警级别', component: level },
+    {
+      key: 'config',
+      tab: '告警级别',
+      component: level,
+    },
     { key: 'io', tab: '数据流转', component: io },
   ];
 

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

@@ -59,7 +59,7 @@ const SolveLog = (props: Props) => {
       },
     },
     {
-      dataIndex: 'createTime',
+      dataIndex: 'alarmTime',
       title: '告警时间',
       valueType: 'dateTime',
       // render: (text: any, record: any) => <span>{moment(record.createTime).format('YYYY-MM-DD HH:mm:ss')}</span>,

+ 6 - 1
src/pages/rule-engine/Scene/Save/action/messageContent.tsx

@@ -1,5 +1,5 @@
 import type { FormInstance } from 'antd';
-import { Col, Form, Row } from 'antd';
+import { Col, Form, Input, Row } from 'antd';
 import {
   BuiltIn,
   OrgList,
@@ -56,6 +56,9 @@ export default (props: MessageContentProps) => {
                     },
                   });
                 }
+                if (type === 'link') {
+                  rules.push({ max: 64, message: '最多64个字符' });
+                }
                 return (
                   <Col span={12} key={`${item.id}_${index}`}>
                     <Form.Item
@@ -77,6 +80,8 @@ export default (props: MessageContentProps) => {
                         <InputFile />
                       ) : type === 'tag' ? (
                         <TagSelect configId={props.configId} />
+                      ) : type === 'link' ? (
+                        <Input placeholder={'请输入' + item.name} />
                       ) : (
                         <BuiltIn type={props.triggerType} data={item} />
                       )}

+ 26 - 50
src/pages/rule-engine/Scene/Save/index.tsx

@@ -12,7 +12,7 @@ import {
   Tooltip,
 } from 'antd';
 import { useIntl, useLocation } from 'umi';
-import { useEffect, useRef, useState } from 'react';
+import { useCallback, useEffect, useRef, useState } from 'react';
 import { PermissionButton, TitleComponent } from '@/components';
 import ActionItems from './action/action';
 import { PlusOutlined, QuestionCircleOutlined } from '@ant-design/icons';
@@ -52,7 +52,7 @@ export default () => {
 
   const { getOtherPermission } = PermissionButton.usePermission('rule-engine/Scene');
   const [triggerType, setTriggerType] = useState('');
-  // const [triggerValue, setTriggerValue] = useState<any>();
+  const [triggerValue, setTriggerValue] = useState<any>([]);
   const [loading, setLoading] = useState(false);
   const [parallel, setParallel] = useState(true); // 是否并行
   const [shakeLimit, setShakeLimit] = useState<ShakeLimitType>(DefaultShakeLimit);
@@ -60,23 +60,29 @@ export default () => {
   const [actionsData, setActionsData] = useState<any[]>([]);
   const [isEdit, setIsEdit] = useState(false);
 
-  const getDetail = async (id: string) => {
-    const resp = await service.detail(id);
-    if (resp.status === 200 && resp.result) {
-      setIsEdit(true);
-      const _data: any = resp.result;
-      FormModel = _data;
-      form.setFieldsValue(_data);
-      setParallel(_data.parallel);
-      setShakeLimit(_data.shakeLimit || DefaultShakeLimit);
-      if (_data.trigger?.device?.selectorValues) {
-        setRequestParams({ trigger: _data.trigger });
-      }
-      if (_data.actions) {
-        setActionsData(_data.actions);
+  const getDetail = useCallback(
+    async (id: string) => {
+      const resp = await service.detail(id);
+      if (resp.status === 200 && resp.result) {
+        setIsEdit(true);
+        const _data: any = resp.result;
+        FormModel = _data;
+        form.setFieldsValue(_data);
+        setParallel(_data.parallel);
+        setShakeLimit(_data.shakeLimit || DefaultShakeLimit);
+
+        setTriggerValue(_data.terms || []);
+
+        if (_data.trigger?.device?.selectorValues) {
+          setRequestParams({ trigger: _data.trigger });
+        }
+        if (_data.actions) {
+          setActionsData(_data.actions);
+        }
       }
-    }
-  };
+    },
+    [triggerRef],
+  );
 
   useEffect(() => {
     const params = new URLSearchParams(location.search);
@@ -92,7 +98,6 @@ export default () => {
     // 获取触发条件数据
     if (triggerRef.current) {
       triggerData = await triggerRef.current.getTriggerForm();
-      console.log(JSON.stringify(triggerData), 'trigger');
       if (!triggerData) {
         return;
       }
@@ -183,6 +188,7 @@ export default () => {
           className={'scene-save'}
           onValuesChange={(changeValue, allValues) => {
             if (changeValue.trigger) {
+              setTriggerValue([]);
               setRequestParams({ trigger: allValues.trigger });
             }
             if (allValues.actions) {
@@ -277,7 +283,7 @@ export default () => {
               <TriggerTerm
                 ref={triggerRef}
                 params={requestParams}
-                // value={triggerValue}
+                value={{ trigger: triggerValue }}
               />
             </Form.Item>
           ) : null}
@@ -384,36 +390,6 @@ export default () => {
         >
           保存
         </PermissionButton>
-        {/*<Button*/}
-        {/*  onClick={() => {*/}
-        {/*    setTriggerValue({*/}
-        {/*      trigger: [*/}
-        {/*        {*/}
-        {/*          terms: [*/}
-        {/*            {*/}
-        {/*              column: '_now',*/}
-        {/*              termType: 'eq',*/}
-        {/*              source: 'manual',*/}
-        {/*              value: '2022-04-21 14:26:04',*/}
-        {/*            },*/}
-        {/*          ],*/}
-        {/*        },*/}
-        {/*        {*/}
-        {/*          terms: [*/}
-        {/*            {*/}
-        {/*              column: 'properties.test-zhibioa.recent',*/}
-        {/*              termType: 'lte',*/}
-        {/*              source: 'metrics',*/}
-        {/*              value: '123',*/}
-        {/*            },*/}
-        {/*          ],*/}
-        {/*        },*/}
-        {/*      ],*/}
-        {/*    });*/}
-        {/*  }}*/}
-        {/*>*/}
-        {/*  设置*/}
-        {/*</Button>*/}
       </Card>
     </PageContainer>
   );