Explorar o código

fix: 修复场景联动-消息通知-内置参数无效问题

xieyonghong %!s(int64=2) %!d(string=hai) anos
pai
achega
c6fc46e86e

+ 19 - 6
src/pages/rule-engine/Scene/Save/action/notify/VariableDefinitions.tsx

@@ -6,17 +6,28 @@ import Org from './components/variableItem/org';
 import Tag from './components/variableItem/tag';
 import BuildIn from './components/variableItem/buildIn';
 import InputFile from './components/variableItem/inputFile';
-import { forwardRef, useCallback, useImperativeHandle } from 'react';
+import { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';
+import {cloneDeep} from "lodash";
 
 interface Props {
   name: number;
   value?: any;
+  options?: Record<string, any>
+  optionsChange?: (v: Array<string | undefined>) => void
 }
 
 export default forwardRef((props: Props, ref) => {
   const [form] = Form.useForm();
-  const typeComponents = (item: any) => {
+  const options = useRef<Array<string | undefined>>(props.options?.otherColumns || [])
+
+  const optionsChange = (v: string | undefined, index: number) => {
+    options.current[index] = v
+    props.optionsChange?.([...options.current])
+  }
+
+  const typeComponents = (item: any, index: number) => {
     const type = item.expands?.businessType || item.type;
+    options.current[index] = undefined
     switch (type) {
       case 'user':
         return <User />;
@@ -29,7 +40,9 @@ export default forwardRef((props: Props, ref) => {
       case 'link':
         return <Input placeholder={'请输入' + item.name} />;
       default:
-        return <BuildIn data={item} name={props.name} />;
+        return <BuildIn data={item} name={props.name} optionsChange={(v) => {
+          optionsChange(v, index)
+        }} />;
     }
   };
 
@@ -141,13 +154,13 @@ export default forwardRef((props: Props, ref) => {
   };
 
   useImperativeHandle(ref, () => ({
-    save: saveBtn,
+    save: saveBtn
   }));
 
   return NotifyModel.variable.length ? (
     <div>
       <Form form={form} layout={'vertical'}>
-        {(NotifyModel?.variable || []).map((item) => {
+        {(NotifyModel?.variable || []).map((item, index) => {
           const type = item.expands?.businessType || item?.type;
           let initialValue = undefined;
           const rules = getRules(item, type);
@@ -188,7 +201,7 @@ export default forwardRef((props: Props, ref) => {
               required={type !== 'file' ? true : false}
               rules={rules}
             >
-              {typeComponents(item)}
+              {typeComponents(item, index)}
             </Form.Item>
           );
         })}

+ 8 - 3
src/pages/rule-engine/Scene/Save/action/notify/components/variableItem/buildIn.tsx

@@ -16,6 +16,7 @@ interface BuiltInProps {
   value?: ChangeType;
   data?: any;
   onChange?: (value: ChangeType) => void;
+  optionsChange?: (value?: string) => void
   name: number;
 }
 
@@ -26,7 +27,7 @@ export default (props: BuiltInProps) => {
 
   const [builtInList, setBuiltInList] = useState<any[]>([]);
 
-  const onChange = (_source: string = 'fixed', _value?: any, _upperKey?: string) => {
+  const onChange = (_source: string = 'fixed', _value?: any, _upperKey?: string, options?: string) => {
     const obj: ChangeType = {
       source: _source,
     };
@@ -39,6 +40,8 @@ export default (props: BuiltInProps) => {
     if (props.onChange) {
       props.onChange(obj);
     }
+    props.optionsChange?.(options)
+
   };
 
   // const treeDataChildrenFilter: any = (arr: any[], type: string) => {
@@ -121,8 +124,10 @@ export default (props: BuiltInProps) => {
         <TreeSelect
           value={upperKey}
           treeData={builtInList}
-          onChange={(key) => {
-            onChange(source, undefined, key);
+          onChange={(key, extra) => {
+            const item = extra?.[0]?.props
+            let option = item?.metadata ? item.column : undefined
+            onChange(source, undefined, key, option);
           }}
           fieldNames={{ label: 'name', value: 'id' }}
           placeholder={'请选择参数'}

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

@@ -57,6 +57,7 @@ export const NotifyModel = model<{
 export default observer((props: Props) => {
   const WayRef = useRef<{ save: any }>();
   const VariableRef = useRef<{ save: any }>();
+  const otherColumns = useRef<Array<string | undefined>>([])
 
   useEffect(() => {
     NotifyModel.notify = {
@@ -82,7 +83,11 @@ export default observer((props: Props) => {
           <VariableDefinitions
             value={NotifyModel.notify.variables}
             name={props.name}
+            options={props.options}
             ref={VariableRef}
+            optionsChange={(v) => {
+              otherColumns.current = v
+            }}
           />
         );
       default:
@@ -134,7 +139,9 @@ export default observer((props: Props) => {
       const resp = await VariableRef.current?.save();
       if (resp) {
         NotifyModel.notify.variables = resp;
-        const { options, ...extra } = NotifyModel.notify;
+        let { options, ...extra } = NotifyModel.notify;
+        const columns = new Set([...(options?.columns || []), ...otherColumns.current.filter(item => item)])
+        Object.assign(options, {columns: [...columns.values()], otherColumns: otherColumns.current})
         props.save(
           {
             notify: { ...extra },

+ 1 - 6
yarn.lock

@@ -16589,12 +16589,7 @@ reserved-words@^0.1.2:
   resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1"
   integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=
 
-resize-observer-polyfill@^1.5.0:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
-  integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
-
-resize-observer-polyfill@^1.5.1:
+resize-observer-polyfill@^1.5.0, resize-observer-polyfill@^1.5.1:
   version "1.5.1"
   resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
   integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==