Wzyyy98 3 lat temu
rodzic
commit
62485d0a3b

+ 24 - 5
src/components/ProTableCard/index.tsx

@@ -31,6 +31,7 @@ interface ProTableCardProps<T> {
   gridColumns?: [number, number, number];
   height?: 'none';
   onlyCard?: boolean; //只展示card
+  onPageChange?: (page: number, size: number) => void;
 }
 
 const ProTableCard = <
@@ -43,9 +44,15 @@ const ProTableCard = <
   const { cardRender, toolBarRender, request, onlyCard, ...extraProps } = props;
   const [model, setModel] = useState<ModelType>(ModelEnum.CARD);
   const [total, setTotal] = useState<number | undefined>(0);
-  const [current, setCurrent] = useState(1); // 当前页
-  const [pageIndex, setPageIndex] = useState(0);
-  const [pageSize, setPageSize] = useState(Default_Size * 2); // 每页条数
+  const [current, setCurrent] = useState(
+    props.params && props.params.pageIndex ? props.params.pageIndex + 1 : 1,
+  ); // 当前页
+  const [pageIndex, setPageIndex] = useState(
+    props.params && props.params.pageIndex ? props.params.pageIndex : 0,
+  );
+  const [pageSize, setPageSize] = useState(
+    props.params && props.params.pageSize ? props.params.pageSize : Default_Size * 2,
+  ); // 每页条数
   const [column, setColumn] = useState(props.gridColumn || 4);
   const [loading, setLoading] = useState(false);
   const [dataLength, setDataLength] = useState<number>(0);
@@ -155,8 +162,18 @@ const ProTableCard = <
   const pageSizeOptions = [Default_Size * 2, Default_Size * 4, Default_Size * 8, Default_Size * 16];
 
   useEffect(() => {
-    setCurrent(1);
-    setPageIndex(0);
+    console.log('props.params?.pageIndex', props.params?.pageIndex);
+
+    if (props.params?.pageIndex) {
+      setCurrent(props.params?.pageIndex + 1);
+      setPageIndex(props.params?.pageIndex);
+      if (props.params.pageSize) {
+        setPageSize(props.params?.pageSize);
+      }
+    } else {
+      setCurrent(1);
+      setPageIndex(0);
+    }
   }, [props.params]);
 
   return (
@@ -204,6 +221,7 @@ const ProTableCard = <
             setCurrent(page);
             setPageIndex(page - 1);
             setPageSize(size);
+            props.onPageChange?.(page - 1, size);
           },
           pageSize: pageSize,
           current: current,
@@ -266,6 +284,7 @@ const ProTableCard = <
                 setCurrent(page);
                 setPageIndex(page - 1);
                 setPageSize(size);
+                props.onPageChange?.(page - 1, size);
               }}
               pageSizeOptions={pageSizeOptions}
               pageSize={pageSize}

+ 85 - 48
src/pages/rule-engine/Scene/Save/device/addModel.tsx

@@ -1,7 +1,7 @@
 import { Modal, Button, Steps } from 'antd';
 import { observer } from '@formily/react';
 import { observable } from '@formily/reactive';
-import { useEffect, useRef } from 'react';
+import { useEffect, useRef, useState } from 'react';
 import { onlyMessage } from '@/utils/util';
 import type { TriggerDevice, TriggerDeviceOptions } from '@/pages/rule-engine/Scene/typings';
 import Product from './product';
@@ -11,6 +11,7 @@ import { numberToString } from '../components/TimingTrigger/whenOption';
 import { timeUnitEnum } from '../components/TimingTrigger';
 
 interface AddProps {
+  options?: any;
   value?: TriggerDevice;
   onCancel?: () => void;
   onSave?: (data: TriggerDevice, options: any) => void;
@@ -30,9 +31,30 @@ export interface DeviceModelProps extends Partial<TriggerDevice> {
   orgId: string;
   operation?: TriggerDeviceOptions;
   options: any;
+  productPage: number;
+  productPageSize: number;
+  devicePage: number;
+  devicePageSize: number;
 }
 
-export const DeviceModel = observable<DeviceModelProps>({
+const defaultModelData: Omit<DeviceModelProps, 'steps'> = {
+  stepNumber: 0,
+  productId: '',
+  productDetail: {},
+  deviceKeys: [],
+  orgId: '',
+  selector: 'custom',
+  metadata: {},
+  operation: {
+    operator: 'online',
+  },
+  options: {},
+  productPage: 0,
+  productPageSize: 0,
+  devicePage: 0,
+  devicePageSize: 0,
+};
+export const TriggerDeviceModel = observable<DeviceModelProps>({
   steps: [
     {
       key: 'product',
@@ -47,42 +69,50 @@ export const DeviceModel = observable<DeviceModelProps>({
       title: '触发类型',
     },
   ],
-  stepNumber: 0,
-  productId: '',
-  productDetail: {},
-  deviceKeys: [],
-  orgId: '',
-  selector: 'custom',
-  metadata: {},
-  operation: {
-    operator: 'online',
-  },
-  options: {},
+  ...defaultModelData,
 });
 
 export default observer((props: AddProps) => {
   const typeRef = useRef<{ validateFields?: any; handleInit?: any }>();
+  const [loading, setLoading] = useState(false);
 
   useEffect(() => {
-    DeviceModel.stepNumber = 0;
+    TriggerDeviceModel.stepNumber = 0;
+    return () => {
+      Object.keys(defaultModelData).forEach((key) => {
+        TriggerDeviceModel[key] = defaultModelData[key];
+      });
+    };
   }, []);
 
   useEffect(() => {
     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;
-      DeviceModel.deviceKeys =
+      TriggerDeviceModel.selector = props.value.selector;
+      TriggerDeviceModel.productId = props.value.productId;
+      TriggerDeviceModel.selector = props.value.selector;
+      TriggerDeviceModel.selectorValues = props.value.selectorValues;
+      TriggerDeviceModel.operation = props.value.operation;
+      TriggerDeviceModel.deviceKeys =
         props.value.selector === 'custom'
           ? props.value.selectorValues?.map((item) => item.value) || []
           : [];
     }
   }, [props.value]);
 
+  useEffect(() => {
+    console.log('productPage', props.options);
+
+    if (props.options) {
+      TriggerDeviceModel.devicePage = props.options.devicePage;
+      TriggerDeviceModel.devicePageSize = props.options.devicePageSize;
+      TriggerDeviceModel.productPage = props.options.productPage;
+      TriggerDeviceModel.productPageSize = props.options.productPageSize;
+    }
+    setLoading(true);
+  }, [props.options]);
+
   const prev = () => {
-    DeviceModel.stepNumber -= 1;
+    TriggerDeviceModel.stepNumber -= 1;
   };
 
   const handleOptions = (data: TriggerDeviceOptions) => {
@@ -96,15 +126,15 @@ export default observer((props: AddProps) => {
       time: undefined,
       when: undefined,
       extraTime: undefined,
-      action: DeviceModel.options.action,
+      action: TriggerDeviceModel.options.action,
     };
-    if (DeviceModel.selector === 'custom') {
-      _options.name = DeviceModel.selectorValues?.map((item) => item.name).join(',');
-    } else if (DeviceModel.selector === 'org') {
-      _options.name = DeviceModel.selectorValues?.[0].name + '的';
-      _options.productName = DeviceModel.productDetail.name; // 产品名称
+    if (TriggerDeviceModel.selector === 'custom') {
+      _options.name = TriggerDeviceModel.selectorValues?.map((item) => item.name).join(',');
+    } else if (TriggerDeviceModel.selector === 'org') {
+      _options.name = TriggerDeviceModel.selectorValues?.[0].name + '的';
+      _options.productName = TriggerDeviceModel.productDetail.name; // 产品名称
     } else {
-      _options.name = '所有的' + DeviceModel.productDetail.name;
+      _options.name = '所有的' + TriggerDeviceModel.productDetail.name;
     }
 
     if (data.timer) {
@@ -147,32 +177,39 @@ export default observer((props: AddProps) => {
   };
 
   const next = async () => {
-    if (DeviceModel.stepNumber === 0) {
-      if (DeviceModel.productId) {
-        DeviceModel.stepNumber = 1;
+    if (TriggerDeviceModel.stepNumber === 0) {
+      if (TriggerDeviceModel.productId) {
+        TriggerDeviceModel.stepNumber = 1;
       } else {
         onlyMessage('请选择产品', 'error');
       }
-    } else if (DeviceModel.stepNumber === 1) {
-      if (DeviceModel.selector === 'custom' && !DeviceModel.selectorValues?.length) {
+    } else if (TriggerDeviceModel.stepNumber === 1) {
+      if (TriggerDeviceModel.selector === 'custom' && !TriggerDeviceModel.selectorValues?.length) {
         onlyMessage('请选择设备', 'error');
         return;
-      } else if (DeviceModel.selector === 'org' && !DeviceModel.selectorValues?.length) {
+      } else if (
+        TriggerDeviceModel.selector === 'org' &&
+        !TriggerDeviceModel.selectorValues?.length
+      ) {
         onlyMessage('请选择部门', 'error');
         return;
       }
-      DeviceModel.stepNumber = 2;
-    } else if (DeviceModel.stepNumber === 2) {
+      TriggerDeviceModel.stepNumber = 2;
+    } else if (TriggerDeviceModel.stepNumber === 2) {
       // TODO 验证类型数据
       const operationData = await typeRef.current?.validateFields();
       if (operationData) {
         const _options = handleOptions(operationData);
+        _options.productPage = TriggerDeviceModel.productPage;
+        _options.productPageSize = TriggerDeviceModel.productPageSize;
+        _options.devicePage = TriggerDeviceModel.devicePage;
+        _options.devicePageSize = TriggerDeviceModel.devicePageSize;
         props.onSave?.(
           {
             operation: operationData,
-            selectorValues: DeviceModel.selectorValues,
-            selector: DeviceModel.selector!,
-            productId: DeviceModel.productId,
+            selectorValues: TriggerDeviceModel.selectorValues,
+            selector: TriggerDeviceModel.selector!,
+            productId: TriggerDeviceModel.productId,
           },
           _options,
         );
@@ -185,7 +222,7 @@ export default observer((props: AddProps) => {
       case 'device':
         return <Device />;
       case 'type':
-        return <Type ref={typeRef} data={DeviceModel} />;
+        return <Type ref={typeRef} data={TriggerDeviceModel} />;
       default:
         return <Product />;
     }
@@ -198,26 +235,26 @@ export default observer((props: AddProps) => {
       width={800}
       onCancel={() => {
         props.onCancel?.();
-        DeviceModel.stepNumber = 0;
+        TriggerDeviceModel.stepNumber = 0;
       }}
       footer={
         <div className="steps-action">
-          {DeviceModel.stepNumber === 0 && (
+          {TriggerDeviceModel.stepNumber === 0 && (
             <Button
               onClick={() => {
                 props.onCancel?.();
-                DeviceModel.stepNumber = 0;
+                TriggerDeviceModel.stepNumber = 0;
               }}
             >
               取消
             </Button>
           )}
-          {DeviceModel.stepNumber > 0 && (
+          {TriggerDeviceModel.stepNumber > 0 && (
             <Button style={{ margin: '0 8px' }} onClick={() => prev()}>
               上一步
             </Button>
           )}
-          {DeviceModel.stepNumber < DeviceModel.steps.length - 1 && (
+          {TriggerDeviceModel.stepNumber < TriggerDeviceModel.steps.length - 1 && (
             <Button
               type="primary"
               onClick={() => {
@@ -227,7 +264,7 @@ export default observer((props: AddProps) => {
               下一步
             </Button>
           )}
-          {DeviceModel.stepNumber === DeviceModel.steps.length - 1 && (
+          {TriggerDeviceModel.stepNumber === TriggerDeviceModel.steps.length - 1 && (
             <Button
               type="primary"
               onClick={() => {
@@ -241,10 +278,10 @@ export default observer((props: AddProps) => {
       }
     >
       <div className="steps-steps">
-        <Steps current={DeviceModel.stepNumber} items={DeviceModel.steps} />
+        <Steps current={TriggerDeviceModel.stepNumber} items={TriggerDeviceModel.steps} />
       </div>
       <div className="steps-content">
-        {renderComponent(DeviceModel.steps[DeviceModel.stepNumber]?.key)}
+        {loading && renderComponent(TriggerDeviceModel.steps[TriggerDeviceModel.stepNumber]?.key)}
       </div>
     </Modal>
   );

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

@@ -2,7 +2,7 @@ import { useEffect } from 'react';
 import { observer } from '@formily/reactive-react';
 import { Form } from 'antd';
 import TopCard from './TopCard';
-import { DeviceModel } from './addModel';
+import { TriggerDeviceModel } from './addModel';
 import DeviceList from './deviceList';
 import OrgList from './org';
 
@@ -34,13 +34,13 @@ export default observer(() => {
 
   useEffect(() => {
     if (form) {
-      form.setFieldsValue({ selector: DeviceModel.selector });
+      form.setFieldsValue({ selector: TriggerDeviceModel.selector });
     }
   }, []);
 
   useEffect(() => {
     if (selector) {
-      DeviceModel.selector = selector;
+      TriggerDeviceModel.selector = selector;
     }
   }, [selector]);
 

+ 27 - 9
src/pages/rule-engine/Scene/Save/device/deviceList.tsx

@@ -9,15 +9,20 @@ import { service as categoryService } from '@/pages/device/Category';
 import { service as deptService } from '@/pages/system/Department';
 import { useIntl } from 'umi';
 import { SceneDeviceCard } from '@/components/ProTableCard/CardItems/device';
-import { DeviceModel } from './addModel';
+import { TriggerDeviceModel } from './addModel';
 import { observer, Observer } from '@formily/reactive-react';
 
 export default observer(() => {
   const actionRef = useRef<ActionType>();
   const intl = useIntl();
-  const [searchParam, setSearchParam] = useState({});
+  const [searchParam, setSearchParam] = useState<any>({
+    pageIndex: TriggerDeviceModel.devicePage,
+    pageSize: TriggerDeviceModel.devicePageSize,
+  });
   const [isFirst, setIsFirst] = useState(true);
 
+  const [loading, setLoading] = useState(true);
+
   const columns: ProColumns<DeviceInstance>[] = [
     {
       title: 'ID',
@@ -221,8 +226,17 @@ export default observer(() => {
         model={'simple'}
         enableSave={false}
         onSearch={async (data) => {
-          actionRef.current?.reset?.();
-          setSearchParam(data);
+          if (loading) {
+            setSearchParam({
+              pageIndex: TriggerDeviceModel.devicePage,
+              pageSize: TriggerDeviceModel.devicePageSize,
+              ...data,
+            });
+            setLoading(true);
+          } else {
+            actionRef.current?.reset?.();
+            setSearchParam(data);
+          }
         }}
         target="scene-trugger-device"
         defaultParam={[
@@ -230,7 +244,7 @@ export default observer(() => {
             terms: [
               {
                 column: 'productId',
-                value: DeviceModel.productId,
+                value: TriggerDeviceModel.productId,
               },
             ],
           },
@@ -248,12 +262,12 @@ export default observer(() => {
             onlyCard={true}
             tableAlertRender={false}
             rowSelection={{
-              selectedRowKeys: [...DeviceModel.deviceKeys],
+              selectedRowKeys: [...TriggerDeviceModel.deviceKeys],
               onChange(selectedRowKeys, selectedRows) {
-                console.log(selectedRowKeys, DeviceModel.selectorValues, isFirst);
+                console.log(selectedRowKeys);
                 if (!isFirst) {
-                  DeviceModel.deviceKeys = selectedRows.map((item) => item.id);
-                  DeviceModel.selectorValues = selectedRows.map((item) => ({
+                  TriggerDeviceModel.deviceKeys = selectedRows.map((item) => item.id);
+                  TriggerDeviceModel.selectorValues = selectedRows.map((item) => ({
                     name: item.name,
                     value: item.id,
                   }));
@@ -262,6 +276,10 @@ export default observer(() => {
                 }
               },
             }}
+            onPageChange={(page, size) => {
+              TriggerDeviceModel.devicePage = page;
+              TriggerDeviceModel.devicePageSize = size;
+            }}
             request={(params) =>
               service.query({
                 ...params,

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

@@ -74,6 +74,7 @@ export default observer(() => {
       {visible && (
         <AddModel
           value={FormModel.current.trigger?.device || defaultDeviceValue}
+          options={FormModel.current.options?.trigger}
           onSave={(data, options) => {
             setVisible(false);
             FormModel.current.options!['trigger'] = options;

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

@@ -1,6 +1,6 @@
 import ProTable from '@jetlinks/pro-table';
 import SearchComponent from '@/components/SearchComponent';
-import { DeviceModel } from './addModel';
+import { TriggerDeviceModel } from './addModel';
 import type { DepartmentItem } from '@/pages/system/Department/typings';
 import { service } from '@/pages/system/Department';
 import { useState, useRef } from 'react';
@@ -49,15 +49,17 @@ export default observer(() => {
         tableAlertRender={false}
         rowSelection={{
           type: 'radio',
-          selectedRowKeys: [DeviceModel.orgId],
+          selectedRowKeys: [TriggerDeviceModel.orgId],
           onChange: (_, selectedRows) => {
             if (selectedRows.length) {
               const item = selectedRows[0];
-              DeviceModel.orgId = item.id;
-              DeviceModel.selectorValues = [{ value: DeviceModel.orgId, name: item.name }];
+              TriggerDeviceModel.orgId = item.id;
+              TriggerDeviceModel.selectorValues = [
+                { value: TriggerDeviceModel.orgId, name: item.name },
+              ];
             } else {
-              DeviceModel.orgId = '';
-              DeviceModel.selectorValues = [];
+              TriggerDeviceModel.orgId = '';
+              TriggerDeviceModel.selectorValues = [];
             }
           },
         }}

+ 36 - 19
src/pages/rule-engine/Scene/Save/device/product.tsx

@@ -9,33 +9,37 @@ import { isNoCommunity } from '@/utils/util';
 import { useIntl } from 'umi';
 import { service as categoryService } from '@/pages/device/Category';
 import { service as deptService } from '@/pages/system/Department';
-import { DeviceModel } from './addModel';
+import { TriggerDeviceModel } from './addModel';
 import { observer } from '@formily/reactive-react';
 
 export default observer(() => {
   const actionRef = useRef<ActionType>();
   const intl = useIntl();
-  const [searchParam, setSearchParam] = useState({});
+  const [searchParam, setSearchParam] = useState<any>({
+    pageIndex: TriggerDeviceModel.productPage,
+    pageSize: TriggerDeviceModel.productPageSize,
+  });
+
+  const [loading, setLoading] = useState(true);
 
   const handleMetadata = (metadata?: string) => {
     try {
-      DeviceModel.metadata = JSON.parse(metadata || '{}');
+      TriggerDeviceModel.metadata = JSON.parse(metadata || '{}');
     } catch (error) {
-      DeviceModel.metadata = {};
+      TriggerDeviceModel.metadata = {};
     }
   };
 
   useEffect(() => {
-    if (DeviceModel.productId && !DeviceModel.productDetail.id) {
-      service.detail(DeviceModel.productId).then((res) => {
-        console.log(res);
+    if (TriggerDeviceModel.productId && !TriggerDeviceModel.productDetail.id) {
+      service.detail(TriggerDeviceModel.productId).then((res) => {
         if (res.status === 200) {
-          DeviceModel.productDetail = res.result;
+          TriggerDeviceModel.productDetail = res.result;
           handleMetadata(res.result.metadata);
         }
       });
     }
-  }, [DeviceModel.productId]);
+  }, [TriggerDeviceModel.productId]);
 
   const columns: ProColumns<ProductItem>[] = [
     {
@@ -216,8 +220,17 @@ export default observer(() => {
         model={'simple'}
         enableSave={false}
         onSearch={async (data) => {
-          actionRef.current?.reset?.();
-          setSearchParam(data);
+          if (loading) {
+            setSearchParam({
+              pageIndex: TriggerDeviceModel.devicePage,
+              pageSize: TriggerDeviceModel.devicePageSize,
+              ...data,
+            });
+            setLoading(true);
+          } else {
+            actionRef.current?.reset?.();
+            setSearchParam(data);
+          }
         }}
         target="department-assets-product"
       />
@@ -238,21 +251,25 @@ export default observer(() => {
           tableAlertRender={false}
           rowSelection={{
             type: 'radio',
-            selectedRowKeys: [DeviceModel.productId],
+            selectedRowKeys: [TriggerDeviceModel.productId],
             onChange: (_, selectedRows) => {
               console.log(selectedRows);
-              DeviceModel.productId = selectedRows.map((item) => item.id)[0];
-              DeviceModel.productDetail = selectedRows?.[0];
-              handleMetadata(DeviceModel.productDetail.metadata);
+              TriggerDeviceModel.productId = selectedRows.map((item) => item.id)[0];
+              TriggerDeviceModel.productDetail = selectedRows?.[0];
+              handleMetadata(TriggerDeviceModel.productDetail.metadata);
               // 初始化选择设备类型以及触发类型
-              DeviceModel.deviceKeys = [];
-              DeviceModel.orgId = '';
-              DeviceModel.selector = 'custom';
-              DeviceModel.operation = {
+              TriggerDeviceModel.deviceKeys = [];
+              TriggerDeviceModel.orgId = '';
+              TriggerDeviceModel.selector = 'custom';
+              TriggerDeviceModel.operation = {
                 operator: 'online',
               };
             },
           }}
+          onPageChange={(page, size) => {
+            TriggerDeviceModel.productPage = page;
+            TriggerDeviceModel.productPageSize = size;
+          }}
           request={(params) =>
             service.query({
               ...params,

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

@@ -1,7 +1,7 @@
 import { Col, Form, Row, Select } from 'antd';
 import { useEffect, useState, forwardRef, useImperativeHandle } from 'react';
 import TopCard from './TopCard';
-import { DeviceModel } from './addModel';
+import { TriggerDeviceModel } from './addModel';
 import TimingTrigger from '../components/TimingTrigger';
 import Operation from '../trigger/operation';
 import FunctionCall from '../action/device/functionCall';
@@ -184,7 +184,7 @@ export default forwardRef((props: Props, ref) => {
                   fieldNames={{ label: 'name', value: 'id' }}
                   onSelect={(v: any, propertyItem: any) => {
                     console.log(v);
-                    DeviceModel.options.action = '读取' + propertyItem.name;
+                    TriggerDeviceModel.options.action = '读取' + propertyItem.name;
                   }}
                 />
               </Form.Item>
@@ -200,7 +200,7 @@ export default forwardRef((props: Props, ref) => {
               propertiesList={writeProperty}
               onSelect={(a, item) => {
                 console.log(a);
-                DeviceModel.options.action = '修改' + item.name;
+                TriggerDeviceModel.options.action = '修改' + item.name;
               }}
             />
           </Form.Item>
@@ -214,7 +214,7 @@ export default forwardRef((props: Props, ref) => {
               fieldNames={{ label: 'name', value: 'id' }}
               onSelect={(v: any, evenItem: any) => {
                 console.log(v);
-                DeviceModel.options.action = evenItem.name + '上报';
+                TriggerDeviceModel.options.action = evenItem.name + '上报';
               }}
             />
           </Form.Item>
@@ -238,7 +238,7 @@ export default forwardRef((props: Props, ref) => {
                   }
                   onSelect={(v: any, fcItem: any) => {
                     console.log(v);
-                    DeviceModel.options.action = '执行' + fcItem.name;
+                    TriggerDeviceModel.options.action = '执行' + fcItem.name;
                     if (fcItem) {
                       const _properties = fcItem.valueType
                         ? fcItem.valueType.properties

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

@@ -97,6 +97,14 @@ export default observer(() => {
   };
 
   useEffect(() => {
+    return () => {
+      // 销毁
+      console.log('销毁');
+      FormModelInit();
+    };
+  }, []);
+
+  useEffect(() => {
     FormModelInit();
     if (id) {
       service.detail(id).then((resp) => {

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

@@ -20,8 +20,6 @@ export default observer((props: BranchesItemProps) => {
   const [when, setWhen] = useState<TermsType[]>([]);
 
   useEffect(() => {
-    console.log('branchItem', props.data.when);
-
     if (props.data.when) {
       setWhen(props.data.when);
     }

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

@@ -340,6 +340,9 @@ const ParasmItem = observer((props: ParamsItemProps) => {
             isTree={false}
             type="type"
             value={props.data.type}
+            onChange={(v) => {
+              props.data.type = v;
+            }}
           />
         </div>
       ) : (

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

@@ -25,7 +25,8 @@ export default observer((props: TermsProps) => {
 
   const addTerms = () => {
     const data = get(FormModel.current.branches, [...props.pName]);
-    FormModel.current.options!.when[props.whenName].terms.push({
+
+    FormModel.current.options?.when[props.whenName]?.terms?.push({
       terms: [],
     });
     const key = `terms_${new Date().getTime()}`;
@@ -61,7 +62,7 @@ export default observer((props: TermsProps) => {
           <Observer>
             {() => {
               const _when = get(FormModel.current.branches, [...props.pName, props.name]);
-              const terms: TermsType[] = _when.terms;
+              const terms: TermsType[] = _when?.terms || [];
               return terms.map((item, index) => (
                 <ParamsItem
                   pName={[...props.pName, props.name]}
@@ -133,6 +134,9 @@ export default observer((props: TermsProps) => {
               isTree={false}
               type="type"
               value={props.data.type}
+              onChange={(v) => {
+                props.data.type = v;
+              }}
             />
           </div>
         ) : (