Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions ui/src/components/global/mk-icon/TriggerIcon.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ withDefaults(defineProps<{ size?: number | string; type?: TriggerType | string }
</script>

<template>
<el-avatar v-if="type == 'EVENT'" class="bg-warning!" shape="square" :size="size">
<img src="@/assets/trigger/icon_event.svg" style="width: 58%" alt="" />
</el-avatar>
<el-avatar v-else shape="square" :size="size">
<el-avatar v-if="type == 'SCHEDULED'" shape="square" :size="size">
<img src="@/assets/trigger/icon_scheduled.svg" style="width: 58%" alt="" />
</el-avatar>

<el-avatar v-else class="bg-warning!" shape="square" :size="size">
<img src="@/assets/trigger/icon_event.svg" style="width: 58%" alt="" />
</el-avatar>
</template>
2 changes: 1 addition & 1 deletion ui/src/components/global/mk-source-card/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ function handleSelectedChange(selected: boolean | string | number) {

<slot name="tag" />
</header>
<div class="my-4 h-full text-N600">
<div class="my-4 h-full text-N600" v-if="slots.default">
<slot />
</div>

Expand Down
2 changes: 0 additions & 2 deletions ui/src/views/trigger/TriggerFormDrawer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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: [] }>()
/* 抽屉生命周期与详情 */
Expand Down Expand Up @@ -67,7 +66,6 @@ function createDefaultForm(): TriggerPayload {
}
const form = ref<TriggerPayload>(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<TriggerTaskPayload, 'source_type' | 'source_id'>) => `${task.source_type}:${task.source_id}`

function resetData() {
Expand Down
52 changes: 11 additions & 41 deletions ui/src/views/trigger/TriggerView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,21 @@ 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<InstanceType<typeof TriggerFormDrawer>>()
const tableRef = ref<{ clearSelection: () => void }>()
const selectedTriggers = ref<Trigger[]>([])
const operating = ref(false)
const switchingIds = ref<string[]>([])
const canBatchOperate = computed(() => perm.trigger.edit() || perm.trigger.delete())

/* 新建、编辑及删除 */
function handleOpenTriggerDrawer(trigger?: Trigger) {
triggerDrawerRef.value?.open(trigger?.id)
}

function handleDeleteTrigger(trigger: Trigger) {
if (operating.value || !perm.trigger.delete()) return
if (operating.value) return
return MsgConfirm(`确定删除触发器“${trigger.name}”吗?`, '删除后将停止触发任务,并删除相关执行记录。')
.then(() => {
operating.value = true
Expand All @@ -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 })
Expand All @@ -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)
Expand All @@ -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(() => {
Expand Down Expand Up @@ -158,7 +156,7 @@ onMounted(loadTriggers)
<div class="flex items-center gap-3">
<MkComplexSearch :fields="searchFields" @change="handleSearchChange" />
<!-- 新建触发器 -->
<el-button v-if="$perm.trigger.create()" type="primary" @click="handleOpenTriggerDrawer()">新建触发器</el-button>
<el-button type="primary" @click="handleOpenTriggerDrawer()">新建触发器</el-button>
</div>
</component>
<MkTable
Expand Down Expand Up @@ -202,60 +200,32 @@ onMounted(loadTriggers)
<el-table-column prop="create_time" label="创建时间" width="180">
<template #default="{ row }">{{ datetimeFormat(row.create_time) }}</template>
</el-table-column>
<el-table-column v-if="canBatchOperate" label="操作" width="180" fixed="right">
<el-table-column label="操作" width="180" fixed="right">
<template #default="{ row }">
<div class="flex items-center gap-2">
<el-switch
v-if="$perm.trigger.edit()"
:model-value="row.is_active"
:loading="switchingIds.includes(row.id)"
:disabled="operating"
size="small"
@change="handleChangeState(row)"
/>
<!-- 编辑当前触发器 -->
<el-button
v-if="$perm.trigger.edit()"
text
type="primary"
:disabled="switchingIds.includes(row.id) || operating"
@click="handleOpenTriggerDrawer(row)"
<el-button text type="primary" :disabled="switchingIds.includes(row.id) || operating" @click="handleOpenTriggerDrawer(row)"
>编辑</el-button
>
<!-- 删除当前触发器 -->
<el-button
v-if="$perm.trigger.delete()"
text
type="danger"
:disabled="switchingIds.includes(row.id) || operating"
@click="handleDeleteTrigger(row)"
>删除</el-button
>
<el-button text type="danger" :disabled="switchingIds.includes(row.id) || operating" @click="handleDeleteTrigger(row)">删除</el-button>
</div>
</template>
</el-table-column>
<template #footer-batch-actions>
<!-- 批量启用所选触发器 -->
<el-button
v-if="$perm.trigger.edit()"
:disabled="operating || !selectedTriggers.length || !!switchingIds.length"
@click="handleBatchActivate(true)"
>启用</el-button
>
<el-button :disabled="operating || !selectedTriggers.length || !!switchingIds.length" @click="handleBatchActivate(true)">启用</el-button>
<!-- 批量禁用所选触发器 -->
<el-button
v-if="$perm.trigger.edit()"
:disabled="operating || !selectedTriggers.length || !!switchingIds.length"
@click="handleBatchActivate(false)"
>禁用</el-button
>
<el-button :disabled="operating || !selectedTriggers.length || !!switchingIds.length" @click="handleBatchActivate(false)">禁用</el-button>
<!-- 批量删除所选触发器 -->
<el-button
v-if="$perm.trigger.delete()"
type="danger"
plain
:disabled="operating || !selectedTriggers.length || !!switchingIds.length"
@click="handleBatchDelete"
<el-button type="danger" plain :disabled="operating || !selectedTriggers.length || !!switchingIds.length" @click="handleBatchDelete"
>删除</el-button
>
</template>
Expand Down
4 changes: 4 additions & 0 deletions ui/src/workflow-canvas/WORKFLOW_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,10 @@ AI 对话、意图识别、问题优化、参数提取、图片理解、视频
开关挂载组件;打开时深拷贝配置为草稿,校验通过并保存后仅合并长期记忆配置,取消不修改节点。
默认来源通过 `defaultModelSetting` 接收保存后的 `LLM` 配置,使用禁用的 `SelectModel` 展示,
未配置默认模型时阻止弹窗保存;自定义来源保留节点自己的模型与参数。
长期记忆触发方式使用 `MkSourceCard` 展示定时与轮次两种单选卡片,仅在选中卡片内展开配置。
周期与执行时间沿用 v2 的联动级联选择器,切换按钮在周期设置和 Cron 表达式之间切换;保留每日、每周、每月、
按间隔及按轮次的原有保存协议,轮次输入使用 `el-input-number`,范围为 5–100。
轮次、完整周期及 Cron 表达式均接入表单校验;切换触发方式或周期/Cron 模式后,清理隐藏字段提示并校验当前配置。

基本信息节点的 `component/FileUploadSetting.vue` 同时封装文件上传设置按钮与弹窗,
通过 `v-model` 接收 `FileUploadSettingData`。节点入口根据上传开关挂载组件,并在配置写回后发送
Expand Down
Loading
Loading