diff --git a/ui/src/components/global/mk-icon/TriggerIcon.vue b/ui/src/components/global/mk-icon/TriggerIcon.vue
index 9c43aafc4c9..bf04c66266a 100644
--- a/ui/src/components/global/mk-icon/TriggerIcon.vue
+++ b/ui/src/components/global/mk-icon/TriggerIcon.vue
@@ -7,10 +7,11 @@ withDefaults(defineProps<{ size?: number | string; type?: TriggerType | string }
-
-
-
-
+
+
+
+
+
diff --git a/ui/src/components/global/mk-source-card/index.vue b/ui/src/components/global/mk-source-card/index.vue
index 0f711750d22..c3ddb5a1a1f 100644
--- a/ui/src/components/global/mk-source-card/index.vue
+++ b/ui/src/components/global/mk-source-card/index.vue
@@ -101,7 +101,7 @@ function handleSelectedChange(selected: boolean | string | number) {
-
+
diff --git a/ui/src/views/trigger/TriggerFormDrawer.vue b/ui/src/views/trigger/TriggerFormDrawer.vue
index b7e5d0964f4..98900ad91da 100644
--- a/ui/src/views/trigger/TriggerFormDrawer.vue
+++ b/ui/src/views/trigger/TriggerFormDrawer.vue
@@ -21,7 +21,6 @@ import SelectToolDialog from '@/components/business/select-tool-dialog/index.vue
import TaskParameters from './components/TaskParameters.vue'
import { copyText } from '@/utils/clipboard'
import { MsgSuccess } from '@/utils/message'
-import { perm } from '@/permission'
const emit = defineEmits<{ refresh: [] }>()
/* 抽屉生命周期与详情 */
@@ -67,7 +66,6 @@ function createDefaultForm(): TriggerPayload {
}
const form = ref
(createDefaultForm())
const eventUrl = computed(() => `${window.location.origin}${ADMIN_API_BASE_PATH}/trigger/v1/webhook/${form.value.id}`)
-const canSave = computed(() => (editingId.value ? perm.trigger.edit() : perm.trigger.create()))
const taskKey = (task: Pick) => `${task.source_type}:${task.source_id}`
function resetData() {
diff --git a/ui/src/views/trigger/TriggerView.vue b/ui/src/views/trigger/TriggerView.vue
index b96a0e7d7ea..155b5f44239 100644
--- a/ui/src/views/trigger/TriggerView.vue
+++ b/ui/src/views/trigger/TriggerView.vue
@@ -5,7 +5,6 @@ import { TRIGGER_TYPE } from '@/api/enums'
import type { Dict, OptionItem, Trigger, TriggerType } from '@/api/types'
import { datetimeFormat } from '@/utils/time'
import { MsgConfirm, MsgSuccess } from '@/utils/message'
-import { perm } from '@/permission'
import TriggerFormDrawer from './TriggerFormDrawer.vue'
const triggerDrawerRef = ref>()
@@ -13,7 +12,6 @@ const tableRef = ref<{ clearSelection: () => void }>()
const selectedTriggers = ref([])
const operating = ref(false)
const switchingIds = ref([])
-const canBatchOperate = computed(() => perm.trigger.edit() || perm.trigger.delete())
/* 新建、编辑及删除 */
function handleOpenTriggerDrawer(trigger?: Trigger) {
@@ -21,7 +19,7 @@ function handleOpenTriggerDrawer(trigger?: Trigger) {
}
function handleDeleteTrigger(trigger: Trigger) {
- if (operating.value || !perm.trigger.delete()) return
+ if (operating.value) return
return MsgConfirm(`确定删除触发器“${trigger.name}”吗?`, '删除后将停止触发任务,并删除相关执行记录。')
.then(() => {
operating.value = true
@@ -40,7 +38,7 @@ function handleDeleteTrigger(trigger: Trigger) {
/* 启用状态在请求成功后更新,失败时保留原状态 */
function handleChangeState(trigger: Trigger) {
- if (switchingIds.value.includes(trigger.id) || !perm.trigger.edit()) return
+ if (switchingIds.value.includes(trigger.id)) return
const isActive = !trigger.is_active
switchingIds.value.push(trigger.id)
return TriggerApi.putTrigger(trigger.id, { is_active: isActive })
@@ -60,7 +58,7 @@ function handleSelectionChange(selection: unknown[]) {
}
function handleBatchActivate(isActive: boolean) {
- if (!selectedTriggers.value.length || operating.value || !perm.trigger.edit()) return
+ if (!selectedTriggers.value.length || operating.value) return
operating.value = true
const triggerIds = selectedTriggers.value.map(({ id }) => id)
return TriggerApi.putBatchActivateTrigger(triggerIds, isActive)
@@ -75,7 +73,7 @@ function handleBatchActivate(isActive: boolean) {
}
function handleBatchDelete() {
- if (!selectedTriggers.value.length || operating.value || !perm.trigger.delete()) return
+ if (!selectedTriggers.value.length || operating.value) return
const triggerIds = selectedTriggers.value.map(({ id }) => id)
return MsgConfirm(`确定删除选中的 ${triggerIds.length} 个触发器吗?`, '删除后将停止触发任务,并删除相关执行记录。')
.then(() => {
@@ -158,7 +156,7 @@ onMounted(loadTriggers)
- 新建触发器
+ 新建触发器
{{ datetimeFormat(row.create_time) }}
-
+
- 编辑
- 删除
+ 删除
- 启用
+ 启用
- 禁用
+ 禁用
- 删除
diff --git a/ui/src/workflow-canvas/WORKFLOW_README.md b/ui/src/workflow-canvas/WORKFLOW_README.md
index 8d25c26964c..6e1e127c1f6 100644
--- a/ui/src/workflow-canvas/WORKFLOW_README.md
+++ b/ui/src/workflow-canvas/WORKFLOW_README.md
@@ -180,6 +180,10 @@ AI 对话、意图识别、问题优化、参数提取、图片理解、视频
开关挂载组件;打开时深拷贝配置为草稿,校验通过并保存后仅合并长期记忆配置,取消不修改节点。
默认来源通过 `defaultModelSetting` 接收保存后的 `LLM` 配置,使用禁用的 `SelectModel` 展示,
未配置默认模型时阻止弹窗保存;自定义来源保留节点自己的模型与参数。
+长期记忆触发方式使用 `MkSourceCard` 展示定时与轮次两种单选卡片,仅在选中卡片内展开配置。
+周期与执行时间沿用 v2 的联动级联选择器,切换按钮在周期设置和 Cron 表达式之间切换;保留每日、每周、每月、
+按间隔及按轮次的原有保存协议,轮次输入使用 `el-input-number`,范围为 5–100。
+轮次、完整周期及 Cron 表达式均接入表单校验;切换触发方式或周期/Cron 模式后,清理隐藏字段提示并校验当前配置。
基本信息节点的 `component/FileUploadSetting.vue` 同时封装文件上传设置按钮与弹窗,
通过 `v-model` 接收 `FileUploadSettingData`。节点入口根据上传开关挂载组件,并在配置写回后发送
diff --git a/ui/src/workflow-canvas/nodes/base-node/component/LongTermSetting.vue b/ui/src/workflow-canvas/nodes/base-node/component/LongTermSetting.vue
index 81c68f0b174..0a0c75ffe1b 100644
--- a/ui/src/workflow-canvas/nodes/base-node/component/LongTermSetting.vue
+++ b/ui/src/workflow-canvas/nodes/base-node/component/LongTermSetting.vue
@@ -1,7 +1,7 @@