feat: Knowledge workflow save interface

This commit is contained in:
zhangzhanwei 2025-12-02 16:40:48 +08:00
parent 0a233cae84
commit ba0f5b5583
9 changed files with 70 additions and 18 deletions

View File

@ -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()

View File

@ -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)

View File

@ -16,7 +16,7 @@ urlpatterns = [
path('workspace/<str:workspace_id>/knowledge/tags', views.KnowledgeView.Tags.as_view()),
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>', views.KnowledgeView.Operate.as_view()),
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/sync', views.KnowledgeView.SyncWeb.as_view()),
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/workfolw', views.KnowledgeWorkflowView.Operate.as_view()),
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/workflow', views.KnowledgeWorkflowView.Operate.as_view()),
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/generate_related', views.KnowledgeView.GenerateRelated.as_view()),
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/embedding', views.KnowledgeView.Embedding.as_view()),
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/hit_test', views.KnowledgeView.HitTest.as_view()),

View File

@ -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()],

View File

@ -380,6 +380,21 @@ const publish: (knowledge_id: string, loading?: Ref<boolean>) => Promise<Result<
return put(`${prefix.value}/${knowledge_id}/publish`, {}, {}, loading)
}
/**
*
* @param knowledge_id
* @param data
* @param loading
* @returns
*/
const putKnowledgeWorkflow: (
knowledge_id: string,
data: any,
loading?: Ref<boolean>,
) => Promise<Result<any>> = (knowledge_id, data, loading) => {
return put(`${prefix.value}/${knowledge_id}/workflow`, data, undefined, loading)
}
const listKnowledgeVersion: (
knowledge_id: string,
loading?: Ref<boolean>,
@ -451,5 +466,6 @@ export default {
listKnowledgeVersion,
updateKnowledgeVersion,
publish,
putKnowledgeWorkflow,
workflowUpload,
}

View File

@ -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<boolean>,
) => Promise<Result<any>> = (knowledge_id, data, loading) => {
return put(`${prefix}/${knowledge_id}/workflow`, data, undefined, loading)
}
const publish: (knowledge_id: string, loading?: Ref<boolean>) => Promise<Result<any>> = (
knowledge_id: string,
loading,
@ -342,6 +357,7 @@ export default {
workflowAction,
getWorkflowAction,
publish,
putKnowledgeWorkflow,
listKnowledgeVersion
} as {
[key: string]: any

View File

@ -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<boolean>,
) => Promise<Result<any>> = (knowledge_id, data, loading) => {
return put(`${prefix}/${knowledge_id}/workflow`, data, undefined, loading)
}
const publish: (knowledge_id: string, loading?: Ref<boolean>) => Promise<Result<any>> = (
knowledge_id: string,
loading,
@ -404,6 +419,7 @@ export default {
getKnowledgeWorkflowDatasourceDetails,
workflowAction,
publish,
putKnowledgeWorkflow,
listKnowledgeVersion,
} as {
[key: string]: any

View File

@ -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) {

View File

@ -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')
)
}