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 @@
-
-
-
-
-
-
- {{ label }}
-
-
-
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 @@
+
+
+
+
+
+
+
触发器
+
+
+
+
+ 添加
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ trigger.name }}
+
+
+ {{ getScheduleLabel(trigger.trigger_setting) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+ {{ label }}
+
+
+
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()