From 06e910b630468c8c9e949f541c5ff40b296371a4 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 <80892890+shaohuzhang1@users.noreply.github.com> Date: Mon, 23 Jun 2025 10:35:21 +0800 Subject: [PATCH] feat: application publish (#3342) --- apps/application/serializers/application.py | 6 ++-- apps/application/urls.py | 2 ++ ui/src/api/application/application.ts | 35 ++++++++++++------ ui/src/views/application-workflow/index.vue | 39 ++++++++------------- 4 files changed, 45 insertions(+), 37 deletions(-) diff --git a/apps/application/serializers/application.py b/apps/application/serializers/application.py index 43acf5d47..57dc73560 100644 --- a/apps/application/serializers/application.py +++ b/apps/application/serializers/application.py @@ -599,6 +599,7 @@ class ApplicationOperateSerializer(serializers.Serializer): application.desc = node_data.get('desc') application.prologue = node_data.get('prologue') application.work_flow = work_flow + application.is_publish = True application.save() work_flow_version = WorkFlowVersion(work_flow=work_flow, application=application, name=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), @@ -606,7 +607,7 @@ class ApplicationOperateSerializer(serializers.Serializer): publish_user_name=user.username, workspace_id=workspace_id) work_flow_version.save() - return True + return self.one(with_valid=False) @staticmethod def update_work_flow_model(instance): @@ -673,7 +674,8 @@ class ApplicationOperateSerializer(serializers.Serializer): if 'work_flow' in instance: # 修改语音配置相关 self.update_work_flow_model(instance) - + if application.type == ApplicationTypeChoices.SIMPLE.value: + application.is_publish = True update_keys = ['name', 'desc', 'model_id', 'multiple_rounds_dialogue', 'prologue', 'status', 'dataset_setting', 'model_setting', 'problem_optimization', 'dialogue_number', 'stt_model_id', 'tts_model_id', 'tts_model_enable', 'stt_model_enable', 'tts_type', diff --git a/apps/application/urls.py b/apps/application/urls.py index 0c39febb8..131aee07b 100644 --- a/apps/application/urls.py +++ b/apps/application/urls.py @@ -11,6 +11,8 @@ urlpatterns = [ path('workspace//application//', views.ApplicationAPI.Page.as_view(), name='application_page'), path('workspace//application/', views.ApplicationAPI.Operate.as_view()), + path('workspace//application//publish', + views.ApplicationAPI.Publish.as_view()), path('workspace//application//application_key', views.ApplicationKey.as_view()), path('workspace//application//application_stats', diff --git a/ui/src/api/application/application.ts b/ui/src/api/application/application.ts index dd1daadc6..29205bbcd 100644 --- a/ui/src/api/application/application.ts +++ b/ui/src/api/application/application.ts @@ -1,14 +1,14 @@ -import {Result} from '@/request/Result' -import {get, post, postStream, del, put, request, download, exportFile} from '@/request/index' -import type {pageRequest} from '@/api/type/common' -import type {ApplicationFormType} from '@/api/type/application' -import {type Ref} from 'vue' +import { Result } from '@/request/Result' +import { get, post, postStream, del, put, request, download, exportFile } from '@/request/index' +import type { pageRequest } from '@/api/type/common' +import type { ApplicationFormType } from '@/api/type/application' +import { type Ref } from 'vue' import useStore from '@/stores' -const prefix: any = {_value: '/workspace/'} +const prefix: any = { _value: '/workspace/' } Object.defineProperty(prefix, 'value', { get: function () { - const {user} = useStore() + const { user } = useStore() return this._value + user.getWorkspaceId() + '/application' }, }) @@ -199,7 +199,7 @@ const getPlatformStatus: (application_id: string) => Promise> = (app */ const updatePlatformStatus: (application_id: string, data: any) => Promise> = ( application_id, - data + data, ) => { return post(`${prefix.value}/${application_id}/platform/status`, data) } @@ -208,11 +208,23 @@ const updatePlatformStatus: (application_id: string, data: any) => Promise Promise> = ( application_id, - type + type, ) => { return get(`${prefix.value}/${application_id}/platform/${type}`) } - +/** + * 应用发布 + * @param application_id + * @param loading + * @returns + */ +const publish: ( + application_id: string, + data: any, + loading?: Ref, +) => Promise> = (application_id, data, loading) => { + return put(`${prefix.value}/${application_id}/publish`, data, {}, loading) +} export default { getAllApplication, getApplication, @@ -231,5 +243,6 @@ export default { getApplicationSetting, getPlatformStatus, updatePlatformStatus, - getPlatformConfig + getPlatformConfig, + publish, } diff --git a/ui/src/views/application-workflow/index.vue b/ui/src/views/application-workflow/index.vue index 9c0625b39..7d94d48b2 100644 --- a/ui/src/views/application-workflow/index.vue +++ b/ui/src/views/application-workflow/index.vue @@ -36,7 +36,7 @@ {{ $t('common.save') }} - + {{ $t('views.applicationWorkflow.setting.public') }} @@ -256,29 +256,20 @@ function onmousedown(item: any) { function clickoutside() { showPopover.value = false } -async function publicHandle() { - // 后执行发布 - workflowRef.value - ?.validate() - .then(async () => { - const obj = { - work_flow: getGraphData(), - } - await application.asyncPutApplication(id, obj, loading) - const workflow = new WorkFlowInstance(obj.work_flow) - try { - workflow.is_valid() - } catch (e: any) { - MsgError(e.toString()) - return - } - // applicationApi.putPublishApplication(id as string, obj, loading).then(() => { - - // application.asyncGetApplicationDetail(id, loading).then((res: any) => { - // detail.value.name = res.data.name - // MsgSuccess(t('views.applicationWorkflow.tip.publicSuccess')) - // }) - // }) +const publish = () => { + const workflow = getGraphData() + const workflowInstance = new WorkFlowInstance(workflow) + try { + workflowInstance.is_valid() + } catch (e: any) { + MsgError(e.toString()) + return + } + applicationApi + .publish(id, { work_flow: workflow }, loading) + .then((ok: any) => { + detail.value.name = ok.data.name + MsgSuccess(t('views.applicationWorkflow.tip.publicSuccess')) }) .catch((res: any) => { const node = res.node