feat(web): 增加判断节点对不同类型的适配和处理
This commit is contained in:
@@ -100,6 +100,24 @@ export const generateAllIncomerOutputVariablesFormOptions: (id: string, inputSch
|
||||
}))
|
||||
}
|
||||
|
||||
type ConditionOperator = string | { label: string, value: string }
|
||||
const textOperators: ConditionOperator[] = ['equal', 'not_equal', 'is_empty', 'is_not_empty', 'like', 'not_like', 'starts_with', 'ends_with']
|
||||
const textDefaultOperator: string = 'equal'
|
||||
const booleanOperators: ConditionOperator[] = [
|
||||
{label: '为真', value: 'is_true'},
|
||||
{label: '为假', value: 'is_false'},
|
||||
]
|
||||
const booleanDefaultOperator: string = 'is_true'
|
||||
const numberOperators: ConditionOperator[] = [
|
||||
'equal',
|
||||
'not_equal',
|
||||
{label: '大于', value: 'greater'},
|
||||
{label: '大于或等于', value: 'greater_equal'},
|
||||
{label: '小于', value: 'less'},
|
||||
{label: '小于或等于', value: 'less_equal'},
|
||||
]
|
||||
const numberDefaultOperator: string = 'equal'
|
||||
|
||||
export const generateAllIncomerOutputVariablesConditions: (id: string, inputSchema: Record<string, Record<string, any>>, nodes: Node[], edges: Edge[], data: any) => Option[] = (id, inputSchema, nodes, edges, data) => {
|
||||
let optionMap: Record<string, Option[]> = {}
|
||||
for (const item of getAllIncomerNodeOutputVariables(id, inputSchema, nodes, edges, data)) {
|
||||
@@ -108,8 +126,34 @@ export const generateAllIncomerOutputVariablesConditions: (id: string, inputSche
|
||||
}
|
||||
optionMap[item.group].push({
|
||||
label: item.name,
|
||||
type: item.type,
|
||||
type: 'custom',
|
||||
name: item.variable,
|
||||
...(item.type === 'text' ? {
|
||||
value: {
|
||||
type: 'input-text',
|
||||
required: true,
|
||||
clearable: true,
|
||||
},
|
||||
defaultOp: textDefaultOperator,
|
||||
operators: textOperators,
|
||||
} : {}),
|
||||
...(item.type === 'boolean' ? {
|
||||
value: {
|
||||
type: 'wrapper',
|
||||
size: 'none',
|
||||
},
|
||||
defaultOp: booleanDefaultOperator,
|
||||
operators: booleanOperators,
|
||||
} : {}),
|
||||
...(item.type === 'number' ? {
|
||||
value: {
|
||||
type: 'input-number',
|
||||
required: true,
|
||||
clearable: true,
|
||||
},
|
||||
defaultOp: numberDefaultOperator,
|
||||
operators: numberOperators,
|
||||
} : {}),
|
||||
})
|
||||
}
|
||||
return Object.keys(optionMap)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type {NodeProps} from '@xyflow/react'
|
||||
import {Tag} from 'antd'
|
||||
import React, {useCallback, useEffect} from 'react'
|
||||
import React, {useCallback} from 'react'
|
||||
import {useContextStore} from '../store/ContextStore.ts'
|
||||
import {useDataStore} from '../store/DataStore.ts'
|
||||
import {useFlowStore} from '../store/FlowStore.ts'
|
||||
@@ -14,24 +14,11 @@ const languageMap: Record<string, string> = {
|
||||
|
||||
const CodeNode = (props: NodeProps) => {
|
||||
const {getNodes, getEdges} = useFlowStore()
|
||||
const {getData, mergeDataById, getDataById} = useDataStore()
|
||||
const {getData, getDataById} = useDataStore()
|
||||
const {getInputSchema} = useContextStore()
|
||||
|
||||
const nodeData = getDataById(props.id)
|
||||
|
||||
useEffect(() => {
|
||||
mergeDataById(
|
||||
props.id,
|
||||
{
|
||||
outputs: {
|
||||
result: {
|
||||
type: 'string',
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
}, [props.id])
|
||||
|
||||
const columnsSchema = useCallback(() => [
|
||||
...inputsFormColumns(props.id, getInputSchema(), getNodes(), getEdges(), getData()),
|
||||
{
|
||||
|
||||
@@ -24,7 +24,7 @@ const LlmNode = (props: NodeProps) => {
|
||||
{
|
||||
outputs: {
|
||||
text: {
|
||||
type: 'string',
|
||||
type: 'text',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -26,17 +26,27 @@ const SwitchNode = (props: NodeProps) => {
|
||||
|
||||
const columnsSchema = useCallback(() => [
|
||||
{
|
||||
type: 'condition-builder',
|
||||
name: 'condition',
|
||||
label: '判断条件',
|
||||
fields: generateAllIncomerOutputVariablesConditions(
|
||||
props.id,
|
||||
getInputSchema(),
|
||||
getNodes(),
|
||||
getEdges(),
|
||||
getData(),
|
||||
),
|
||||
},
|
||||
type: 'combo',
|
||||
name: 'conditions',
|
||||
label: '分支',
|
||||
multiple: true,
|
||||
required: true,
|
||||
items: [
|
||||
{
|
||||
type: 'condition-builder',
|
||||
name: 'condition',
|
||||
label: '条件',
|
||||
required: true,
|
||||
fields: generateAllIncomerOutputVariablesConditions(
|
||||
props.id,
|
||||
getInputSchema(),
|
||||
getNodes(),
|
||||
getEdges(),
|
||||
getData(),
|
||||
),
|
||||
},
|
||||
]
|
||||
}
|
||||
], [props.id])
|
||||
|
||||
return (
|
||||
|
||||
@@ -26,7 +26,7 @@ const TemplateNode = (props: NodeProps) => {
|
||||
{
|
||||
outputs: {
|
||||
text: {
|
||||
type: 'string',
|
||||
type: 'text',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user