From bb46e67cae719be17837ba9d6a8a6e19fdd4cd09 Mon Sep 17 00:00:00 2001 From: wangdan-fit2cloud Date: Tue, 27 Oct 2026 10:44:52 +0800 Subject: [PATCH] fix: application api --- ui/src/assets/iconfont.js | 2 +- .../global/markdown-editor/MdEditorMagnify.vue | 10 +++++++++- .../mk-dynamics-form/items/table/TableCheckbox.vue | 11 +---------- .../mk-dynamics-form/items/table/TableRadio.vue | 11 +---------- .../application/components/ButtonAiGenerate.vue | 2 +- ui/src/workflow-canvas/WORKFLOW_README.md | 10 +++++++--- .../ai-generate/panel/AiGeneratePanel.vue | 2 +- ui/src/workflow-canvas/node-menu/ResourceNodeMenu.vue | 5 +---- .../store/api/system-resource/index.ts | 2 ++ ui/src/workflow-canvas/store/api/workspace/index.ts | 2 ++ ui/src/workflow-canvas/store/index.ts | 7 +++++++ 11 files changed, 33 insertions(+), 31 deletions(-) diff --git a/ui/src/assets/iconfont.js b/ui/src/assets/iconfont.js index d72c63cb6a8..2bfe295b334 100644 --- a/ui/src/assets/iconfont.js +++ b/ui/src/assets/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_5200172='',(h=>{var a=(l=(l=document.getElementsByTagName("script"))[l.length-1]).getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var o,v,t,i,c,d=function(a,l){l.parentNode.insertBefore(a,l)};if(a&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}o=function(){var a,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_5200172,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?d(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(v=function(){document.removeEventListener("DOMContentLoaded",v,!1),o()},document.addEventListener("DOMContentLoaded",v,!1)):document.attachEvent&&(t=o,i=h.document,c=!1,m(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,e())})}function e(){c||(c=!0,t())}function m(){try{i.documentElement.doScroll("left")}catch(a){return void setTimeout(m,50)}e()}})(window); \ No newline at end of file +window._iconfont_svg_string_5200172='',(h=>{var a=(l=(l=document.getElementsByTagName("script"))[l.length-1]).getAttribute("data-injectcss"),l=l.getAttribute("data-disable-injectsvg");if(!l){var o,v,t,i,c,d=function(a,l){l.parentNode.insertBefore(a,l)};if(a&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}o=function(){var a,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_5200172,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?d(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(v=function(){document.removeEventListener("DOMContentLoaded",v,!1),o()},document.addEventListener("DOMContentLoaded",v,!1)):document.attachEvent&&(t=o,i=h.document,c=!1,m(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,e())})}function e(){c||(c=!0,t())}function m(){try{i.documentElement.doScroll("left")}catch(a){return void setTimeout(m,50)}e()}})(window); \ No newline at end of file diff --git a/ui/src/components/global/markdown-editor/MdEditorMagnify.vue b/ui/src/components/global/markdown-editor/MdEditorMagnify.vue index 5d3c6d82e4c..e33f3ee3f0d 100644 --- a/ui/src/components/global/markdown-editor/MdEditorMagnify.vue +++ b/ui/src/components/global/markdown-editor/MdEditorMagnify.vue @@ -74,4 +74,12 @@ async function submitEditorDialog() { - + diff --git a/ui/src/components/mk-dynamics-form/items/table/TableCheckbox.vue b/ui/src/components/mk-dynamics-form/items/table/TableCheckbox.vue index 54f75568373..bf675f5de21 100644 --- a/ui/src/components/mk-dynamics-form/items/table/TableCheckbox.vue +++ b/ui/src/components/mk-dynamics-form/items/table/TableCheckbox.vue @@ -135,13 +135,7 @@ const activeText = computed(() => {
{{ title }}
- + { font-size: 14px; line-height: 22px; } - .input-with-select { - width: 45%; - } } .msg { margin-top: 12px; diff --git a/ui/src/components/mk-dynamics-form/items/table/TableRadio.vue b/ui/src/components/mk-dynamics-form/items/table/TableRadio.vue index d3f0a6e4d92..762d97c7af0 100644 --- a/ui/src/components/mk-dynamics-form/items/table/TableRadio.vue +++ b/ui/src/components/mk-dynamics-form/items/table/TableRadio.vue @@ -121,13 +121,7 @@ const activeText = computed(() => {
{{ title }}
- + { font-size: 14px; line-height: 22px; } - .input-with-select { - width: 45%; - } } .msg { margin-top: 12px; diff --git a/ui/src/views/workflow/application/components/ButtonAiGenerate.vue b/ui/src/views/workflow/application/components/ButtonAiGenerate.vue index 6b64f844204..0ef522e9abe 100644 --- a/ui/src/views/workflow/application/components/ButtonAiGenerate.vue +++ b/ui/src/views/workflow/application/components/ButtonAiGenerate.vue @@ -27,7 +27,7 @@ function handleOpenAiGenerate() { - + {{ label }} //mcp_tools` 或 `/system/shared///mcp_tools` 扩展接口,尚未完成运行验证。 `workspace-shared` 仍为空占位。选择弹窗的资源范围和交互以组件文档为准。 节点资源查询可调用此适配器或既有业务 API;工作流加载、保存与发布仍由 View 编排,核心层不承载请求。 diff --git a/ui/src/workflow-canvas/ai-generate/panel/AiGeneratePanel.vue b/ui/src/workflow-canvas/ai-generate/panel/AiGeneratePanel.vue index bcd804ae1c4..ab62d02b20e 100644 --- a/ui/src/workflow-canvas/ai-generate/panel/AiGeneratePanel.vue +++ b/ui/src/workflow-canvas/ai-generate/panel/AiGeneratePanel.vue @@ -157,7 +157,7 @@ defineExpose({ open, close }) >

- + AI 生成

diff --git a/ui/src/workflow-canvas/node-menu/ResourceNodeMenu.vue b/ui/src/workflow-canvas/node-menu/ResourceNodeMenu.vue index 5f2035b6b27..59f21f440cf 100644 --- a/ui/src/workflow-canvas/node-menu/ResourceNodeMenu.vue +++ b/ui/src/workflow-canvas/node-menu/ResourceNodeMenu.vue @@ -2,7 +2,6 @@ import { TOOLTIP_SHOW_DELAY } from '@/components/global/mk-tooltip/constants' import { computed, inject, onMounted, ref } from 'vue' import { cloneDeep } from 'lodash' -import ApplicationApi from '@/api/admin/workspace/application/application' import SharedToolApi from '@/api/admin/workspace/shared/tool' import ToolApi from '@/api/admin/workspace/tool/tool' import { RESOURCE_TYPE, TOOL_TYPE } from '@/api/enums' @@ -108,10 +107,8 @@ function loadTools(folder?: FolderItem) { } function loadApplications(folder?: FolderItem) { - // TODO 共享资源和资源管理需要不同的api,后续需要拆分 const folderQuery = { folder_id: folder?.id || FOLDER_ENTRY_ID.ALL } - // TODO 接口 - return ApplicationApi.getAllApplication({ ...folderQuery, publish_status: 'published' }).then((res) => { + return store.force.getAllApplication({ ...folderQuery, publish_status: 'published' }).then((res) => { resourceItems.value = res .filter((application) => application.id !== route.params?.applicationId) .map((application) => ({ diff --git a/ui/src/workflow-canvas/store/api/system-resource/index.ts b/ui/src/workflow-canvas/store/api/system-resource/index.ts index ad75c6c2a11..de801281d7d 100644 --- a/ui/src/workflow-canvas/store/api/system-resource/index.ts +++ b/ui/src/workflow-canvas/store/api/system-resource/index.ts @@ -1,3 +1,4 @@ +import ApplicationApi from '@/api/admin/system/resource-management/application/application' import { get, post } from '@/api/admin/core/request' import type { KnowledgeTagGroup } from '@/api/types' import type { McpTool } from '@/workflow-canvas/store' @@ -13,6 +14,7 @@ const getMcpTools = (resourceType: string, resourceId: string, mcpServers: strin const getAllTags = (knowledgeIds: string[]) => get('/system/resource/knowledge/tags', { 'knowledge_ids[]': knowledgeIds }) export default { + getAllApplication: ApplicationApi.getAllApplication, postPromptGenerate: ModelApi.postPromptGenerate, postChatCompletion: ModelApi.postChatCompletion, getMcpTools, diff --git a/ui/src/workflow-canvas/store/api/workspace/index.ts b/ui/src/workflow-canvas/store/api/workspace/index.ts index ae03ae69ff3..33335357d0b 100644 --- a/ui/src/workflow-canvas/store/api/workspace/index.ts +++ b/ui/src/workflow-canvas/store/api/workspace/index.ts @@ -1,3 +1,4 @@ +import ApplicationApi from '@/api/admin/workspace/application/application' import { get, post } from '@/api/admin/core/request' import type { KnowledgeTagGroup } from '@/api/types' import modelAPI from '@/api/admin/workspace/model' @@ -20,6 +21,7 @@ const getAllTags = (knowledgeIds: string[]) => { } export default { + getAllApplication: ApplicationApi.getAllApplication, postPromptGenerate: modelAPI.postPromptGenerate, postChatCompletion: modelAPI.postChatCompletion, getModelListWithShared: modelAPI.getModelListWithShared, diff --git a/ui/src/workflow-canvas/store/index.ts b/ui/src/workflow-canvas/store/index.ts index 66875e7b862..b9c5cc80237 100644 --- a/ui/src/workflow-canvas/store/index.ts +++ b/ui/src/workflow-canvas/store/index.ts @@ -1,4 +1,5 @@ import type { + ApplicationDetail, ChatCompletionPayload, Dict, DynamicFormField, @@ -18,6 +19,7 @@ export interface McpTool { // 底层 api/*/index.ts 提供的原始接口实现,不含缓存层能力。 type ApiModule = { + getAllApplication?: (query?: Dict) => Promise getAllTags?: (knowledgeIds: string[]) => Promise getModelListWithShared: (query?: Dict) => Promise getProviderList: () => Promise @@ -32,6 +34,7 @@ type ApiModule = { // 查询默认走缓存,通过 store.force.xxx() 强制刷新;生成请求始终直接转发。 export type WorkflowStoreApi = { + getAllApplication: (query?: Dict) => Promise getAllTags: (knowledgeIds: string[]) => Promise getModelListWithShared: (query?: Dict) => Promise getProviderList: () => Promise @@ -95,6 +98,10 @@ export function useWorkflowStore(resourceScope: string): WorkflowStore { if (!requestApi.postChatCompletion) return Promise.reject(new Error(`当前资源范围不支持流式补全: ${resourceScope}`)) return requestApi.postChatCompletion(modelId, payload, signal) }, + getAllApplication(query?: Dict): Promise { + if (!requestApi.getAllApplication) return Promise.resolve([]) + return withCache(`application-list:${JSON.stringify(query ?? {})}`, () => requestApi.getAllApplication!(query), force) + }, getAllTags(knowledgeIds: string[]): Promise { if (!requestApi.getAllTags) return Promise.resolve([]) return withCache(`knowledge-tags:${JSON.stringify(knowledgeIds)}`, () => requestApi.getAllTags!(knowledgeIds), force)