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)