From 7c48388c9835e80d1d97bc26026d9a5cf5dccd12 Mon Sep 17 00:00:00 2001 From: zhangzhanwei Date: Mon, 16 Mar 2026 11:28:36 +0800 Subject: [PATCH] feat: Tool workflow node --- apps/tools/serializers/tool.py | 7 +- apps/tools/views/tool.py | 1 + ui/src/assets/tool/icon_tool_workflow.svg | 15 ++ .../application/index.vue | 29 ++- .../knowledge-inner/index.vue | 16 +- .../knowledge/index.vue | 16 +- .../workflow-dropdown-menu/tool/index.vue | 15 +- ui/src/enums/application.ts | 1 + ui/src/workflow/common/NodeContainer.vue | 7 +- ui/src/workflow/common/data.ts | 22 ++ .../icons/tool-workflow-lib-node-icon.vue | 6 + .../nodes/tool-workflow-lib-node/index.ts | 12 + .../nodes/tool-workflow-lib-node/index.vue | 209 ++++++++++++++++++ 13 files changed, 338 insertions(+), 18 deletions(-) create mode 100644 ui/src/assets/tool/icon_tool_workflow.svg create mode 100644 ui/src/workflow/icons/tool-workflow-lib-node-icon.vue create mode 100644 ui/src/workflow/nodes/tool-workflow-lib-node/index.ts create mode 100644 ui/src/workflow/nodes/tool-workflow-lib-node/index.vue diff --git a/apps/tools/serializers/tool.py b/apps/tools/serializers/tool.py index 8fe4ff36e72..7117fd9e68e 100644 --- a/apps/tools/serializers/tool.py +++ b/apps/tools/serializers/tool.py @@ -1066,6 +1066,7 @@ class Query(serializers.Serializer): user_id = serializers.UUIDField(required=False, allow_null=True, label=_('user id')) scope = serializers.CharField(required=True, label=_('scope')) tool_type = serializers.CharField(required=False, label=_('tool type'), allow_null=True, allow_blank=True) + tool_type_list = serializers.ListField(child=serializers.CharField(),required=False, label=_('tool type list'), allow_null=True, allow_empty=True) create_user = serializers.UUIDField(required=False, label=_('create user'), allow_null=True) def page_tool(self, current_page: int, page_size: int): @@ -1127,7 +1128,11 @@ def get_query_set(self, workspace_manage, is_x_pack_ee): if scope is not None: tool_query_set = tool_query_set.filter(scope=scope) - if tool_type: + + tool_type_list = self.data.get('tool_type_list') + if tool_type_list: + tool_query_set = tool_query_set.filter(tool_type__in=tool_type_list) + elif tool_type: tool_query_set = tool_query_set.filter(tool_type=tool_type) query_set_dict = { diff --git a/apps/tools/views/tool.py b/apps/tools/views/tool.py index ec08b0e4fc1..0fe2dc616f6 100644 --- a/apps/tools/views/tool.py +++ b/apps/tools/views/tool.py @@ -74,6 +74,7 @@ def get(self, request: Request, workspace_id: str): 'name': request.query_params.get('name'), 'scope': request.query_params.get('scope', ToolScope.WORKSPACE), 'tool_type': request.query_params.get('tool_type'), + 'tool_type_list': request.query_params.getlist('tool_type_list[]'), 'user_id': request.user.id, 'create_user': request.query_params.get('create_user'), } diff --git a/ui/src/assets/tool/icon_tool_workflow.svg b/ui/src/assets/tool/icon_tool_workflow.svg new file mode 100644 index 00000000000..1e53f7b475e --- /dev/null +++ b/ui/src/assets/tool/icon_tool_workflow.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/ui/src/components/workflow-dropdown-menu/application/index.vue b/ui/src/components/workflow-dropdown-menu/application/index.vue index 001d75c42d7..e2752e63abc 100644 --- a/ui/src/components/workflow-dropdown-menu/application/index.vue +++ b/ui/src/components/workflow-dropdown-menu/application/index.vue @@ -89,8 +89,22 @@ @@ -122,7 +136,12 @@ diff --git a/ui/src/workflow/nodes/tool-workflow-lib-node/index.ts b/ui/src/workflow/nodes/tool-workflow-lib-node/index.ts new file mode 100644 index 00000000000..fea8d415d94 --- /dev/null +++ b/ui/src/workflow/nodes/tool-workflow-lib-node/index.ts @@ -0,0 +1,12 @@ +import ToolWorkflowLibNodeVue from './index.vue' +import { AppNode, AppNodeModel } from '@/workflow/common/app-node' +class ToolWorkflowLibNode extends AppNode { + constructor(props: any) { + super(props, ToolWorkflowLibNodeVue) + } +} +export default { + type: 'tool-workflow-lib-node', + model: AppNodeModel, + view: ToolWorkflowLibNode, +} diff --git a/ui/src/workflow/nodes/tool-workflow-lib-node/index.vue b/ui/src/workflow/nodes/tool-workflow-lib-node/index.vue new file mode 100644 index 00000000000..a04796c15a9 --- /dev/null +++ b/ui/src/workflow/nodes/tool-workflow-lib-node/index.vue @@ -0,0 +1,209 @@ + + +