lind 3 лет назад
Родитель
Сommit
bec1be459a

+ 31 - 0
src/pages/rule-engine/Scene/Save/action/device/AllDevice.tsx

@@ -0,0 +1,31 @@
+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(() => {
+    console.log(props.productId);
+    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: 300 }}
+      value={props.value ? props.value.map((item: any) => item.name).toString() : undefined}
+      readOnly
+    />
+  );
+};

+ 1 - 0
src/pages/rule-engine/Scene/Save/action/device/index.tsx

@@ -17,6 +17,7 @@ interface DeviceProps {
 }
 
 enum SourceEnum {
+  'all' = 'all',
   'fixed' = 'fixed',
   'tag' = 'tag',
   'relation' = '',

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

@@ -8,6 +8,13 @@ export const queryDevice = (data: any) =>
     data: data,
   });
 
+// 获取设备
+export const queryAllDevice = (data: any) =>
+  request(`${SystemConst.API_BASE}/device-instance/_query/no-paging`, {
+    method: 'POST',
+    data: data,
+  });
+
 // 获取产品
 export const getProductList = (params?: any) =>
   request(`/${SystemConst.API_BASE}/device/product/_query/no-paging`, { method: 'GET', params });

+ 24 - 15
src/pages/rule-engine/Scene/Save/components/TimeSelect/index.tsx

@@ -1,37 +1,46 @@
 import { TreeSelect } from 'antd';
 import React, { useCallback, useEffect, useState } from 'react';
 
-type OptionsItemType = {
-  label: string;
-  value: string | number;
-};
-
 interface TimeSelectProps {
-  options?: OptionsItemType[];
-  value?: number[];
-  onChange?: (value: number[]) => void;
+  options?: any[];
+  value?: any[];
+  onChange?: (value: any[]) => void;
   style?: React.CSSProperties;
 }
 
 export default (props: TimeSelectProps) => {
   const [checkedKeys, setCheckedKeys] = useState<any[]>([]);
 
+  const propsChange = (keys: number[]) => {
+    if (props.onChange) {
+      props.onChange(keys);
+    }
+  };
+
   const onChange = useCallback(
-    (keys: string[], _, extra) => {
+    (keys: any[], _, extra) => {
       if (extra.triggerValue === 'all') {
-        const newKeys = extra.checked ? ['all', ...props.options!.map((item) => item.value)] : [];
-        setCheckedKeys(newKeys);
+        propsChange(extra.checked ? props.options!.map((item: any) => item.value) : []);
       } else {
         const noAllKeys = keys.filter((key) => key !== 'all');
-        const newKeys = noAllKeys.length === props.options!.length ? ['all', ...keys] : noAllKeys;
-
-        setCheckedKeys(newKeys);
+        propsChange(noAllKeys);
       }
     },
     [checkedKeys, props.options],
   );
 
-  useEffect(() => {}, [checkedKeys]);
+  useEffect(() => {
+    setCheckedKeys(props.value || []);
+    if (props.value && props.options) {
+      if (props.value.length >= props.options.length) {
+        setCheckedKeys([...props.value, 'all']);
+      } else {
+        setCheckedKeys(props.value);
+      }
+    } else {
+      setCheckedKeys([]);
+    }
+  }, [props.value, props.options]);
 
   return (
     <TreeSelect

+ 7 - 3
src/pages/rule-engine/Scene/Save/components/TimingTrigger/index.tsx

@@ -48,6 +48,7 @@ export default (props: TimingTrigger) => {
   const [data, setData] = useState<TimerType>(DefaultValue);
 
   useEffect(() => {
+    console.log('timing-trigger', props.value);
     setData(props.value || DefaultValue);
   }, [props.value]);
 
@@ -57,6 +58,8 @@ export default (props: TimingTrigger) => {
     }
   };
 
+  console.log('timing-trigger-data', data);
+
   const type1Select = async (key: string) => {
     if (key !== TriggerEnum.cron) {
       onChange({
@@ -144,8 +147,9 @@ export default (props: TimingTrigger) => {
         <span> 每 </span>
         <InputNumber
           value={data.period?.every}
+          placeholder={'请输入时间'}
           addonAfter={TimeTypeAfter}
-          style={{ width: 150 }}
+          style={{ width: 180 }}
           min={0}
           max={9999}
           onChange={(e) => {
@@ -191,7 +195,7 @@ export default (props: TimingTrigger) => {
         ]}
         value={data.trigger}
         onSelect={type1Select}
-        style={{ width: 120 }}
+        style={{ width: 100 }}
       />
       {data.trigger !== TriggerEnum.cron ? (
         <>
@@ -226,7 +230,7 @@ export default (props: TimingTrigger) => {
               { label: '执行一次', value: PeriodModEnum.once },
             ]}
             value={data.mod}
-            style={{ width: 150 }}
+            style={{ width: 120 }}
             onSelect={type2Select}
           />
           {implementNode}

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

@@ -209,7 +209,11 @@ export default () => {
               </Form.Item>
             )}
             {triggerType === TriggerWayType.device && (
-              <TriggerDevice className={'trigger-type-content'} form={form} />
+              <TriggerDevice
+                className={'trigger-type-content'}
+                form={form}
+                triggerData={FormModel.trigger}
+              />
             )}
           </Form.Item>
           {triggerType === TriggerWayType.device &&

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

@@ -10,10 +10,12 @@ import Operation from './operation';
 import classNames from 'classnames';
 import { observer } from '@formily/reactive-react';
 import { FormModel } from '../index';
+import AllDevice from '@/pages/rule-engine/Scene/Save/action/device/AllDevice';
 
 interface TriggerProps {
   value?: string;
   onChange?: (type: string) => void;
+  triggerData?: any;
   form?: FormInstance;
   className?: string;
 }
@@ -123,8 +125,10 @@ export default observer((props: TriggerProps) => {
   }, []);
 
   useEffect(() => {
-    if (FormModel.trigger && FormModel.trigger.device) {
-      const _device = FormModel.trigger.device;
+    const triggerData = props.triggerData;
+    console.log('trigger', triggerData);
+    if (triggerData && triggerData.device) {
+      const _device = triggerData.device;
 
       if (_device.selector) {
         if (_device.selector === 'org') {
@@ -133,12 +137,11 @@ export default observer((props: TriggerProps) => {
         setSelector(_device.selector);
       }
 
-      console.log(_device.operation && _device.operation.operator);
       if (_device.operation && _device.operation.operator) {
         setOperation(_device.operation.operator);
       }
     }
-  }, [FormModel.trigger]);
+  }, [props.triggerData]);
 
   return (
     <div className={classNames(props.className)}>
@@ -162,13 +165,25 @@ export default observer((props: TriggerProps) => {
                 fieldNames={{ label: 'name', value: 'id' }}
               />
             </Form.Item>
-            <Form.Item name={['trigger', 'device', 'selector']} initialValue={'fixed'}>
+            <Form.Item
+              name={['trigger', 'device', 'selector']}
+              initialValue={
+                props.triggerData && props.triggerData.device && props.triggerData.device.selector
+                  ? props.triggerData.device.selector
+                  : 'fixed'
+              }
+            >
               <Select
                 options={selectorOptions}
                 fieldNames={{ label: 'name', value: 'id' }}
                 style={{ width: 120 }}
               />
             </Form.Item>
+            {selector === 'all' && (
+              <Form.Item name={['trigger', 'device', 'selectorValues']}>
+                <AllDevice productId={productId} />
+              </Form.Item>
+            )}
             {selector === 'fixed' && (
               <Form.Item name={['trigger', 'device', 'selectorValues']}>
                 <Device productId={productId} />

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

@@ -50,7 +50,7 @@ export default (props: OperatorProps) => {
       setPropertiesItem(findProperties(_key, props.value[_key]));
     } else {
       setData({});
-      setKey('');
+      setKey(undefined);
     }
   }, [props.value, props.propertiesList]);