Parcourir la source

feat: 触发条件回显

xieyonghong il y a 3 ans
Parent
commit
826ebe3e61

+ 18 - 1
src/pages/rule-engine/Scene/Save/action/ListItem/FilterCondition.tsx

@@ -24,6 +24,7 @@ export default observer((props: FilterProps) => {
   const [termType, setTermType] = useState('');
   const [column, setColumn] = useState('');
 
+  const [BuiltInOptions, setBuiltInOptions] = useState<any[]>([]);
   const [columnOptions, setColumnOptions] = useState<any[]>([]);
   const [ttOptions, setTtOptions] = useState<any[]>([]);
   const [valueOptions] = useState<any[]>([]);
@@ -90,7 +91,9 @@ export default observer((props: FilterProps) => {
   const getParmas = () => {
     queryBuiltInParams(FormModel, { action: props.thenName }).then((res: any) => {
       if (res.status === 200) {
-        setColumnOptions(handleTreeData(res.result));
+        const params = handleTreeData(res.result);
+        setColumnOptions(params);
+        setBuiltInOptions(params);
       }
     });
   };
@@ -127,6 +130,14 @@ export default observer((props: FilterProps) => {
 
   useEffect(() => {
     if (props.data) {
+      setColumn(props.data.column || '');
+      setTermType(props.data.termType || '');
+      setValue(props.data.value);
+    }
+  }, [props.data]);
+
+  useEffect(() => {
+    if (props.data) {
       getParmas();
     }
   }, []);
@@ -215,6 +226,8 @@ export default observer((props: FilterProps) => {
                 placeholder="参数值"
                 valueType={valueType}
                 value={value}
+                BuiltInOptions={BuiltInOptions}
+                showLabelKey="fullName"
                 name={0}
                 onChange={(v, lb) => {
                   setValue({
@@ -231,6 +244,8 @@ export default observer((props: FilterProps) => {
                 placeholder="参数值"
                 valueType={valueType}
                 value={value}
+                BuiltInOptions={BuiltInOptions}
+                showLabelKey="fullName"
                 name={1}
                 onChange={(v, lb) => {
                   setValue({
@@ -249,6 +264,8 @@ export default observer((props: FilterProps) => {
               placeholder="参数值"
               valueType={valueType}
               value={value}
+              BuiltInOptions={BuiltInOptions}
+              showLabelKey="fullName"
               onChange={(v, lb) => {
                 setValue({
                   ...v,

+ 13 - 16
src/pages/rule-engine/Scene/Save/action/ListItem/index.less

@@ -78,6 +78,7 @@
     background-color: rgba(229, 0, 18, 0.1);
     border-radius: 50%;
     transform: translate(50%, -50%);
+    cursor: pointer;
 
     &:hover {
       background-color: rgba(#e50012, 0.2);
@@ -90,31 +91,27 @@
 
   .filter-condition-content {
     position: relative;
-    padding: 8px;
-    background-color: #fafafa;
+    padding: 16px;
     border: 1px dashed rgba(0, 0, 0, 0.3);
     row-gap: 16px;
 
     .filter-condition-delete {
       position: absolute;
-      top: -10px;
-      right: -10px;
-      display: none;
-      width: 20px;
-      height: 20px;
-      color: #999;
-      line-height: 20px;
-      text-align: center;
-      background-color: #f1f1f1;
+      top: 0;
+      right: 0;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 32px;
+      height: 32px;
+      color: #e50012;
+      background-color: rgba(229, 0, 18, 0.1);
       border-radius: 50%;
+      transform: translate(50%, -50%);
       cursor: pointer;
 
-      &.show {
-        display: block;
-      }
-
       &:hover {
-        background-color: #f3f3f3;
+        background-color: rgba(229, 0, 18, 0.2);
       }
     }
   }

+ 2 - 2
src/pages/rule-engine/Scene/Save/components/Buttons/Dropdown.tsx

@@ -32,7 +32,7 @@ const TypeStyle = {
 const DropdownButton = (props: DropdownButtonProps) => {
   const [myValue, setMyValue] = useState(props.value);
   const [label, setLabel] = useState('');
-  const [loading, setLoading] = useState(false);
+  const [, setLoading] = useState(false);
   const [open, setOpen] = useState(false);
 
   const typeClassName = TypeStyle[props.type];
@@ -111,7 +111,7 @@ const DropdownButton = (props: DropdownButtonProps) => {
   }, [props.value]);
 
   useEffect(() => {
-    if (props.value && !loading) {
+    if (props.value) {
       findLable(props.value, props.options);
       setLoading(true);
     }

+ 83 - 37
src/pages/rule-engine/Scene/Save/components/Buttons/ParamsDropdown.tsx

@@ -1,5 +1,5 @@
 import { useCallback, useEffect, useState } from 'react';
-import { Input, InputNumber, Menu } from 'antd';
+import { Input, InputNumber, Menu, Tree } from 'antd';
 import classNames from 'classnames';
 import styles from './index.less';
 import MTimePicker from '../ParamsSelect/components/MTimePicker';
@@ -16,6 +16,7 @@ interface ParamsDropdownProps {
   metricOptions?: any[];
   type?: string;
   options?: any[];
+  BuiltInOptions?: any[];
   metricsOptions?: any[];
   name?: number;
   valueType: string;
@@ -61,7 +62,7 @@ const Menus = (props: MenusProps) => {
 export default (props: ParamsDropdownProps) => {
   const [label, setLabel] = useState('');
   const [myValue, setMyValue] = useState<any>(undefined);
-  const [activeKey, setActiveKey] = useState('manual');
+  const [activeKey, setActiveKey] = useState(props.BuiltInOptions ? 'fixed' : 'manual');
   const [open, setOpen] = useState(false);
 
   const onValueChange = useCallback(
@@ -77,6 +78,8 @@ export default (props: ParamsDropdownProps) => {
     [activeKey],
   );
 
+  console.log('activeKey', activeKey);
+
   const renderNode = useCallback(
     (type: string, _v: any, config: any) => {
       let _value = _v;
@@ -124,6 +127,22 @@ export default (props: ParamsDropdownProps) => {
               }}
             />
           );
+        case 'tree':
+          return (
+            <Tree
+              selectedKeys={_value ? [_value] : []}
+              onSelect={(selectedKeys, e) => {
+                let titleKey = 'title';
+                if (props.showLabelKey) {
+                  titleKey = props.showLabelKey;
+                }
+                onValueChange(selectedKeys[0], e.node[titleKey]);
+              }}
+              style={{ width: 300 }}
+              treeData={props.BuiltInOptions}
+              height={500}
+            />
+          );
         default:
           return (
             <Input
@@ -140,25 +159,25 @@ export default (props: ParamsDropdownProps) => {
     [props],
   );
 
-  // const findLable = (value: string, data: any[]): boolean => {
-  //   let isLabel = false;
-  //   return data.some((item) => {
-  //     if (item.key === value) {
-  //       let titleKey = 'title'
-  //       if (props.showLabelKey) {
-  //         titleKey = props.showLabelKey
-  //       }
-  //       setLabel(item[titleKey]);
-  //       isLabel = true;
-  //     } else if (item.children) {
-  //       isLabel = findLable(value, item.children);
-  //     }
-  //     return isLabel;
-  //   });
-  // };
+  const findLable = (value: string, data: any[]): boolean => {
+    let isLabel = false;
+    return data.some((item) => {
+      if (item.key === value) {
+        let titleKey = 'title';
+        if (props.showLabelKey) {
+          titleKey = props.showLabelKey;
+        }
+        setLabel(item[titleKey]);
+        isLabel = true;
+      } else if (item.children) {
+        isLabel = findLable(value, item.children);
+      }
+      return isLabel;
+    });
+  };
 
   useEffect(() => {
-    console.log('params-dropdown', props.value);
+    console.log('params-dropdown', props.value, props);
 
     if (props.value?.value === undefined || props.value?.value === '') {
       setLabel('');
@@ -182,37 +201,63 @@ export default (props: ParamsDropdownProps) => {
       }
     } else if (['enum', 'boolean'].includes(props.valueType)) {
       setLabel(props.name ? props.value.value[props.name] : props.value.value);
+    } else if (props.BuiltInOptions) {
+      findLable(props.value?.value, props.BuiltInOptions || []);
+    } else {
+      setLabel(props.value?.value);
     }
     setMyValue(props.value?.value);
-    setActiveKey(props.value?.source);
-  }, [props.value]);
+    if (props.value?.source) {
+      setActiveKey(props.value?.source);
+    } else {
+      setActiveKey(props.BuiltInOptions ? 'fixed' : 'manual');
+    }
+  }, [props.value, props.valueType]);
 
   useEffect(() => {
-    if (props.options) {
-      // findLable(props.value?.value, props.options || [])
+    if (props.BuiltInOptions) {
+      findLable(props.value?.value, props.BuiltInOptions || []);
     }
-  }, [props.options]);
+  }, [props.BuiltInOptions]);
 
-  const _itemList = [
-    {
-      key: 'manual',
-      label: '手动输入',
-      content: renderNode(props.valueType, myValue, props),
-    },
-  ];
+  let _itemList = [];
 
-  if (props.isMetric) {
-    _itemList.push({
-      key: 'metric',
-      label: '指标值',
-      content: renderNode('enum', myValue, props),
-    });
+  if ('BuiltInOptions' in props) {
+    _itemList = [
+      {
+        key: 'fixed',
+        label: '手动输入',
+        content: renderNode(props.valueType, myValue, props),
+      },
+      {
+        key: 'upper',
+        label: '内置参数',
+        content: renderNode('tree', myValue, props),
+      },
+    ];
+  } else {
+    _itemList = [
+      {
+        key: 'manual',
+        label: '手动输入',
+        content: renderNode(props.valueType, myValue, props),
+      },
+    ];
+
+    if (props.isMetric) {
+      _itemList.push({
+        key: 'metric',
+        label: '指标值',
+        content: renderNode('enum', myValue, props),
+      });
+    }
   }
 
   return (
     <ParamsSelect
       value={myValue}
       onChange={(value, source) => {
+        console.log(value);
         setActiveKey(source);
         // props.onChange?.({
         //   value,
@@ -222,6 +267,7 @@ export default (props: ParamsDropdownProps) => {
       tabKey={activeKey}
       itemList={_itemList}
       style={{ width: 'auto', display: 'inline-block' }}
+      bodyStyle={{ width: 'auto' }}
       type={props.valueType}
       open={open}
       openChange={setOpen}

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

@@ -18,6 +18,7 @@ interface Props {
   inputProps?: InputProps;
   itemList: ItemProps[];
   style?: object;
+  bodyStyle?: object;
   tabKey: string;
   type?: string;
   className?: string | string[];
@@ -66,6 +67,7 @@ export default (props: Props) => {
   // useEffect(() => {
   //   props.onChange(value, tabKey);
   // }, [value, tabKey]);
+  const _bosyStyle = props.bodyStyle || {};
 
   return (
     <div className={'select-wrapper'} ref={wrapperRef} style={props.style}>
@@ -89,7 +91,7 @@ export default (props: Props) => {
         <div
           className={'select-container'}
           ref={nodeRef}
-          style={props.type !== 'date' ? { minHeight: 100 } : undefined}
+          style={props.type !== 'date' ? { minHeight: 100, ..._bosyStyle } : _bosyStyle}
         >
           <div className={'select-box'}>
             <div className={'select-box-header-top'}>

+ 15 - 13
src/pages/rule-engine/Scene/Save/device/addModel.tsx

@@ -1,6 +1,6 @@
 import { Modal, Button, Steps } from 'antd';
 import { observer } from '@formily/react';
-import { model } from '@formily/reactive';
+import { observable } from '@formily/reactive';
 import { useEffect, useRef } from 'react';
 import { onlyMessage } from '@/utils/util';
 import type { TriggerDevice, TriggerDeviceOptions } from '@/pages/rule-engine/Scene/typings';
@@ -16,7 +16,7 @@ interface AddProps {
   onSave?: (data: TriggerDevice, options: any) => void;
 }
 
-interface DeviceModelProps extends Partial<TriggerDevice> {
+export interface DeviceModelProps extends Partial<TriggerDevice> {
   steps: { key: string; title: string }[];
   stepNumber: number;
   productId: string;
@@ -28,11 +28,11 @@ interface DeviceModelProps extends Partial<TriggerDevice> {
   };
   deviceId: string;
   orgId: string;
-  operation: TriggerDeviceOptions;
+  operation?: TriggerDeviceOptions;
   options: any;
 }
 
-export const DeviceModel = model<DeviceModelProps>({
+export const DeviceModel = observable<DeviceModelProps>({
   steps: [
     {
       key: 'product',
@@ -61,14 +61,22 @@ export const DeviceModel = model<DeviceModelProps>({
 });
 
 export default observer((props: AddProps) => {
-  const typeRef = useRef<{ validateFields?: any }>();
+  const typeRef = useRef<{ validateFields?: any; handleInit?: any }>();
 
   useEffect(() => {
     DeviceModel.stepNumber = 0;
   }, []);
 
   useEffect(() => {
-    Object.assign(DeviceModel, props.value);
+    if (props.value) {
+      DeviceModel.selector = props.value.selector;
+      DeviceModel.productId = props.value.productId;
+      DeviceModel.selector = props.value.selector;
+      DeviceModel.selectorValues = props.value.selectorValues;
+      DeviceModel.operation = props.value.operation;
+      // Object.assign(DeviceModel, props.value);
+      console.log('addModel', DeviceModel, props.value);
+    }
   }, [props.value]);
 
   const prev = () => {
@@ -175,18 +183,12 @@ export default observer((props: AddProps) => {
       case 'device':
         return <Device />;
       case 'type':
-        return <Type ref={typeRef} />;
+        return <Type ref={typeRef} data={DeviceModel} />;
       default:
         return <Product />;
     }
   };
 
-  useEffect(() => {
-    if (props.value) {
-      // TODO 处理回显数据
-    }
-  }, [props.value]);
-
   return (
     <Modal
       visible

+ 4 - 13
src/pages/rule-engine/Scene/Save/device/device.tsx

@@ -39,19 +39,10 @@ export default observer(() => {
   }, []);
 
   useEffect(() => {
-    DeviceModel.selector = selector;
-  }, [selector]);
-
-  const contentRender = (type?: string) => {
-    switch (type) {
-      case 'custom':
-        return <DeviceList />;
-      case 'org':
-        return <OrgList />;
-      default:
-        return <></>;
+    if (selector) {
+      DeviceModel.selector = selector;
     }
-  };
+  }, [selector]);
 
   return (
     <div>
@@ -60,7 +51,7 @@ export default observer(() => {
           <TopCard typeList={TypeList} />
         </Form.Item>
       </Form>
-      {contentRender(selector)}
+      {selector === 'custom' ? <DeviceList /> : selector === 'org' ? <OrgList /> : null}
     </div>
   );
 });

+ 19 - 17
src/pages/rule-engine/Scene/Save/device/deviceList.tsx

@@ -1,7 +1,7 @@
 import { ProTableCard } from '@/components';
 import SearchComponent from '@/components/SearchComponent';
 import type { DeviceInstance } from '@/pages/device/Instance/typings';
-import { useEffect, useRef, useState } from 'react';
+import { useRef, useState } from 'react';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
 import { service } from '@/pages/device/Instance/index';
 import { isNoCommunity } from '@/utils/util';
@@ -10,19 +10,12 @@ import { service as deptService } from '@/pages/system/Department';
 import { useIntl } from 'umi';
 import { SceneDeviceCard } from '@/components/ProTableCard/CardItems/device';
 import { DeviceModel } from './addModel';
-import { observer } from '@formily/reactive-react';
 
-export default observer(() => {
+export default () => {
   const actionRef = useRef<ActionType>();
   const intl = useIntl();
   const [searchParam, setSearchParam] = useState({});
-  const [selectorValues, setSelectorValues] = useState<any[]>([]);
-
-  useEffect(() => {
-    if (DeviceModel.selector === 'device') {
-      setSelectorValues(DeviceModel.selectorValues?.map((item) => item.id) || []);
-    }
-  }, [DeviceModel.selectorValues]);
+  const [isFirst, setIsFirst] = useState(true);
 
   const columns: ProColumns<DeviceInstance>[] = [
     {
@@ -253,13 +246,22 @@ export default observer(() => {
           onlyCard={true}
           tableAlertRender={false}
           rowSelection={{
-            selectedRowKeys: selectorValues,
+            selectedRowKeys: DeviceModel.selectorValues
+              ? DeviceModel.selectorValues.map((item) => {
+                  console.log('item', item);
+
+                  return item.value;
+                })
+              : [],
             onChange(selectedRowKeys, selectedRows) {
-              setSelectorValues(selectedRowKeys);
-              DeviceModel.selectorValues = selectedRows.map((item) => ({
-                name: item.name,
-                value: item.id,
-              }));
+              console.log(selectedRowKeys, DeviceModel.selectorValues);
+              if (!isFirst) {
+                DeviceModel.selectorValues = selectedRows.map((item) => ({
+                  name: item.name,
+                  value: item.id,
+                }));
+                setIsFirst(false);
+              }
             },
           }}
           request={(params) =>
@@ -277,4 +279,4 @@ export default observer(() => {
       </div>
     </>
   );
-});
+};

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

@@ -42,7 +42,7 @@ export default observer(() => {
       <div style={{ marginBottom: 16 }}>
         <Observer>
           {() => {
-            const label = handleLabel(FormModel.trigger?.options);
+            const label = handleLabel(FormModel.options?.trigger);
             return (
               <AddButton
                 style={{ width: '100%' }}
@@ -52,7 +52,7 @@ export default observer(() => {
               >
                 <div
                   className={classNames('trigger-options-content', {
-                    'is-add': !!Object.keys(FormModel.trigger?.options || {}).length,
+                    'is-add': !!Object.keys(FormModel.options?.trigger || {}).length,
                   })}
                 >
                   {label}
@@ -68,7 +68,7 @@ export default observer(() => {
           value={FormModel.trigger?.device}
           onSave={(data, options) => {
             setVisible(false);
-            FormModel.trigger!['options'] = options;
+            FormModel.options!['trigger'] = options;
             FormModel.trigger!.device = data;
           }}
           onCancel={() => {

+ 1 - 1
src/pages/rule-engine/Scene/Save/device/org.tsx

@@ -1,11 +1,11 @@
 import ProTable from '@jetlinks/pro-table';
 import SearchComponent from '@/components/SearchComponent';
 import { DeviceModel } from './addModel';
-import { observer } from '@formily/reactive-react';
 import type { DepartmentItem } from '@/pages/system/Department/typings';
 import { service } from '@/pages/system/Department';
 import { useState, useRef } from 'react';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
+import { observer } from '@formily/reactive-react';
 
 export default observer(() => {
   const actionRef = useRef<ActionType>();

+ 14 - 2
src/pages/rule-engine/Scene/Save/device/product.tsx

@@ -1,7 +1,7 @@
 import { ProTableCard } from '@/components';
 import SearchComponent from '@/components/SearchComponent';
 import type { ProductItem } from '@/pages/device/Product/typings';
-import { useRef, useState } from 'react';
+import { useEffect, useRef, useState } from 'react';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
 import { service } from '@/pages/device/Product/index';
 import { SceneProductCard } from '@/components/ProTableCard/CardItems/product';
@@ -25,6 +25,18 @@ export default observer(() => {
     }
   };
 
+  useEffect(() => {
+    if (DeviceModel.productId && !DeviceModel.productDetail.id) {
+      service.detail(DeviceModel.productId).then((res) => {
+        console.log(res);
+        if (res.status === 200) {
+          DeviceModel.productDetail = res.result;
+          handleMetadata(res.result.metadata);
+        }
+      });
+    }
+  }, [DeviceModel.productId]);
+
   const columns: ProColumns<ProductItem>[] = [
     {
       title: 'ID',
@@ -228,7 +240,7 @@ export default observer(() => {
             type: 'radio',
             selectedRowKeys: [DeviceModel.productId],
             onChange: (_, selectedRows) => {
-              // console.log(selectedRowKeys,selectedRows)
+              console.log(selectedRows);
               DeviceModel.productId = selectedRows.map((item) => item.id)[0];
               DeviceModel.productDetail = selectedRows?.[0];
               handleMetadata(DeviceModel.productDetail.metadata);

+ 21 - 12
src/pages/rule-engine/Scene/Save/device/type.tsx

@@ -5,6 +5,7 @@ import { DeviceModel } from './addModel';
 import TimingTrigger from '../components/TimingTrigger';
 import Operation from '../trigger/operation';
 import FunctionCall from '../action/device/functionCall';
+import type { DeviceModelProps } from './addModel';
 
 export enum OperatorType {
   'online' = 'online',
@@ -56,9 +57,11 @@ const TypeEnum = {
 
 type OperatorTypeKeys = keyof typeof OperatorType;
 
-export default forwardRef((props, ref) => {
-  console.log(props);
+interface Props {
+  data: DeviceModelProps;
+}
 
+export default forwardRef((props: Props, ref) => {
   const [form] = Form.useForm();
 
   const operator: OperatorTypeKeys = Form.useWatch('operator', form);
@@ -88,23 +91,23 @@ export default forwardRef((props, ref) => {
     OperatorType.invokeFunction,
   ];
 
-  useEffect(() => {
+  const handleInit = (data: DeviceModelProps) => {
     form.setFieldsValue({
-      ...DeviceModel.operation,
+      ...data.operation,
     });
 
     const newTypeList = [...TypeList];
 
-    if (DeviceModel.metadata.events?.length) {
+    if (data.metadata.events?.length) {
       newTypeList.push(TypeEnum.reportEvent);
-      setEvents(DeviceModel.metadata.events);
+      setEvents(data.metadata.events);
     }
 
-    if (DeviceModel.metadata.properties?.length) {
-      const _readProperty = DeviceModel.metadata.properties.filter(
+    if (data.metadata.properties?.length) {
+      const _readProperty = data.metadata.properties.filter(
         (item) => !!item.expands.type?.includes('read'),
       );
-      const _writeProperty = DeviceModel.metadata.properties.filter(
+      const _writeProperty = data.metadata.properties.filter(
         (item) => !!item.expands.type?.includes('write'),
       );
       setReadProperty(_readProperty);
@@ -117,13 +120,19 @@ export default forwardRef((props, ref) => {
       }
     }
 
-    if (DeviceModel.metadata.functions?.length) {
+    if (data.metadata.functions?.length) {
       newTypeList.push(TypeEnum.invokeFunction);
-      setFunctions(DeviceModel.metadata.functions);
+      setFunctions(data.metadata.functions);
     }
 
     setTypeList(newTypeList);
-  }, []);
+  };
+
+  useEffect(() => {
+    if (props.data) {
+      handleInit(props.data);
+    }
+  }, [props.data]);
 
   useEffect(() => {
     if (TimeFilterArray.includes(operator)) {

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

@@ -18,10 +18,9 @@ import { getMenuPathByCode } from '@/utils/menu';
 export const FormModel = observable<FormModelType>({
   trigger: {
     type: '',
-    options: {},
   },
-  actions: [],
   options: {
+    trigger: {},
     terms: [
       {
         terms: [],

+ 2 - 0
src/pages/rule-engine/Scene/Save/terms/branchItem.tsx

@@ -11,6 +11,7 @@ interface BranchesItemProps {
   name: number;
   data: ActionBranchesProps;
   isFrist: boolean;
+  paramsOptions: any[];
   onDelete: () => void;
 }
 
@@ -80,6 +81,7 @@ export default observer((props: BranchesItemProps) => {
                 name={dIndex}
                 data={item}
                 key={item.key}
+                paramsOptions={props.paramsOptions}
                 isLast={dIndex === when!.length - 1}
                 onValueChange={(data) => {
                   FormModel.branches![props.name].when[dIndex] = {

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

@@ -46,6 +46,7 @@ export default observer(() => {
                 data={item}
                 isFrist={isFrist}
                 name={index}
+                paramsOptions={TermsModel.columnOptions}
                 onDelete={() => {
                   FormModel.branches?.splice(index, 1);
                 }}

+ 17 - 0
src/pages/rule-engine/Scene/Save/terms/paramsItem.tsx

@@ -64,6 +64,19 @@ const ParasmItem = observer((props: ParamsItemProps) => {
     }
   };
 
+  const findParams = (key: string, data: any[]): boolean => {
+    let has = false;
+    return data.some((item) => {
+      if (item.value === key) {
+        paramChange({ node: item });
+        has = true;
+      } else if (item.children) {
+        has = findParams(key, item.children);
+      }
+      return has;
+    });
+  };
+
   const handleName = (_data: any): any => (
     <Space>
       {_data.name}
@@ -115,6 +128,10 @@ const ParasmItem = observer((props: ParamsItemProps) => {
     });
 
     setParamOptions(_data);
+
+    if (column) {
+      findParams(column, _data);
+    }
   }, [props.options]);
 
   const handleOptionsLabel = useCallback(

+ 2 - 2
src/pages/rule-engine/Scene/Save/terms/term.tsx

@@ -7,13 +7,13 @@ import { DropdownButton } from '@/pages/rule-engine/Scene/Save/components/Button
 import classNames from 'classnames';
 import type { TermsType } from '@/pages/rule-engine/Scene/typings';
 import { get } from 'lodash';
-import { TermsModel } from './index';
 import './index.less';
 interface TermsProps {
   data: TermsType;
   pName: (number | string)[];
   name: number;
   isLast: boolean;
+  paramsOptions: any[];
   onValueChange: (data: TermsType) => void;
   onLabelChange: (label: any) => void;
   onDelete: () => void;
@@ -65,7 +65,7 @@ export default observer((props: TermsProps) => {
               data={item}
               key={item.key}
               isLast={index === props.data.terms!.length - 1}
-              options={TermsModel.columnOptions}
+              options={props.paramsOptions}
               onDelete={() => {
                 terms.splice(index, 1);
                 setTerms([...terms]);

+ 7 - 0
src/pages/rule-engine/Scene/Save/timer/TimerTrigger/index.tsx

@@ -4,6 +4,7 @@ import TimingTrigger, {
   timeUnitEnum,
 } from '@/pages/rule-engine/Scene/Save/components/TimingTrigger';
 import { numberToString } from '@/pages/rule-engine/Scene/Save/components/TimingTrigger/whenOption';
+import { useEffect } from 'react';
 
 interface Props {
   close: () => void;
@@ -14,6 +15,12 @@ interface Props {
 export default (props: Props) => {
   const [form] = Form.useForm();
 
+  useEffect(() => {
+    if (props.data && form) {
+      form.setFieldsValue(props.data);
+    }
+  }, [props.data, form]);
+
   const handleOptions = (value: OperationTimer) => {
     const _options: any = {
       time: undefined,

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

@@ -31,7 +31,7 @@ export default observer(() => {
       <div style={{ marginBottom: 16 }}>
         <Observer>
           {() => {
-            const label = handleLabel(FormModel.trigger?.options);
+            const label = handleLabel(FormModel.options?.trigger);
             return (
               <AddButton
                 style={{ width: '100%' }}
@@ -41,7 +41,7 @@ export default observer(() => {
               >
                 <div
                   className={classNames('trigger-options-content', {
-                    'is-add': !!Object.keys(FormModel.trigger?.options || {}).length,
+                    'is-add': !!Object.keys(FormModel.options?.trigger || {}).length,
                   })}
                 >
                   {label}
@@ -63,7 +63,7 @@ export default observer(() => {
           data={FormModel.trigger?.timer}
           save={(data, options) => {
             setVisible(false);
-            FormModel.trigger!['options'] = options;
+            FormModel.options!['trigger'] = options;
             FormModel.trigger!.timer = data;
           }}
           close={() => {

+ 1 - 1
src/pages/rule-engine/Scene/typings.d.ts

@@ -290,7 +290,7 @@ export interface FormModelType {
   /**
    * 执行动作
    */
-  actions: ActionsType[];
+  actions?: ActionsType[];
   /**
    * 动作分支
    */