From 67bb0a0abde0140c1d04ee1040e02d6bfb01333d Mon Sep 17 00:00:00 2001 From: shaohuzhang1 <80892890+shaohuzhang1@users.noreply.github.com> Date: Mon, 1 Sep 2025 16:56:32 +0800 Subject: [PATCH] feat: Support single line multi select cards (#3976) --- .../form_node/impl/base_form_node.py | 11 +- .../dynamics-form/constructor/data.ts | 4 + .../constructor/items/MultiRowConstructor.vue | 252 ++++++++++++++++++ .../dynamics-form/items/MultiRow.vue | 105 ++++++++ ui/src/locales/lang/zh-CN/dynamics-form.ts | 1 + ui/src/locales/lang/zh-Hant/dynamics-form.ts | 1 + 6 files changed, 371 insertions(+), 3 deletions(-) create mode 100644 ui/src/components/dynamics-form/constructor/items/MultiRowConstructor.vue create mode 100644 ui/src/components/dynamics-form/items/MultiRow.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 1923ee49e..6589e67f9 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 @@ -16,6 +16,11 @@ from application.flow.common import Answer from application.flow.i_step_node import NodeResult from application.flow.step_node.form_node.i_form_node import IFormNode +multi_select_list = [ + 'MultiSelect', + 'MultiRow' +] + def get_default_option(option_list, _type, value_field): try: @@ -23,10 +28,10 @@ def get_default_option(option_list, _type, value_field): default_value_list = [o.get(value_field) for o in option_list if o.get('default')] if len(default_value_list) == 0: return [option_list[0].get( - value_field)] if _type == 'MultiSelect' else option_list[0].get( + value_field)] if multi_select_list.__contains__(_type) else option_list[0].get( value_field) else: - if _type == 'MultiSelect': + if multi_select_list.__contains__(_type): return default_value_list else: return default_value_list[0] @@ -84,7 +89,7 @@ class BaseFormNode(IFormNode): if tooltip is not None: _value.get('attrs')['tooltip'] = generate_prompt(self.workflow_manage, tooltip) - if ['SingleSelect', 'MultiSelect', 'RadioCard', 'RadioRow'].__contains__(field.get('input_type')): + if ['SingleSelect', 'MultiSelect', 'RadioCard', 'RadioRow', 'MultiRow'].__contains__(field.get('input_type')): if field.get('assignment_method') == 'ref_variables': option_list = self.workflow_manage.get_reference_field(field.get('option_list')[0], field.get('option_list')[1:]) diff --git a/ui/src/components/dynamics-form/constructor/data.ts b/ui/src/components/dynamics-form/constructor/data.ts index 7cbdceaef..751b06b36 100644 --- a/ui/src/components/dynamics-form/constructor/data.ts +++ b/ui/src/components/dynamics-form/constructor/data.ts @@ -32,6 +32,10 @@ const input_type_list = [ label: t('dynamicsForm.input_type_list.RadioRow'), value: 'RadioRow', }, + { + label: t('dynamicsForm.input_type_list.MultiRow'), + value: 'MultiRow', + }, { label: t('dynamicsForm.input_type_list.Slider'), value: 'Slider', diff --git a/ui/src/components/dynamics-form/constructor/items/MultiRowConstructor.vue b/ui/src/components/dynamics-form/constructor/items/MultiRowConstructor.vue new file mode 100644 index 000000000..204fcc45e --- /dev/null +++ b/ui/src/components/dynamics-form/constructor/items/MultiRowConstructor.vue @@ -0,0 +1,252 @@ + + + diff --git a/ui/src/components/dynamics-form/items/MultiRow.vue b/ui/src/components/dynamics-form/items/MultiRow.vue new file mode 100644 index 000000000..397459210 --- /dev/null +++ b/ui/src/components/dynamics-form/items/MultiRow.vue @@ -0,0 +1,105 @@ + + + diff --git a/ui/src/locales/lang/zh-CN/dynamics-form.ts b/ui/src/locales/lang/zh-CN/dynamics-form.ts index b93ffae5d..0dc6c73bb 100644 --- a/ui/src/locales/lang/zh-CN/dynamics-form.ts +++ b/ui/src/locales/lang/zh-CN/dynamics-form.ts @@ -12,6 +12,7 @@ export default { RadioRow: '单行选项卡', UploadInput: '文件上传', TextareaInput: '多行文本框', + MultiRow: '单行多选卡', }, default: { label: '默认值', diff --git a/ui/src/locales/lang/zh-Hant/dynamics-form.ts b/ui/src/locales/lang/zh-Hant/dynamics-form.ts index 89acaeaf4..bde1657d0 100644 --- a/ui/src/locales/lang/zh-Hant/dynamics-form.ts +++ b/ui/src/locales/lang/zh-Hant/dynamics-form.ts @@ -12,6 +12,7 @@ export default { RadioRow: '單行選項卡', UploadInput: '文件上傳', TextareaInput: '多行文字方塊', + MultiRow: '單行多選卡', }, default: { label: '預設值',