diff --git a/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/OutputDefItem.svelte b/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/OutputDefItem.svelte index 4e94d154..3a4685ae 100644 --- a/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/OutputDefItem.svelte +++ b/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/OutputDefItem.svelte @@ -5,14 +5,21 @@ import {useNodesData, useSvelteFlow} from '@xyflow/svelte'; import {parameterDataTypes} from '#consts'; import {genShortId} from '../utils/IdGen'; - import type {Parameter} from '#types'; + import type {Parameter, ParameterChangeHandler} from '#types'; import {deepClone} from '../utils/deepClone'; - const { parameter, position, dataKeyName, placeholder = '请输入参数值' }: { + const { + parameter, + position, + dataKeyName, + placeholder = '请输入参数值', + onParametersChange, + }: { parameter: Parameter, position: number[], dataKeyName: string, placeholder?: string, + onParametersChange?: ParameterChangeHandler, } = $props(); @@ -50,9 +57,12 @@ const updateAttribute = (key: string, value: any) => { updateNodeData(currentNodeId, (node) => { - const parameters = node.data?.[dataKeyName] as Array; - if (parameters && position.length > 0) { - let params = parameters as Parameter[]; + const previousParameters = deepClone( + (node.data?.[dataKeyName] as Array) || [] + ); + const nextParameters = deepClone(previousParameters); + if (nextParameters.length > 0 && position.length > 0) { + let params = nextParameters; for (let i = 0; i < position.length; i++) { const pos = position[i]; if (i == position.length - 1) { @@ -66,7 +76,12 @@ } } return { - [dataKeyName]: [...deepClone(parameters)] + [dataKeyName]: nextParameters, + ...onParametersChange?.( + previousParameters, + nextParameters, + node.data + ) }; }); }; @@ -87,9 +102,12 @@ let triggerObject: any; const handleDelete = () => { updateNodeData(currentNodeId, (node) => { - let parameters = node.data?.[dataKeyName] as Array; - if (parameters && position.length > 0) { - let params = parameters as Array; + const previousParameters = deepClone( + (node.data?.[dataKeyName] as Array) || [] + ); + const nextParameters = deepClone(previousParameters); + if (nextParameters.length > 0 && position.length > 0) { + let params = nextParameters; for (let i = 0; i < position.length; i++) { const pos = position[i]; if (i == position.length - 1) { @@ -100,7 +118,12 @@ } } return { - [dataKeyName]: [...deepClone(parameters)] + [dataKeyName]: nextParameters, + ...onParametersChange?.( + previousParameters, + nextParameters, + node.data + ) }; }); triggerObject?.hide(); @@ -109,9 +132,12 @@ const handleAddChildParameter = () => { updateNodeData(currentNodeId, (node) => { - let parameters = node.data?.[dataKeyName] as Array; - if (parameters && position.length > 0) { - let params = parameters as Array; + const previousParameters = deepClone( + (node.data?.[dataKeyName] as Array) || [] + ); + const nextParameters = deepClone(previousParameters); + if (nextParameters.length > 0 && position.length > 0) { + let params = nextParameters; for (let i = 0; i < position.length; i++) { const pos = position[i]; if (i == position.length - 1) { @@ -137,7 +163,12 @@ } return { - [dataKeyName]: [...deepClone(parameters)] + [dataKeyName]: nextParameters, + ...onParametersChange?.( + previousParameters, + nextParameters, + node.data + ) }; }); }; diff --git a/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/OutputDefList.svelte b/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/OutputDefList.svelte index 276d9930..1e649a82 100644 --- a/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/OutputDefList.svelte +++ b/easyflow-ui-admin/packages/tinyflow-ui/src/components/core/OutputDefList.svelte @@ -1,17 +1,19 @@ @@ -109,19 +228,14 @@ Python 示例 - + 代码
执行引擎