From 48959a1e7721ce0347102e181ba5d0e36b0be440 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Mon, 14 Jul 2025 16:06:11 +0800 Subject: [PATCH] feat: add optional folder_id to tool import functionality --- apps/tools/serializers/tool.py | 7 ++++++- apps/tools/views/tool.py | 7 ++++++- ui/src/views/tool/component/ToolListContainer.vue | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/tools/serializers/tool.py b/apps/tools/serializers/tool.py index d10aec7cc..4f37b99c3 100644 --- a/apps/tools/serializers/tool.py +++ b/apps/tools/serializers/tool.py @@ -401,6 +401,7 @@ class ToolSerializer(serializers.Serializer): file = UploadedFileField(required=True, label=_("file")) user_id = serializers.UUIDField(required=True, label=_("User ID")) workspace_id = serializers.CharField(required=True, label=_("workspace id")) + folder_id = serializers.CharField(required=False, allow_null=True, label=_("folder id")) # @transaction.atomic @@ -413,6 +414,10 @@ class ToolSerializer(serializers.Serializer): tool_instance = RestrictedUnpickler(io.BytesIO(tool_instance_bytes)).load() except Exception as e: raise AppApiException(1001, _("Unsupported file format")) + if self.data.get('folder_id') is None: + folder_id = self.data.get('workspace_id') + else: + folder_id = self.data.get('folder_id') tool = tool_instance.tool tool_id = uuid.uuid7() tool_model = Tool( @@ -424,7 +429,7 @@ class ToolSerializer(serializers.Serializer): workspace_id=self.data.get('workspace_id'), input_field_list=tool.get('input_field_list'), init_field_list=tool.get('init_field_list', []), - folder_id=self.data.get('workspace_id'), + folder_id=folder_id, scope=scope, is_active=False ) diff --git a/apps/tools/views/tool.py b/apps/tools/views/tool.py index d70755057..9cf2fa382 100644 --- a/apps/tools/views/tool.py +++ b/apps/tools/views/tool.py @@ -236,7 +236,12 @@ class ToolView(APIView): @log(menu='Tool', operate='Import tool', ) def post(self, request: Request, workspace_id: str): return result.success(ToolSerializer.Import( - data={'workspace_id': workspace_id, 'file': request.FILES.get('file'), 'user_id': request.user.id} + data={ + 'workspace_id': workspace_id, + 'file': request.FILES.get('file'), + 'user_id': request.user.id, + 'folder_id': request.data.get('folder_id') + } ).import_(ToolScope.WORKSPACE)) class Export(APIView): diff --git a/ui/src/views/tool/component/ToolListContainer.vue b/ui/src/views/tool/component/ToolListContainer.vue index f8a2ce94c..95ac8d0ca 100644 --- a/ui/src/views/tool/component/ToolListContainer.vue +++ b/ui/src/views/tool/component/ToolListContainer.vue @@ -554,6 +554,7 @@ const elUploadRef = ref() function importTool(file: any) { const formData = new FormData() formData.append('file', file.raw, file.name) + formData.append('folder_id', folder.currentFolder.id || user.getWorkspaceId()) elUploadRef.value.clearFiles() loadSharedApi({ type: 'tool', systemType: apiType.value }) .postImportTool(formData, loading)