From 95f3d095fde1a9c9146fddadaca4b8f81c0587ce Mon Sep 17 00:00:00 2001 From: wangdan-fit2cloud Date: Sat, 5 Sep 2026 21:52:07 +0800 Subject: [PATCH] feat: base node --- ui/src/api/API_README.md | 1 + ui/src/api/admin/workspace/trigger/trigger.ts | 11 + ui/src/api/enums/index.ts | 1 + ui/src/api/enums/trigger.ts | 5 + ui/src/api/types/index.ts | 1 + ui/src/api/types/trigger.ts | 23 ++ ui/src/components/COMPONENT_README.md | 2 +- .../business/model-select/index.vue | 12 +- .../constructor/items/SliderConstructor.vue | 3 +- .../constructor/visibility/index.vue | 6 +- .../mk-dynamics-form/items/slider/Slider.vue | 2 +- ui/src/components/mk-form-list/index.vue | 2 +- ui/src/router/ROUTE_README.md | 2 + .../router/admin/workspace/modules/trigger.ts | 2 +- ui/src/views/VIEW_README.md | 1 + ui/src/views/trigger/TriggerView.vue | 97 ++++++ .../components/WorkflowViewLayout.vue | 2 +- ui/src/workflow-canvas/config/locale.ts | 4 +- ui/src/workflow-canvas/config/node-data.ts | 282 +++++++++--------- ui/src/workflow-canvas/config/node-mapping.ts | 4 +- .../icons/condition-node-icon.vue | 2 +- ui/src/workflow-canvas/node-menu/menu.ts | 12 +- .../FileUploadSettingDialog.vue | 8 +- .../LongTermSettingDialog.vue | 2 +- .../component/api-parameter/index.vue | 4 +- .../component/conversation-variable/index.vue | 4 +- .../base-node/component/file-upload/index.vue | 42 --- .../component/long-term-memory/index.vue | 51 ---- .../component/speech-input/index.vue | 72 ----- .../component/speech-playback/index.vue | 74 ----- .../workflow-canvas/nodes/base-node/index.vue | 241 ++++++++------- .../nodes/condition-node/index.ts | 3 +- .../nodes/condition-node/index.vue | 162 +++++----- .../search-setting/SearchSettingDialog.vue | 2 +- 34 files changed, 532 insertions(+), 610 deletions(-) create mode 100644 ui/src/api/admin/workspace/trigger/trigger.ts create mode 100644 ui/src/api/enums/trigger.ts create mode 100644 ui/src/api/types/trigger.ts create mode 100644 ui/src/views/trigger/TriggerView.vue rename ui/src/workflow-canvas/nodes/base-node/component/{file-upload => }/FileUploadSettingDialog.vue (96%) rename ui/src/workflow-canvas/nodes/base-node/component/{long-term-memory => }/LongTermSettingDialog.vue (99%) delete mode 100644 ui/src/workflow-canvas/nodes/base-node/component/file-upload/index.vue delete mode 100644 ui/src/workflow-canvas/nodes/base-node/component/long-term-memory/index.vue delete mode 100644 ui/src/workflow-canvas/nodes/base-node/component/speech-input/index.vue delete mode 100644 ui/src/workflow-canvas/nodes/base-node/component/speech-playback/index.vue diff --git a/ui/src/api/API_README.md b/ui/src/api/API_README.md index d2d04f499a9..877ae6054ab 100644 --- a/ui/src/api/API_README.md +++ b/ui/src/api/API_README.md @@ -20,6 +20,7 @@ src/api/ │ │ ├── application/ # 智能体接口 │ │ ├── knowledge/ # 知识库接口 │ │ ├── model/ # 模型接口 +│ │ ├── trigger/ # 触发器分页查询接口 │ │ ├── tool/ # 工具、工具工作流及工具商店接口 │ │ └── .ts # 工作空间公共资源接口 │ └── provider.ts # Workspace 与 System 共用的模型供应商接口 diff --git a/ui/src/api/admin/workspace/trigger/trigger.ts b/ui/src/api/admin/workspace/trigger/trigger.ts new file mode 100644 index 00000000000..0426aa83f70 --- /dev/null +++ b/ui/src/api/admin/workspace/trigger/trigger.ts @@ -0,0 +1,11 @@ +import { get } from '../../core/request' +import type { ParamsPage, ResponsePage } from '../../core/types' +import type { Dict, Trigger } from '@/api/types' +import { getWorkspaceId } from '@/utils/resource-context' + +/** 获取当前工作空间的触发器分页列表。 */ +const getTriggerPage = (page: ParamsPage, query: Dict = {}) => { + return get>(`/workspace/${getWorkspaceId()}/trigger/${page.currentPage}/${page.pageSize}`, query) +} + +export default { getTriggerPage } diff --git a/ui/src/api/enums/index.ts b/ui/src/api/enums/index.ts index 1a842157c43..7a8c1556992 100644 --- a/ui/src/api/enums/index.ts +++ b/ui/src/api/enums/index.ts @@ -7,3 +7,4 @@ export * from './model' export * from './resource-authorization' export * from './tool' export * from './knowledge' +export * from './trigger' diff --git a/ui/src/api/enums/trigger.ts b/ui/src/api/enums/trigger.ts new file mode 100644 index 00000000000..083570de38f --- /dev/null +++ b/ui/src/api/enums/trigger.ts @@ -0,0 +1,5 @@ +/** 触发器类型。 */ +export const TRIGGER_TYPE = { + SCHEDULED: 'SCHEDULED', + EVENT: 'EVENT', +} as const diff --git a/ui/src/api/types/index.ts b/ui/src/api/types/index.ts index c964e41133a..9be14eff71a 100644 --- a/ui/src/api/types/index.ts +++ b/ui/src/api/types/index.ts @@ -16,3 +16,4 @@ export type * from './resource-authorization' export type * from './folder' export type * from './tool' export type * from './knowledge' +export type * from './trigger' diff --git a/ui/src/api/types/trigger.ts b/ui/src/api/types/trigger.ts new file mode 100644 index 00000000000..b153e22f46a --- /dev/null +++ b/ui/src/api/types/trigger.ts @@ -0,0 +1,23 @@ +import type { TRIGGER_TYPE } from '@/api/enums' + +export type TriggerType = (typeof TRIGGER_TYPE)[keyof typeof TRIGGER_TYPE] + +/** 触发器分页列表中的关联任务。 */ +export interface TriggerTask { + type: string + name: string | null + icon: string | null +} + +/** 触发器分页列表记录。 */ +export interface Trigger { + id: string + name: string + desc: string + trigger_type: TriggerType + is_active: boolean + next_run_time: string | null + trigger_task: TriggerTask[] + create_user: string | null + create_time: string +} diff --git a/ui/src/components/COMPONENT_README.md b/ui/src/components/COMPONENT_README.md index 7fab00daeef..4d16d830899 100644 --- a/ui/src/components/COMPONENT_README.md +++ b/ui/src/components/COMPONENT_README.md @@ -859,7 +859,7 @@ const roleSettings = defineModel<{ roleId: string; workspaceIds: string[] }[]>({ `addText` 设置添加按钮文案,`showAddButton` 默认为 `true`;添加入口由业务布局单独提供时传入 `:show-add-button="false"`。`firstRowHasLabel` 默认为 `true`:第一行删除按钮使用 `mt-8`,后续行 -使用 `mt-0.5`;并列表单项没有 label 时传入 `:first-row-has-label="false"`。删除成功后通过 +使用 `mt-0.5`;并列表单项没有 label 时传入 `:firstRowHasLabel="false"`。删除成功后通过 `remove(item, index)` 返回被删除的行数据和原索引,业务组件可处理关联状态,不需要再次修改列表。 ### MkSearchList diff --git a/ui/src/components/business/model-select/index.vue b/ui/src/components/business/model-select/index.vue index 392cf2fb5cf..d0747364e13 100644 --- a/ui/src/components/business/model-select/index.vue +++ b/ui/src/components/business/model-select/index.vue @@ -163,11 +163,13 @@ function openModelParams() { -
+
- - - + + + + +
@@ -177,7 +179,7 @@ function openModelParams() { /* 参数入口与选择器共用外边框,为原生下拉箭头和清空按钮预留空间。 */ .model-select--with-params { :deep(.el-select__wrapper) { - padding-right: calc(var(--spacing) * 14); + padding-right: calc(var(--spacing) * 13); } } diff --git a/ui/src/components/mk-dynamics-form/constructor/items/SliderConstructor.vue b/ui/src/components/mk-dynamics-form/constructor/items/SliderConstructor.vue index e01e171a890..e76d6703097 100644 --- a/ui/src/components/mk-dynamics-form/constructor/items/SliderConstructor.vue +++ b/ui/src/components/mk-dynamics-form/constructor/items/SliderConstructor.vue @@ -20,7 +20,7 @@ const getData = () => { max: formValue.value.max, step: formValue.value.step, precision: formValue.value.precision, - 'show-input-controls': false, + 'show-input-controls': true, 'show-input': formValue.value.showInput, }, props_info: { rules: [{ message: `请输入 ${formValue.value.label}`, trigger: 'blur', required: formValue.value.required }] }, @@ -114,7 +114,6 @@ onBeforeMount(() => {
- 满足条件时显示 - 满足条件时隐藏 + 显示条件 + 隐藏条件
@@ -129,7 +129,7 @@ defineExpose({ getData, render, validate })
- + diff --git a/ui/src/components/mk-dynamics-form/items/slider/Slider.vue b/ui/src/components/mk-dynamics-form/items/slider/Slider.vue index c03a1b9685f..1733b8596eb 100644 --- a/ui/src/components/mk-dynamics-form/items/slider/Slider.vue +++ b/ui/src/components/mk-dynamics-form/items/slider/Slider.vue @@ -3,5 +3,5 @@ defineOptions({ name: 'DynamicFormSlider' }) diff --git a/ui/src/components/mk-form-list/index.vue b/ui/src/components/mk-form-list/index.vue index c04fc0a7e20..5ac9c22d07b 100644 --- a/ui/src/components/mk-form-list/index.vue +++ b/ui/src/components/mk-form-list/index.vue @@ -27,7 +27,7 @@ function removeRow(index: number) {