Explorar o código

feat(merge): merge xyh

Next xyh
Lind %!s(int64=3) %!d(string=hai) anos
pai
achega
ee822445bf

+ 2 - 27
src/pages/rule-engine/Scene/Save/action/device/AllDevice.tsx

@@ -1,30 +1,5 @@
 import { Input } from 'antd';
-import { useEffect } from 'react';
-import { queryAllDevice } from '@/pages/rule-engine/Scene/Save/action/device/service';
 
-interface AllDeviceProps {
-  productId?: string;
-  value?: any;
-  onChange?: (value: any) => void;
-}
-
-export default (props: AllDeviceProps) => {
-  useEffect(() => {
-    queryAllDevice({
-      terms: [{ column: 'productId', value: props.productId }],
-      paging: false,
-    }).then((resp) => {
-      if (resp.status === 200 && props.onChange) {
-        props.onChange(resp.result.map((item: any) => ({ id: item.id, name: item.name })));
-      }
-    });
-  }, [props.productId]);
-
-  return (
-    <Input
-      style={{ width: '100%' }}
-      value={props.value ? props.value.map((item: any) => item.name).toString() : undefined}
-      readOnly
-    />
-  );
+export default () => {
+  return <Input style={{ width: '100%' }} value={'全部设备'} readOnly />;
 };

+ 20 - 6
src/pages/rule-engine/Scene/Save/action/device/index.tsx

@@ -5,6 +5,7 @@ import { getProductList } from '@/pages/rule-engine/Scene/Save/action/device/ser
 import Device from './deviceModal';
 import TagModal from './tagModal';
 import { ItemGroup } from '@/pages/rule-engine/Scene/Save/components';
+import RelationSelect from './relationSelect';
 
 interface DeviceProps {
   name: number;
@@ -21,7 +22,7 @@ enum SourceEnum {
   'all' = 'all',
   'fixed' = 'fixed',
   'tag' = 'tag',
-  'relation' = '',
+  'relation' = 'relation',
 }
 
 const DefaultSourceOptions = [
@@ -188,7 +189,9 @@ export default (props: DeviceProps) => {
             <Select
               options={sourceList}
               style={{ width: 120 }}
-              onSelect={(key: string) => setSelector(key)}
+              onSelect={(key: string) => {
+                setSelector(key);
+              }}
             />
           </Form.Item>
           {selector === SourceEnum.fixed && (
@@ -215,7 +218,7 @@ export default (props: DeviceProps) => {
               {...props.restField}
               rules={[{ required: true, message: '请选择关系人' }]}
             >
-              <Select style={{ width: '100%' }} placeholder={'请选择关系'} />
+              <RelationSelect />
             </Form.Item>
           )}
         </ItemGroup>
@@ -260,9 +263,20 @@ export default (props: DeviceProps) => {
           </Form.Item>
         ) : null}
       </Col>
-      <Form.Item name={[name, 'device', 'source']} hidden>
-        <Input />
-      </Form.Item>
+      {selector === SourceEnum.fixed || selector === SourceEnum.tag ? (
+        <Form.Item name={[name, 'device', 'source']} initialValue={'fixed'} hidden>
+          <Input />
+        </Form.Item>
+      ) : (
+        <>
+          <Form.Item name={[name, 'device', 'source']} initialValue={'upper'} hidden>
+            <Input />
+          </Form.Item>
+          <Form.Item name={[name, 'device', 'upperKey']} initialValue={'deviceId'} hidden>
+            <Input />
+          </Form.Item>
+        </>
+      )}
     </>
   );
 };

+ 49 - 0
src/pages/rule-engine/Scene/Save/action/device/relationSelect.tsx

@@ -0,0 +1,49 @@
+import { Select } from 'antd';
+import { useEffect, useState } from 'react';
+import { getRelations } from '@/pages/rule-engine/Scene/Save/action/service';
+
+interface RelationProps {
+  value?: any;
+  onChange?: (value?: any) => void;
+}
+
+export default (props: RelationProps) => {
+  const [options, setOptions] = useState([]);
+
+  const getRelation = async () => {
+    const resp = await getRelations();
+    if (resp.status === 200) {
+      setOptions(
+        resp.result.map((item: any) => ({
+          label: item.name,
+          value: item.id,
+        })),
+      );
+    }
+  };
+
+  useEffect(() => {
+    getRelation();
+  }, []);
+
+  return (
+    <Select
+      options={options}
+      style={{ width: '100%' }}
+      value={props.value ? props.value[0]?.value?.relation : undefined}
+      onSelect={(key: string) => {
+        if (props.onChange) {
+          props.onChange([
+            {
+              value: {
+                objectType: 'user',
+                relation: key,
+              },
+            },
+          ]);
+        }
+      }}
+      placeholder={'请选择关系'}
+    />
+  );
+};

+ 10 - 0
src/pages/rule-engine/Scene/Save/action/service.ts

@@ -75,3 +75,13 @@ export const queryWechatDepartments = (id: string) =>
 // 根据配置ID获取标签推送
 export const queryTag = (id: string) =>
   request(`${SystemConst.API_BASE}/notifier/wechat/corp/${id}/tags`, { method: 'GET' });
+
+export const getRelations = () =>
+  request(`${SystemConst.API_BASE}/relation/_query/no-paging`, {
+    method: 'POST',
+    data: {
+      paging: false,
+      sorts: [{ name: 'createTime', order: 'desc' }],
+      terms: [{ termType: 'eq', column: 'objectTypeName', value: '设备' }],
+    },
+  });

+ 3 - 1
src/pages/rule-engine/Scene/Save/components/InputUpload/index.tsx

@@ -27,7 +27,9 @@ export default (props: InputUploadProps) => {
     if (info.file.status === 'done') {
       info.file.url = info.file.response?.result;
       setLoading(false);
-      setUrl(info.file.response?.result);
+      if (onChange) {
+        onChange(info.file.response?.result);
+      }
     }
   };
 

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

@@ -77,13 +77,14 @@ export default () => {
         setParallel(_data.parallel);
 
         setTriggerValue({ trigger: _data.terms || [] });
-        setTriggerDatas(_data.terms);
+        setTriggerDatas(_data.trigger);
         if (_data.trigger?.shakeLimit) {
           setShakeLimit(_data.trigger?.shakeLimit || DefaultShakeLimit);
         }
         if (_data.trigger?.device) {
           setRequestParams({ trigger: _data.trigger });
         }
+
         if (_data.actions) {
           setActionsData(_data.actions);
         }
@@ -213,14 +214,13 @@ export default () => {
           onValuesChange={(changeValue, allValues) => {
             if (changeValue.trigger) {
               if (changeValue.trigger.device) {
-                if (changeValue.trigger.device.productId) {
-                  setTriggerValue([]);
-                  setRequestParams({ trigger: allValues.trigger });
-                } else if (
+                if (
                   changeValue.trigger.device.selectorValues ||
                   (changeValue.trigger.device.operation &&
                     changeValue.trigger.device.operation.operator)
                 ) {
+                  setTriggerValue([]);
+                  setRequestParams({ trigger: allValues.trigger });
                   setTriggerDatas(allValues.trigger);
                 }
               } else if (['timer', 'manual'].includes(changeValue.trigger.type)) {

+ 23 - 4
src/pages/rule-engine/Scene/Save/trigger/OrgTreeSelect.tsx

@@ -1,29 +1,48 @@
 import type { TreeSelectProps } from 'antd';
 import { TreeSelect } from 'antd';
-import React, { useEffect, useState } from 'react';
+import React, { useCallback, useEffect, useState } from 'react';
+import { queryOrgTree } from '@/pages/rule-engine/Scene/Save/trigger/service';
 
 interface OrgTreeSelect extends Omit<TreeSelectProps, 'onChange' | 'value'> {
   onChange?: (value: any[]) => void;
   value?: any;
+  productId?: string;
 }
 
 export default (props: OrgTreeSelect) => {
   const [myValue, setMyValue] = useState(props.value ? props.value[0].id : undefined);
   const { value, onChange, ...extraProps } = props;
+  const [orgTree, setOrgTree] = useState<any>([]);
+
+  const getOrg = useCallback(async () => {
+    if (props.productId) {
+      queryOrgTree(props.productId).then((resp) => {
+        if (resp && resp.status === 200) {
+          setOrgTree(resp.result);
+        }
+      });
+    }
+  }, [props.productId]);
+
+  useEffect(() => {
+    getOrg();
+  }, []);
 
   const onchange = (key: string, label: React.ReactNode[]) => {
     if (props.onChange) {
-      props.onChange([{ id: key, name: label[0] }]);
+      props.onChange([{ value: key, name: label[0] }]);
     }
   };
 
   useEffect(() => {
     if (props.value) {
-      setMyValue(props.value[0].id);
+      setMyValue(props.value[0].value);
     } else {
       setMyValue(undefined);
     }
   }, [props.value]);
 
-  return <TreeSelect<string> value={myValue} onChange={onchange} {...extraProps} />;
+  return (
+    <TreeSelect<string> value={myValue} treeData={orgTree} onChange={onchange} {...extraProps} />
+  );
 };

+ 5 - 23
src/pages/rule-engine/Scene/Save/trigger/index.tsx

@@ -3,7 +3,6 @@ import type { FormInstance } from 'antd';
 import { Col, Form, Row, Select } from 'antd';
 import { ItemGroup, TimingTrigger } from '@/pages/rule-engine/Scene/Save/components';
 import { getProductList } from '@/pages/rule-engine/Scene/Save/action/device/service';
-import { queryOrgTree } from '@/pages/rule-engine/Scene/Save/trigger/service';
 import Device from '@/pages/rule-engine/Scene/Save/action/device/deviceModal';
 import FunctionCall from '@/pages/rule-engine/Scene/Save/action/device/functionCall';
 import Operation from './operation';
@@ -48,15 +47,6 @@ export default observer((props: TriggerProps) => {
   const [functions, setFunctions] = useState([]); // 功能列表
 
   const [functionItem, setFunctionItem] = useState<any[]>([]); // 单个功能-属性列表
-  const [orgTree, setOrgTree] = useState<any>([]);
-
-  const getOrgTree = useCallback(() => {
-    queryOrgTree(productId).then((resp) => {
-      if (resp && resp.status === 200) {
-        setOrgTree(resp.result);
-      }
-    });
-  }, [queryOrgTree, productId]);
 
   const handleMetadata = (metadata?: string) => {
     try {
@@ -92,9 +82,6 @@ export default observer((props: TriggerProps) => {
     (id: string, metadata: any) => {
       setProductId(id);
       handleMetadata(metadata);
-      if (selector === 'org') {
-        getOrgTree();
-      }
     },
     [selector],
   );
@@ -142,7 +129,7 @@ export default observer((props: TriggerProps) => {
     getProducts();
   }, []);
 
-  console.log('triggerModel', FormModel);
+  console.log('triggerModel', selector);
 
   useEffect(() => {
     const triggerData = props.value;
@@ -151,9 +138,6 @@ export default observer((props: TriggerProps) => {
       const _device = triggerData.device;
 
       if (_device.selector) {
-        if (_device.selector === 'org') {
-          getOrgTree();
-        }
         setSelector(_device.selector);
       }
     }
@@ -178,6 +162,7 @@ export default observer((props: TriggerProps) => {
                 props.form?.resetFields([['trigger', 'device', 'selectorValues']]);
                 props.form?.resetFields([['trigger', 'device', 'operation']]);
                 productIdChange(key, node.metadata);
+                setSelector('fixed');
                 props.form?.setFieldsValue({
                   trigger: {
                     device: {
@@ -216,11 +201,8 @@ export default observer((props: TriggerProps) => {
                   />
                 </Form.Item>
                 {selector === 'all' && (
-                  <Form.Item
-                    name={['trigger', 'device', 'selectorValues']}
-                    rules={[{ required: true, message: '请选择设备' }]}
-                  >
-                    <AllDevice productId={productId} />
+                  <Form.Item>
+                    <AllDevice />
                   </Form.Item>
                 )}
                 {selector === 'fixed' && (
@@ -237,7 +219,7 @@ export default observer((props: TriggerProps) => {
                     rules={[{ required: true, message: '请选择部门' }]}
                   >
                     <OrgTreeSelect
-                      treeData={orgTree}
+                      productId={productId}
                       fieldNames={{ label: 'name', value: 'id' }}
                       placeholder={'请选择部门'}
                       style={{ width: '100%' }}

+ 5 - 2
src/pages/system/Platforms/save.tsx

@@ -78,7 +78,7 @@ export default (props: SaveProps) => {
   const form = useMemo(
     () =>
       createForm({
-        validateFirst: true,
+        validateFirst: false,
       }),
     [props.data],
   );
@@ -103,6 +103,10 @@ export default (props: SaveProps) => {
           id: randomString(),
         });
       }
+    } else {
+      if (form) {
+        form.reset();
+      }
     }
   }, [props.type, props.visible]);
 
@@ -428,7 +432,6 @@ export default (props: SaveProps) => {
   const saveData = useCallback(async () => {
     // setLoading(true)
     const data: any = await form.submit();
-    console.log(data);
     if (data) {
       setLoading(true);
       const resp: any = props.type === 'edit' ? await service.edit(data) : await service.save(data);