Просмотр исходного кода

feat: 添加过滤条件options

xieyonghong 3 лет назад
Родитель
Сommit
7e264964a3

+ 48 - 3
src/pages/rule-engine/Scene/Save/action/ListItem/FilterCondition.tsx

@@ -13,6 +13,7 @@ interface FilterProps {
   thenName: number;
   data?: TermsType;
   onChange: (value: TermsType) => void;
+  onLableChange: (lb: string) => void;
   onAdd: () => void;
   onDelete: () => void;
 }
@@ -27,6 +28,7 @@ export default observer((props: FilterProps) => {
   const [ttOptions, setTtOptions] = useState<any[]>([]);
   const [valueOptions] = useState<any[]>([]);
   const [valueType, setValueType] = useState('');
+  const [label, setLabel] = useState<any[]>([undefined, undefined, {}]);
 
   const valueChange = useCallback(
     (_value: any) => {
@@ -93,6 +95,36 @@ export default observer((props: FilterProps) => {
     });
   };
 
+  const handleOptionsLabel = (c: string, t: string, v: any) => {
+    const termsTypeKey = {
+      eq: '等于_value',
+      neq: '不等于_value',
+      gt: '大于_value',
+      gte: '大于等于_value',
+      lt: '小于_value',
+      lte: '小于等于_value',
+      btw: '在_value和_value2之间',
+      nbtw: '不在_value和_value2之间',
+      time_gt_now: '距离当前时间大于_value秒',
+      time_lt_now: '距离当前时间小于_value秒',
+    };
+
+    if (DoubleFilter.includes(t)) {
+      const str = termsTypeKey[t].replace('_value', v[0]).replace('_value2', v[1]);
+      return `${c} ${str}`;
+    }
+    const str = termsTypeKey[t].replace('_value', v);
+    return `${c} ${str}`;
+  };
+
+  useEffect(() => {
+    const _v = Object.values(label[2]);
+    if (_v.length && label[1]) {
+      const _l = handleOptionsLabel(label[0], label[1], _v.length > 1 ? _v : _v[0]);
+      props.onLableChange?.(_l);
+    }
+  }, [label]);
+
   useEffect(() => {
     if (props.data) {
       getParmas();
@@ -131,10 +163,13 @@ export default observer((props: FilterProps) => {
               let _termTypeValue = undefined;
               if (_termTypeOptions.length) {
                 _termTypeValue = _termTypeOptions[0].key;
+                label[1] = _termTypeValue;
                 setTermType(_termTypeValue);
               } else {
                 setTermType('');
               }
+              label[0] = node.fullName;
+              setLabel([...label]);
               valueChange({
                 column: _value,
                 value: {
@@ -161,6 +196,10 @@ export default observer((props: FilterProps) => {
               }
               setValue(_value);
               setTermType(v!);
+
+              label[1] = v;
+              setLabel([...label]);
+
               valueChange({
                 column: props.data!.column,
                 value: value as TermsVale,
@@ -177,10 +216,12 @@ export default observer((props: FilterProps) => {
                 valueType={valueType}
                 value={value}
                 name={0}
-                onChange={(v) => {
+                onChange={(v, lb) => {
                   setValue({
                     ...v,
                   });
+                  label[2] = { ...label[2], 0: lb };
+                  setLabel([...label]);
                   valueEventChange(v);
                 }}
               />
@@ -191,10 +232,12 @@ export default observer((props: FilterProps) => {
                 valueType={valueType}
                 value={value}
                 name={1}
-                onChange={(v) => {
+                onChange={(v, lb) => {
                   setValue({
                     ...v,
                   });
+                  label[2] = { ...label[2], 1: lb };
+                  setLabel([...label]);
                   valueEventChange(v);
                 }}
               />
@@ -206,10 +249,12 @@ export default observer((props: FilterProps) => {
               placeholder="参数值"
               valueType={valueType}
               value={value}
-              onChange={(v) => {
+              onChange={(v, lb) => {
                 setValue({
                   ...v,
                 });
+                label[2] = { 0: lb };
+                setLabel([...label]);
                 valueEventChange(v);
               }}
             />

+ 10 - 1
src/pages/rule-engine/Scene/Save/action/ListItem/Item.tsx

@@ -297,9 +297,18 @@ export default (props: ItemProps) => {
             const _data = props.data;
             if (_data.terms) {
               _data.terms = [termsData];
-              props.onUpdate(_data, op);
+              props.onUpdate(_data, {
+                ...op,
+              });
             }
           }}
+          onLableChange={(lb) => {
+            const _data = props.data;
+            props.onUpdate(_data, {
+              ...op,
+              terms: lb,
+            });
+          }}
           onDelete={() => {
             const _data = props.data;
             if (_data.terms) {

+ 2 - 0
src/pages/rule-engine/Scene/Save/action/ListItem/List.tsx

@@ -37,6 +37,8 @@ export default (props: ListProps) => {
             props.onDelete(index);
           }}
           onUpdate={(data, options) => {
+            console.log('addItem', options);
+
             props.onAdd({
               ...item,
               ...data,

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

@@ -63,7 +63,7 @@ export default (props: ActionsProps) => {
                       parallel={false}
                       actions={parallelThens.length ? parallelThens[0].actions : []}
                       onAdd={(actionItem) => {
-                        console.log('parallelThens', parallelThens);
+                        console.log('parallelThens', parallelThens, actionItem);
                         if (parallelThens[0]) {
                           if (
                             parallelThens[0].actions.some((aItem) => aItem.key === actionItem.key)

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

@@ -7,7 +7,7 @@ import Timer from '../Save/timer/index';
 import { TitleComponent } from '@/components';
 import { observable } from '@formily/reactive';
 import { observer } from '@formily/react';
-import type { FormModelType } from '@/pages/rule-engine/Scene/typings';
+import type { FormModelType, ActionBranchesProps } from '@/pages/rule-engine/Scene/typings';
 import { useEffect, useCallback } from 'react';
 import { service } from '@/pages/rule-engine/Scene';
 import './index.less';
@@ -78,7 +78,41 @@ export default observer(() => {
     if (id) {
       service.detail(id).then((resp) => {
         if (resp.status === 200) {
-          Object.assign(FormModel, resp.result);
+          let branches = resp.result.branches;
+          // 处理 branches 的 key
+          if (branches) {
+            branches = branches.map((bItem: ActionBranchesProps, bIndex: number) => {
+              bItem.key = `branches_${new Date().getTime() + bIndex}`;
+              if (bItem.then && bItem.then) {
+                bItem.then = bItem.then.map((tItem) => {
+                  if (tItem.actions) {
+                    tItem.actions = tItem.actions.map((aItem, index) => {
+                      aItem.key = `${aItem.executor}_${new Date().getTime() + index}`;
+                      return aItem;
+                    });
+                  }
+                  return tItem;
+                });
+              }
+              if (bItem.when) {
+                bItem.when = bItem.when.map((wItem, index) => {
+                  wItem.key = `when_${new Date().getTime() + index}`;
+                  if (wItem.terms) {
+                    wItem.terms = wItem.terms.map((wtItem, wtIndex) => {
+                      wtItem.key = `terms_${new Date().getTime() + wtIndex}`;
+                      return wtItem;
+                    });
+                  }
+                  return wItem;
+                });
+              }
+              return bItem;
+            });
+          }
+          Object.assign(FormModel, {
+            ...resp.result,
+            branches,
+          });
           console.log(FormModel, '11111');
         }
       });