diff --git a/apps/knowledge/serializers/knowledge.py b/apps/knowledge/serializers/knowledge.py index 3cb833cea..2b08fea2f 100644 --- a/apps/knowledge/serializers/knowledge.py +++ b/apps/knowledge/serializers/knowledge.py @@ -416,18 +416,6 @@ class KnowledgeSerializer(serializers.Serializer): application_id=application_id, knowledge_id=self.data.get('knowledge_id') ) for application_id in application_id_list ]) if len(application_id_list) > 0 else None - if instance.get("work_flow"): - QuerySet(KnowledgeWorkflow).update_or_create(knowledge_id=self.data.get("knowledge_id"), - create_defaults={'id': uuid.uuid7(), - 'knowledge_id': self.data.get( - "knowledge_id"), - "workspace_id": self.data.get( - 'workspace_id'), - 'work_flow': instance.get('work_flow', - {}), }, - defaults={ - 'work_flow': instance.get('work_flow') - }) knowledge.save() if select_one: return self.one() diff --git a/apps/knowledge/serializers/knowledge_workflow.py b/apps/knowledge/serializers/knowledge_workflow.py index 978804da3..dc84f84fa 100644 --- a/apps/knowledge/serializers/knowledge_workflow.py +++ b/apps/knowledge/serializers/knowledge_workflow.py @@ -191,7 +191,20 @@ class KnowledgeWorkflowSerializer(serializers.Serializer): return True def edit(self, instance: Dict): - pass + self.is_valid(raise_exception=True) + if instance.get("work_flow"): + QuerySet(KnowledgeWorkflow).update_or_create(knowledge_id=self.data.get("knowledge_id"), + create_defaults={'id': uuid.uuid7(), + 'knowledge_id': self.data.get( + "knowledge_id"), + "workspace_id": self.data.get( + 'workspace_id'), + 'work_flow': instance.get('work_flow', + {}), }, + defaults={ + 'work_flow': instance.get('work_flow') + }) + return self.one() def one(self): self.is_valid(raise_exception=True) diff --git a/apps/knowledge/urls.py b/apps/knowledge/urls.py index 695f510d2..43a77aec3 100644 --- a/apps/knowledge/urls.py +++ b/apps/knowledge/urls.py @@ -16,7 +16,7 @@ urlpatterns = [ path('workspace//knowledge/tags', views.KnowledgeView.Tags.as_view()), path('workspace//knowledge/', views.KnowledgeView.Operate.as_view()), path('workspace//knowledge//sync', views.KnowledgeView.SyncWeb.as_view()), - path('workspace//knowledge//workfolw', views.KnowledgeWorkflowView.Operate.as_view()), + path('workspace//knowledge//workflow', views.KnowledgeWorkflowView.Operate.as_view()), path('workspace//knowledge//generate_related', views.KnowledgeView.GenerateRelated.as_view()), path('workspace//knowledge//embedding', views.KnowledgeView.Embedding.as_view()), path('workspace//knowledge//hit_test', views.KnowledgeView.HitTest.as_view()), diff --git a/apps/knowledge/views/knowledge_workflow.py b/apps/knowledge/views/knowledge_workflow.py index 3c0eaf190..2289499c9 100644 --- a/apps/knowledge/views/knowledge_workflow.py +++ b/apps/knowledge/views/knowledge_workflow.py @@ -176,8 +176,8 @@ class KnowledgeWorkflowView(APIView): tags=[_('Knowledge Base')] # type: ignore ) @has_permissions( - PermissionConstants.KNOWLEDGE_EDIT.get_workspace_knowledge_permission(), - PermissionConstants.KNOWLEDGE_EDIT.get_workspace_permission_workspace_manage_role(), + PermissionConstants.KNOWLEDGE_WORKFLOW_EDIT.get_workspace_knowledge_permission(), + PermissionConstants.KNOWLEDGE_WORKFLOW_EDIT.get_workspace_permission_workspace_manage_role(), RoleConstants.WORKSPACE_MANAGE.get_workspace_role(), ViewPermission( [RoleConstants.USER.get_workspace_role()], diff --git a/ui/src/api/knowledge/knowledge.ts b/ui/src/api/knowledge/knowledge.ts index d9e119580..357e31453 100644 --- a/ui/src/api/knowledge/knowledge.ts +++ b/ui/src/api/knowledge/knowledge.ts @@ -380,6 +380,21 @@ const publish: (knowledge_id: string, loading?: Ref) => Promise, +) => Promise> = (knowledge_id, data, loading) => { + return put(`${prefix.value}/${knowledge_id}/workflow`, data, undefined, loading) +} + const listKnowledgeVersion: ( knowledge_id: string, loading?: Ref, @@ -451,5 +466,6 @@ export default { listKnowledgeVersion, updateKnowledgeVersion, publish, + putKnowledgeWorkflow, workflowUpload, } diff --git a/ui/src/api/system-resource-management/knowledge.ts b/ui/src/api/system-resource-management/knowledge.ts index 35b72013e..dc8ba55ee 100644 --- a/ui/src/api/system-resource-management/knowledge.ts +++ b/ui/src/api/system-resource-management/knowledge.ts @@ -303,6 +303,21 @@ const getWorkflowAction: ( return get(`${prefix}/${knowledge_id}/action/${knowledge_action_id}`, {}, loading) } +/** + * 保存知识库工作流 + * @param knowledge_id + * @param data + * @param loading + * @returns + */ +const putKnowledgeWorkflow: ( + knowledge_id: string, + data: any, + loading?: Ref, +) => Promise> = (knowledge_id, data, loading) => { + return put(`${prefix}/${knowledge_id}/workflow`, data, undefined, loading) +} + const publish: (knowledge_id: string, loading?: Ref) => Promise> = ( knowledge_id: string, loading, @@ -342,6 +357,7 @@ export default { workflowAction, getWorkflowAction, publish, + putKnowledgeWorkflow, listKnowledgeVersion } as { [key: string]: any diff --git a/ui/src/api/system-shared/knowledge.ts b/ui/src/api/system-shared/knowledge.ts index bf6119e5d..37edf3817 100644 --- a/ui/src/api/system-shared/knowledge.ts +++ b/ui/src/api/system-shared/knowledge.ts @@ -361,6 +361,21 @@ const getWorkflowAction: ( return get(`${prefix}/${knowledge_id}/action/${knowledge_action_id}`, {}, loading) } +/** + * 保存知识库工作流 + * @param knowledge_id + * @param data + * @param loading + * @returns + */ +const putKnowledgeWorkflow: ( + knowledge_id: string, + data: any, + loading?: Ref, +) => Promise> = (knowledge_id, data, loading) => { + return put(`${prefix}/${knowledge_id}/workflow`, data, undefined, loading) +} + const publish: (knowledge_id: string, loading?: Ref) => Promise> = ( knowledge_id: string, loading, @@ -404,6 +419,7 @@ export default { getKnowledgeWorkflowDatasourceDetails, workflowAction, publish, + putKnowledgeWorkflow, listKnowledgeVersion, } as { [key: string]: any diff --git a/ui/src/views/knowledge-workflow/index.vue b/ui/src/views/knowledge-workflow/index.vue index e8848c0a2..ea2e8ca58 100644 --- a/ui/src/views/knowledge-workflow/index.vue +++ b/ui/src/views/knowledge-workflow/index.vue @@ -448,7 +448,7 @@ function saveknowledge(bool?: boolean, back?: boolean) { } loading.value = back || false loadSharedApi({ type: 'knowledge', systemType: apiType.value }) - .putKnowledge(id, obj) + .putKnowledgeWorkflow(id, obj) .then(() => { saveTime.value = new Date() if (bool) { diff --git a/ui/src/views/system-resource-management/KnowledgeResourceIndex.vue b/ui/src/views/system-resource-management/KnowledgeResourceIndex.vue index 642183322..c59f22943 100644 --- a/ui/src/views/system-resource-management/KnowledgeResourceIndex.vue +++ b/ui/src/views/system-resource-management/KnowledgeResourceIndex.vue @@ -293,6 +293,8 @@ import { MsgSuccess, MsgConfirm } from '@/utils/message' import { SourceTypeEnum } from '@/enums/common' import { t } from '@/locales' import useStore from '@/stores' +import { hasPermission } from '@/utils/permission' +import { PermissionConst, RoleConst } from '@/utils/permission/data' const router = useRouter() const { user } = useStore() @@ -306,7 +308,8 @@ const ManagePermission = () => { permissionPrecise.value.problem_read() || permissionPrecise.value.edit() || permissionPrecise.value.knowledge_chat_user_read() || - permissionPrecise.value.hit_test() + permissionPrecise.value.hit_test() || + hasPermission([RoleConst.ADMIN, PermissionConst.RESOURCE_KNOWLEDGE_WORKFLOW_READ],'OR') ) }