diff --git a/packages/global/core/app/type.d.ts b/packages/global/core/app/type.d.ts index 51093c9f6..38e7cb7c3 100644 --- a/packages/global/core/app/type.d.ts +++ b/packages/global/core/app/type.d.ts @@ -1,7 +1,11 @@ import type { FlowNodeTemplateType, StoreNodeItemType } from '../workflow/type/node'; import { AppTypeEnum } from './constants'; import { PermissionTypeEnum } from '../../support/permission/constant'; -import { NodeInputKeyEnum, VariableInputEnum } from '../workflow/constants'; +import { + NodeInputKeyEnum, + VariableInputEnum, + WorkflowIOValueTypeEnum +} from '../workflow/constants'; import { SelectedDatasetType } from '../workflow/api'; import { DatasetSearchModeEnum } from '../dataset/constants'; import { TeamTagSchema as TeamTagsSchemaType } from '@fastgpt/global/support/user/team/type.d'; @@ -111,6 +115,7 @@ export type VariableItemType = { required: boolean; maxLen: number; enums: { value: string }[]; + valueType: WorkflowIOValueTypeEnum; }; // tts export type AppTTSConfigType = { diff --git a/packages/web/i18n/en/common.json b/packages/web/i18n/en/common.json index 029e3db04..d4767d5bf 100644 --- a/packages/web/i18n/en/common.json +++ b/packages/web/i18n/en/common.json @@ -914,6 +914,7 @@ "add option": "Add option", "input type": "Text", "key": "Variable key", + "key already exists": "Key already exist", "key is required": "Variable key is required", "select type": "Dropdown single select", "text max length": "Maximum length", diff --git a/packages/web/i18n/zh/common.json b/packages/web/i18n/zh/common.json index 65028ed89..2a744ce2d 100644 --- a/packages/web/i18n/zh/common.json +++ b/packages/web/i18n/zh/common.json @@ -914,6 +914,7 @@ "add option": "添加选项", "input type": "文本", "key": "变量 key", + "key already exists": "Key 已经存在", "key is required": "变量 key 是必须的", "select type": "下拉单选", "text max length": "最大长度", diff --git a/projects/app/src/components/core/app/VariableEdit.tsx b/projects/app/src/components/core/app/VariableEdit.tsx index 0f0b32cb6..2f1171f96 100644 --- a/projects/app/src/components/core/app/VariableEdit.tsx +++ b/projects/app/src/components/core/app/VariableEdit.tsx @@ -23,7 +23,11 @@ import { useDisclosure } from '@chakra-ui/react'; import { SmallAddIcon } from '@chakra-ui/icons'; -import { VariableInputEnum, variableMap } from '@fastgpt/global/core/workflow/constants'; +import { + VariableInputEnum, + variableMap, + WorkflowIOValueTypeEnum +} from '@fastgpt/global/core/workflow/constants'; import type { VariableItemType } from '@fastgpt/global/core/app/type.d'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { useForm } from 'react-hook-form'; @@ -310,6 +314,27 @@ const VariableEdit = ({ return; } } + + // check repeat key + const existingVariable = variables.find( + (item) => item.key === variable.key && item.id !== variable.id + ); + if (existingVariable) { + toast({ + status: 'warning', + title: t('common:core.module.variable.key already exists') + }); + return; + } + + // set valuetype based on variable.type + variable.valueType = valueTypeMap[variable.type]; + + // set default required value based on variableType + if (variable.type === VariableInputEnum.custom) { + variable.required = false; + } + const onChangeVariable = [...variables]; // update if (variable.id) { @@ -344,9 +369,16 @@ export const defaultVariable: VariableItemType = { type: VariableInputEnum.input, required: true, maxLen: 50, - enums: [{ value: '' }] + enums: [{ value: '' }], + valueType: WorkflowIOValueTypeEnum.string }; export const addVariable = () => { const newVariable = { ...defaultVariable, key: '', id: '' }; return newVariable; }; +const valueTypeMap = { + [VariableInputEnum.input]: WorkflowIOValueTypeEnum.string, + [VariableInputEnum.select]: WorkflowIOValueTypeEnum.string, + [VariableInputEnum.textarea]: WorkflowIOValueTypeEnum.string, + [VariableInputEnum.custom]: WorkflowIOValueTypeEnum.any +}; diff --git a/projects/app/src/web/core/workflow/utils.ts b/projects/app/src/web/core/workflow/utils.ts index f34329886..032489a4d 100644 --- a/projects/app/src/web/core/workflow/utils.ts +++ b/projects/app/src/web/core/workflow/utils.ts @@ -374,10 +374,7 @@ export const getWorkflowGlobalVariables = ({ systemConfigNode: getGuideModule(nodes), isPublicFetch: true })?.variables || [] - ).map((item) => ({ - ...item, - valueType: WorkflowIOValueTypeEnum.any - })); + ); const systemVariables = getSystemVariables(t);