lind пре 3 година
родитељ
комит
86cc97fa1d

+ 19 - 2
src/pages/rule-engine/Scene/Save/action/device/deviceModal.tsx

@@ -38,6 +38,7 @@ export default (props: DeviceModelProps) => {
   const [selectKeys, setSelectKeys] = useState<ChangeValueType[]>(props.value || []);
   const [searchParam, setSearchParam] = useState({});
   const [value, setValue] = useState<ChangeValueType[]>(props.value || []);
+  const oldAllSelect = useRef<any[]>([]);
 
   useEffect(() => {
     setValue(props.value || []);
@@ -107,6 +108,8 @@ export default (props: DeviceModelProps) => {
     },
   ];
 
+  console.log(selectKeys);
+
   return (
     <>
       {visible && (
@@ -158,6 +161,20 @@ export default (props: DeviceModelProps) => {
                 }
                 setSelectKeys(newSelectKeys);
               },
+              onSelectAll: (selected, selectedRows) => {
+                let newSelectKeys = [...selectKeys];
+                if (selected) {
+                  oldAllSelect.current = selectedRows;
+                  selectedRows.forEach((item) => {
+                    newSelectKeys.push({ name: item.name, value: item.id });
+                  });
+                } else {
+                  newSelectKeys = newSelectKeys.filter((a) => {
+                    return !oldAllSelect.current.some((b) => b.id === a.value);
+                  });
+                }
+                setSelectKeys(newSelectKeys);
+              },
             }}
             request={(params) => queryDevice(params)}
             params={searchParam}
@@ -171,11 +188,11 @@ export default (props: DeviceModelProps) => {
             message.warning('请选择产品');
           } else {
             setVisible(true);
-            setSelectKeys([...value]);
+            setSelectKeys(value ? [...value] : []);
           }
         }}
         style={{ width: '100%' }}
-        value={value.map((item) => item.name).toString()}
+        value={value && value.map((item) => item.name).toString()}
         readOnly
       />
     </>

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

@@ -182,10 +182,8 @@ export default () => {
           preserve={false}
           className={'scene-save'}
           onValuesChange={(changeValue, allValues) => {
-            if (allValues.trigger?.device?.selectorValues) {
+            if (changeValue.trigger) {
               setRequestParams({ trigger: allValues.trigger });
-            } else {
-              setRequestParams(undefined);
             }
             if (allValues.actions) {
               setActionsData(allValues.actions);

+ 31 - 43
src/pages/rule-engine/Scene/Save/trigger/device.tsx

@@ -2,7 +2,7 @@ import { useCallback, useEffect, useState } from 'react';
 import { Col, Row, Select, TreeSelect } 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, querySelector } from '@/pages/rule-engine/Scene/Save/trigger/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';
@@ -49,7 +49,7 @@ export default (props: TriggerProps) => {
   const [productId, setProductId] = useState('');
   // const [selector, setSelector] = useState('fixed');
 
-  const [selectorOptions, setSelectorOptions] = useState<any[]>([]);
+  // const [selectorOptions, setSelectorOptions] = useState<any[]>([]);
   // const [operation, setOperation] = useState<string | undefined>(undefined);
   const [operatorOptions, setOperatorOptions] = useState<any[]>([]);
 
@@ -66,21 +66,13 @@ export default (props: TriggerProps) => {
     }
   };
 
-  const getSelector = () => {
-    querySelector().then((resp) => {
-      if (resp && resp.status === 200) {
-        setSelectorOptions(resp.result);
-      }
-    });
-  };
-
-  const getOrgTree = useCallback(() => {
-    queryOrgTree(productId).then((resp) => {
-      if (resp && resp.status === 200) {
-        setOrgTree(resp.result);
-      }
-    });
-  }, [queryOrgTree]);
+  // const getSelector = () => {
+  //   querySelector().then((resp) => {
+  //     if (resp && resp.status === 200) {
+  //       setSelectorOptions(resp.result);
+  //     }
+  //   });
+  // };
 
   const handleMetadata = (metadata?: string) => {
     try {
@@ -116,9 +108,6 @@ export default (props: TriggerProps) => {
     (id: string, metadata: any) => {
       setProductId(id);
       handleMetadata(metadata);
-      if (props.value?.selector === 'org') {
-        getOrgTree();
-      }
     },
     [props.value],
   );
@@ -141,29 +130,24 @@ export default (props: TriggerProps) => {
 
   useEffect(() => {
     getProducts();
-    getSelector();
+    // getSelector();
   }, []);
 
-  // useEffect(() => {
-  //   const triggerData = props.triggerData;
-  //   console.log('trigger', triggerData);
-  //   if (triggerData && triggerData.device) {
-  //     const _device = triggerData.device;
-  //
-  //     if (_device.selector) {
-  //       if (_device.selector === 'org') {
-  //         getOrgTree();
-  //       }
-  //       setSelector(_device.selector);
-  //     }
-  //
-  //     if (_device.operation && 'operator' in _device.operation) {
-  //       setOperation(_device.operation.operator);
-  //     } else {
-  //       setOperation(undefined)
-  //     }
-  //   }
-  // }, [props.triggerData]);
+  useEffect(() => {
+    const triggerData: any = props.value;
+    console.log('trigger', triggerData);
+    if (triggerData) {
+      if (triggerData.selector) {
+        if (triggerData.selector === 'org') {
+          queryOrgTree(triggerData.productId).then((resp) => {
+            if (resp && resp.status === 200) {
+              setOrgTree(resp.result);
+            }
+          });
+        }
+      }
+    }
+  }, [props.value]);
 
   return (
     <div className={classNames(props.className)}>
@@ -198,12 +182,16 @@ export default (props: TriggerProps) => {
             <ItemGroup compact>
               <Select
                 value={props.value?.selector}
-                options={selectorOptions}
-                fieldNames={{ label: 'name', value: 'id' }}
+                options={[
+                  { label: '全部设备', value: 'all' },
+                  { label: '固定设备', value: 'fixed' },
+                  { label: '按部门', value: 'org' },
+                ]}
                 style={{ width: 120 }}
                 onSelect={(value: string) => {
                   const _value = { ...props.value };
                   _value.selector = value;
+                  _value.selectorValues = undefined;
                   onChange(_value);
                 }}
               />

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

@@ -61,7 +61,7 @@ export default observer((props: TriggerProps) => {
         setOrgTree(resp.result);
       }
     });
-  }, [queryOrgTree]);
+  }, [queryOrgTree, productId]);
 
   const handleMetadata = (metadata?: string) => {
     try {