From d26883581c735ff8db673611cb95d78edfd92165 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 <80892890+shaohuzhang1@users.noreply.github.com> Date: Mon, 18 Aug 2025 19:08:00 +0800 Subject: [PATCH] feat: Form nodes support file upload and multi-line text (#3879) --- .../form_node/impl/base_form_node.py | 4 +- ui/src/components/ai-chat/index.vue | 126 ++++++++--- .../dynamics-form/constructor/data.ts | 30 ++- .../items/MultiSelectConstructor.vue | 29 ++- .../items/RadioCardConstructor.vue | 29 ++- .../items/SingleSelectConstructor.vue | 28 ++- .../items/TextareaInputConstructor.vue | 195 ++++++++++++++++++ .../items/UploadInputConstructor.vue | 153 ++++++++++++++ .../dynamics-form/items/TextareaInput.vue | 5 + .../items/upload/UploadInput.vue | 123 +++++++++++ ui/src/locales/lang/en-US/dynamics-form.ts | 20 ++ ui/src/locales/lang/zh-CN/ai-chat.ts | 1 + ui/src/locales/lang/zh-CN/dynamics-form.ts | 21 ++ ui/src/locales/lang/zh-Hant/dynamics-form.ts | 22 +- 14 files changed, 736 insertions(+), 50 deletions(-) create mode 100644 ui/src/components/dynamics-form/constructor/items/TextareaInputConstructor.vue create mode 100644 ui/src/components/dynamics-form/constructor/items/UploadInputConstructor.vue create mode 100644 ui/src/components/dynamics-form/items/TextareaInput.vue create mode 100644 ui/src/components/dynamics-form/items/upload/UploadInput.vue diff --git a/apps/application/flow/step_node/form_node/impl/base_form_node.py b/apps/application/flow/step_node/form_node/impl/base_form_node.py index 9a0e4ba8b..cedc6c8fe 100644 --- a/apps/application/flow/step_node/form_node/impl/base_form_node.py +++ b/apps/application/flow/step_node/form_node/impl/base_form_node.py @@ -69,9 +69,11 @@ class BaseFormNode(IFormNode): reset_field = ['field', 'label', 'default_value'] for f in reset_field: _value = field[f] + if _value is None: + continue if isinstance(_value, str): field[f] = self.workflow_manage.generate_prompt(_value) - else: + elif f == 'label': _label_value = _value.get('label') _value['label'] = self.workflow_manage.generate_prompt(_label_value) tooltip = _value.get('attrs').get('tooltip') diff --git a/ui/src/components/ai-chat/index.vue b/ui/src/components/ai-chat/index.vue index 3af8b9c1b..af33fcb27 100644 --- a/ui/src/components/ai-chat/index.vue +++ b/ui/src/components/ai-chat/index.vue @@ -1,44 +1,92 @@