From 50a95daf32d834f788defd97abf90f44ac1f522f Mon Sep 17 00:00:00 2001 From: "xinxin.wu" Date: Fri, 6 Nov 2026 15:42:02 +0800 Subject: [PATCH] refactor: split trigger --- ui/src/views/VIEW_README.md | 3 + .../TriggerApplicationAction.vue | 43 ------ .../application-card/action-dropdown/index.ts | 2 +- .../ApplicationTriggerDialog.vue | 144 ++++++++++++++++++ .../TriggerApplicationAction.vue | 47 ++++++ .../resource-management/application/index.vue | 8 +- .../tool/tool-card/action-dropdown/index.ts | 2 +- .../trigger-action/ToolTriggerDialog.vue} | 21 +-- .../TriggerToolAction.vue | 20 +-- .../trigger-form/TriggerFormDrawer.vue | 6 +- 10 files changed, 226 insertions(+), 70 deletions(-) delete mode 100644 ui/src/views/application/application-card/action-dropdown/TriggerApplicationAction.vue create mode 100644 ui/src/views/application/application-card/action-dropdown/trigger-action/ApplicationTriggerDialog.vue create mode 100644 ui/src/views/application/application-card/action-dropdown/trigger-action/TriggerApplicationAction.vue rename ui/src/views/{trigger/resource-trigger/ResourceTriggerDialog.vue => tool/tool-card/action-dropdown/trigger-action/ToolTriggerDialog.vue} (88%) rename ui/src/views/tool/tool-card/action-dropdown/{ => trigger-action}/TriggerToolAction.vue (64%) diff --git a/ui/src/views/VIEW_README.md b/ui/src/views/VIEW_README.md index ec6aa053ed0..5d8855a4f56 100644 --- a/ui/src/views/VIEW_README.md +++ b/ui/src/views/VIEW_README.md @@ -439,6 +439,9 @@ View 负责路由、资源与模式、图加载、保存/发布/调试编排 ### 触发器 +- 智能体、工具的资源触发器 Action 与列表弹窗分别放在各自的 `action-dropdown/trigger-action/`, + 创建/编辑表单继续共用 `trigger/trigger-form/TriggerFormDrawer.vue`。 + - 触发器执行记录的执行时间列使用服务端排序,独立 `orderBy` 经 `toOrderBy` 添加 `ett.` 前缀, 通过查询参数 `order` 传入。切换排序回第一页;搜索、分页和详情跨页保留排序,重新打开抽屉恢复默认排序。 - 触发器列表的下次执行时间、创建时间使用 `order_by` 表头排序,切换时清空选择并回到第一页;搜索、筛选和分页保留排序。 diff --git a/ui/src/views/application/application-card/action-dropdown/TriggerApplicationAction.vue b/ui/src/views/application/application-card/action-dropdown/TriggerApplicationAction.vue deleted file mode 100644 index f384a03ab80..00000000000 --- a/ui/src/views/application/application-card/action-dropdown/TriggerApplicationAction.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - diff --git a/ui/src/views/application/application-card/action-dropdown/index.ts b/ui/src/views/application/application-card/action-dropdown/index.ts index 0aec7bb6bec..4cba015d415 100644 --- a/ui/src/views/application/application-card/action-dropdown/index.ts +++ b/ui/src/views/application/application-card/action-dropdown/index.ts @@ -3,7 +3,7 @@ export { default as ExportApplicationAction } from './ExportApplicationAction.vu export { default as PortalApplicationAction } from './PortalApplicationAction.vue' export { default as MoveApplicationAction } from './MoveApplicationAction.vue' export { default as SettingApplicationAction } from './SettingApplicationAction.vue' -export { default as TriggerApplicationAction } from './TriggerApplicationAction.vue' +export { default as TriggerApplicationAction } from './trigger-action/TriggerApplicationAction.vue' export { default as McpConfigApplicationAction } from './McpConfigApplicationAction.vue' export { default as AuthorizeApplicationAction } from './AuthorizeApplicationAction.vue' export { default as RelatedResourcesApplicationAction } from './RelatedResourcesApplicationAction.vue' diff --git a/ui/src/views/application/application-card/action-dropdown/trigger-action/ApplicationTriggerDialog.vue b/ui/src/views/application/application-card/action-dropdown/trigger-action/ApplicationTriggerDialog.vue new file mode 100644 index 00000000000..75a2d1e0a2c --- /dev/null +++ b/ui/src/views/application/application-card/action-dropdown/trigger-action/ApplicationTriggerDialog.vue @@ -0,0 +1,144 @@ + + + diff --git a/ui/src/views/application/application-card/action-dropdown/trigger-action/TriggerApplicationAction.vue b/ui/src/views/application/application-card/action-dropdown/trigger-action/TriggerApplicationAction.vue new file mode 100644 index 00000000000..3e592dd2878 --- /dev/null +++ b/ui/src/views/application/application-card/action-dropdown/trigger-action/TriggerApplicationAction.vue @@ -0,0 +1,47 @@ + + + diff --git a/ui/src/views/system/resource-management/application/index.vue b/ui/src/views/system/resource-management/application/index.vue index 39abbf72151..ad1263f2d8a 100644 --- a/ui/src/views/system/resource-management/application/index.vue +++ b/ui/src/views/system/resource-management/application/index.vue @@ -186,7 +186,13 @@ onMounted(() => { - + diff --git a/ui/src/views/tool/tool-card/action-dropdown/index.ts b/ui/src/views/tool/tool-card/action-dropdown/index.ts index 2e36e966580..329631ec837 100644 --- a/ui/src/views/tool/tool-card/action-dropdown/index.ts +++ b/ui/src/views/tool/tool-card/action-dropdown/index.ts @@ -9,4 +9,4 @@ export { default as ToolWorkflowAction } from './ToolWorkflowAction.vue' export { default as AuthorizeToolAction } from './AuthorizeToolAction.vue' export { default as RelatedResourcesToolAction } from './RelatedResourcesToolAction.vue' export { default as ExecutionRecordToolAction } from './ExecutionRecordToolAction.vue' -export { default as TriggerToolAction } from './TriggerToolAction.vue' +export { default as TriggerToolAction } from './trigger-action/TriggerToolAction.vue' diff --git a/ui/src/views/trigger/resource-trigger/ResourceTriggerDialog.vue b/ui/src/views/tool/tool-card/action-dropdown/trigger-action/ToolTriggerDialog.vue similarity index 88% rename from ui/src/views/trigger/resource-trigger/ResourceTriggerDialog.vue rename to ui/src/views/tool/tool-card/action-dropdown/trigger-action/ToolTriggerDialog.vue index 662c874217f..343807debaa 100644 --- a/ui/src/views/trigger/resource-trigger/ResourceTriggerDialog.vue +++ b/ui/src/views/tool/tool-card/action-dropdown/trigger-action/ToolTriggerDialog.vue @@ -3,20 +3,25 @@ import type ToolApi from '@/api/admin/workspace/tool/tool' import type SystemToolApi from '@/api/admin/system/resource-management/tool/tool' import type ToolWorkflowApi from '@/api/admin/workspace/tool/workflow' -import { nextTick, ref, useTemplateRef } from 'vue' +import { computed, nextTick, ref, useTemplateRef } from 'vue' import type ResourceTriggerApi from '@/api/admin/workspace/trigger/resource-trigger' -import type { ResourceTrigger, ResourceTriggerResource, TriggerSetting } from '@/api/types' -import { TRIGGER_TYPE, SCHEDULE_TYPE } from '@/api/enums' +import type { ToolItem, ResourceTrigger, ResourceTriggerResource, TriggerSetting } from '@/api/types' +import { RESOURCE_TYPE, TRIGGER_TYPE, SCHEDULE_TYPE } from '@/api/enums' import { MsgSuccess } from '@/utils/message' -import TriggerFormDrawer from '../trigger-form/TriggerFormDrawer.vue' +import TriggerFormDrawer from '@/views/trigger/trigger-form/TriggerFormDrawer.vue' const props = defineProps<{ toolApi?: typeof ToolApi | typeof SystemToolApi toolWorkflowApi?: typeof ToolWorkflowApi api: typeof ResourceTriggerApi - resource: ResourceTriggerResource + tool: ToolItem }>() const emit = defineEmits<{ closed: [] }>() +const resource = computed(() => ({ + source_type: RESOURCE_TYPE.TOOL, + source_id: props.tool.id, + workspace_id: props.tool.workspace_id, +})) /* 当前资源的触发器列表 */ const visible = ref(false) @@ -25,7 +30,7 @@ const triggersData = ref([]) function loadTriggers() { loading.value = true return props.api - .getResourceTriggerList(props.resource) + .getResourceTriggerList(resource.value) .then((result) => { triggersData.value = result }) @@ -74,7 +79,7 @@ function handleRemoveTrigger(trigger: ResourceTrigger) { if (loading.value) return loading.value = true return props.api - .deleteResourceTrigger(props.resource, trigger.id) + .deleteResourceTrigger(resource.value, trigger.id) .then(() => { MsgSuccess('移除成功') return loadTriggers() @@ -140,5 +145,3 @@ defineExpose({ open }) @closed="handleFormClosed" /> - - diff --git a/ui/src/views/tool/tool-card/action-dropdown/TriggerToolAction.vue b/ui/src/views/tool/tool-card/action-dropdown/trigger-action/TriggerToolAction.vue similarity index 64% rename from ui/src/views/tool/tool-card/action-dropdown/TriggerToolAction.vue rename to ui/src/views/tool/tool-card/action-dropdown/trigger-action/TriggerToolAction.vue index fdd42628660..8a8cfc87d51 100644 --- a/ui/src/views/tool/tool-card/action-dropdown/TriggerToolAction.vue +++ b/ui/src/views/tool/tool-card/action-dropdown/trigger-action/TriggerToolAction.vue @@ -3,28 +3,22 @@ import type ToolApi from '@/api/admin/workspace/tool/tool' import type SystemToolApi from '@/api/admin/system/resource-management/tool/tool' import type ToolWorkflowApi from '@/api/admin/workspace/tool/workflow' -import { computed, nextTick, ref, useTemplateRef } from 'vue' +import { nextTick, ref, useTemplateRef } from 'vue' import type ResourceTriggerApi from '@/api/admin/workspace/trigger/resource-trigger' -import type { ResourceTriggerResource, ToolItem } from '@/api/types' -import { RESOURCE_TYPE } from '@/api/enums' -import ResourceTriggerDialog from '@/views/trigger/resource-trigger/ResourceTriggerDialog.vue' +import type { ToolItem } from '@/api/types' +import ToolTriggerDialog from './ToolTriggerDialog.vue' -const props = defineProps<{ +defineProps<{ toolApi?: typeof ToolApi | typeof SystemToolApi toolWorkflowApi?: typeof ToolWorkflowApi api: typeof ResourceTriggerApi tool: ToolItem label: string }>() -const resource = computed(() => ({ - source_type: RESOURCE_TYPE.TOOL, - source_id: props.tool.id, - workspace_id: props.tool.workspace_id, -})) /* 点击后挂载资源触发器列表。 */ const dialogMounted = ref(false) -const resourceTriggerRef = useTemplateRef>('resourceTriggerRef') +const resourceTriggerRef = useTemplateRef>('resourceTriggerRef') function handleOpenTriggers() { dialogMounted.value = true return nextTick(() => resourceTriggerRef.value?.open()) @@ -40,13 +34,13 @@ function handleDialogClosed() { {{ label }} - diff --git a/ui/src/views/trigger/trigger-form/TriggerFormDrawer.vue b/ui/src/views/trigger/trigger-form/TriggerFormDrawer.vue index 37d28764f1c..bddabc0d463 100644 --- a/ui/src/views/trigger/trigger-form/TriggerFormDrawer.vue +++ b/ui/src/views/trigger/trigger-form/TriggerFormDrawer.vue @@ -12,6 +12,7 @@ import ToolTaskExecution from './task-execution/ToolTaskExecution.vue' import ApplicationTaskExecution from './task-execution/ApplicationTaskExecution.vue' import ResourceTriggerApi from '@/api/admin/workspace/trigger/resource-trigger' import ApplicationApi from '@/api/admin/workspace/application/application' +import type SystemResourceApplicationApi from '@/api/admin/system/resource-management/application/application' import type SystemToolApi from '@/api/admin/system/resource-management/tool/tool' import ToolApi from '@/api/admin/workspace/tool/tool' import WorkflowApi from '@/api/admin/workspace/tool/workflow' @@ -24,10 +25,11 @@ const props = withDefaults( defineProps<{ resource?: ResourceTriggerResource resourceApi?: typeof ResourceTriggerApi + applicationApi?: typeof ApplicationApi | typeof SystemResourceApplicationApi toolApi?: typeof ToolApi | typeof SystemToolApi toolWorkflowApi?: typeof WorkflowApi }>(), - { resourceApi: () => ResourceTriggerApi, toolApi: () => ToolApi, toolWorkflowApi: () => WorkflowApi }, + { resourceApi: () => ResourceTriggerApi, applicationApi: () => ApplicationApi, toolApi: () => ToolApi, toolWorkflowApi: () => WorkflowApi }, ) const emit = defineEmits<{ refresh: []; closed: [] }>() /* 抽屉生命周期与详情 */ @@ -133,7 +135,7 @@ function open(triggerId?: string) { resources.value[key] = tool }) if (!resources.value[key]) - return ApplicationApi.getApplicationDetail(task.source_id).then((application) => { + return props.applicationApi.getApplicationDetail(task.source_id).then((application) => { resources.value[key] = application }) return Promise.resolve()