@@ -7,12 +7,13 @@ import { cloneDeep } from 'lodash'
77import ModelApi from ' @/api/admin/workspace/model/model'
88import ToolApi from ' @/api/admin/workspace/tool/tool'
99import ToolWorkflowApi from ' @/api/admin/workspace/tool/workflow'
10- import type { ToolItem , ToolWorkflowDetail } from ' @/api/types'
11- import { MsgConfirm , MsgSuccess } from ' @/utils/message'
10+ import type { DefaultModelSettingPayload , ToolItem , ToolWorkflowDetail } from ' @/api/types'
11+ import { MsgConfirm , MsgSuccess , MsgError } from ' @/utils/message'
1212import WorkflowCanvas from ' @/workflow-canvas/index.vue'
1313import { defaultToolNodes } from ' @/workflow-canvas/config/node-mapping'
1414import { WorkflowMode } from ' @/workflow-canvas/types'
1515import WorkflowViewLayout from ' ../components/WorkflowViewLayout.vue'
16+ import DefaultModelSettingButton from ' @/views/workflow/components/default-model-setting/DefaultModelSettingButton.vue'
1617
1718defineOptions ({ name: ' ToolWorkflowView' })
1819
@@ -35,6 +36,7 @@ const workflowRef = useTemplateRef<InstanceType<typeof WorkflowCanvas>>('workflo
3536const toolDetail = ref <ToolItem >()
3637const loading = ref (false )
3738const saving = ref (false )
39+ const publishing = ref (false )
3840const savedWorkflow = ref <LogicFlow .GraphData >()
3941const saveTime = ref <Date | string >()
4042
@@ -57,8 +59,9 @@ function saveToolWorkflow(graphData = getGraphData(), showMessage = false) {
5759 if (! graphData ) return Promise .resolve <ToolWorkflowDetail | undefined >(undefined )
5860
5961 saving .value = true
60- return ToolWorkflowApi .putToolWorkflow (toolId , { work_flow: graphData })
62+ return ToolWorkflowApi .putToolWorkflow (toolId , { work_flow: graphData , default_model_setting: cloneDeep ( defaultModelSetting . value ) })
6163 .then ((toolWorkflow ) => {
64+ defaultModelSetting .value = cloneDeep (toolWorkflow .default_model_setting ?? {})
6265 saveTime .value = toolWorkflow .update_time || new Date ()
6366 setSavedWorkflow (graphData )
6467 if (showMessage ) MsgSuccess (' 保存成功' )
@@ -69,15 +72,43 @@ function saveToolWorkflow(graphData = getGraphData(), showMessage = false) {
6972 })
7073}
7174
75+ /* 应用默认模型设置:抽屉提交后暂存,保存失败时从详情回滚。 */
76+ const defaultModelSetting = ref <DefaultModelSettingPayload >({})
77+
78+ function handleApplyDefaultModelToAll(graphData : LogicFlow .GraphData ) {
79+ workflowRef .value ?.renderGraphData (graphData )
80+ }
81+
82+ function handleSaveDefaultModelSetting(settings : DefaultModelSettingPayload ) {
83+ defaultModelSetting .value = cloneDeep (settings )
84+ return handleSave ()
85+ }
86+
7287function handleSave() {
7388 saveToolWorkflow (undefined , true )
7489}
7590
91+ function handlePublish() {
92+ if (! workflowRef .value ) return
93+
94+ publishing .value = true
95+ workflowRef .value
96+ .validate ()
97+ .then (() => saveToolWorkflow ()) // 先保存未落库的画布改动
98+ .then (() => ToolWorkflowApi .putToolWorkflowPublish (toolId ))
99+ .then (() => MsgSuccess (' 发布成功' ))
100+ .catch (() => MsgError (' 发布失败' ))
101+ .finally (() => {
102+ publishing .value = false
103+ })
104+ }
105+
76106function loadToolWorkflow() {
77107 loading .value = true
78108 return Promise .all ([ToolApi .getToolDetail (toolId ), ToolWorkflowApi .getToolWorkflow (toolId )])
79109 .then (([tool , toolWorkflow ]) => {
80110 toolDetail .value = tool
111+ defaultModelSetting .value = cloneDeep (toolWorkflow .default_model_setting ?? {})
81112 saveTime .value = toolWorkflow .update_time
82113
83114 const workflow = toolWorkflow .work_flow ?.nodes ?.length ? toolWorkflow .work_flow : DEFAULT_WORKFLOW
@@ -133,9 +164,19 @@ onMounted(() => {
133164<template >
134165 <WorkflowViewLayout :loading =" loading " :title =" toolDetail ?.name " :save-time =" saveTime " @back =" handleBack " >
135166 <template #actions >
167+ <DefaultModelSettingButton
168+ :model-value =" defaultModelSetting "
169+ :model-api =" ModelApi "
170+ :get-graph-data =" getGraphData "
171+ :disabled =" loading || saving || publishing "
172+ @save =" handleSaveDefaultModelSetting "
173+ @apply-to-all =" handleApplyDefaultModelToAll "
174+ />
175+
176+ <el-button type =" primary" :loading =" publishing" :disabled =" loading || saving || publishing" @click =" handlePublish" > 发布 </el-button >
136177 <el-button plain :loading =" saving" :disabled =" loading || saving" @click =" handleSave" > 保存 </el-button >
137178 </template >
138179
139- <WorkflowCanvas ref="workflowRef" class="min-h-0 flex-1" :loop-workflow-mode =" WorkflowMode .ToolLoop " :workflow-mode =" WorkflowMode .Tool " />
180+ <WorkflowCanvas ref="workflowRef" class="min-h-0 flex-1" :default-model-settings = " defaultModelSetting " : loop-workflow-mode =" WorkflowMode .ToolLoop " :workflow-mode =" WorkflowMode .Tool " />
140181 </WorkflowViewLayout >
141182</template >
0 commit comments