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)
- 新建触发器 + 新建触发器
- + 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 @@