perf: prune online-dev workflow editor entries

This commit is contained in:
2026-06-22 23:30:14 +08:00
parent 8138bc4d57
commit 24f6f41338
8 changed files with 176 additions and 361 deletions
@@ -16,7 +16,7 @@ import type {
* - agent-debug: 智能体编辑器调试模式 * - agent-debug: 智能体编辑器调试模式
* - agent-chat: 智能体正式对话模式(支持历史、反馈) * - agent-chat: 智能体正式对话模式(支持历史、反馈)
*/ */
import { computed, defineAsyncComponent, onUnmounted, ref, watch } from 'vue'; import { computed, onUnmounted, ref, watch } from 'vue';
import { Settings2, X } from '@vben/icons'; import { Settings2, X } from '@vben/icons';
@@ -36,25 +36,6 @@ import { useChatApi } from './composables/useChatApi';
import { useEventHandler } from './composables/useEventHandler'; import { useEventHandler } from './composables/useEventHandler';
import LiteDesignPreviewPanel from './LiteDesignPreviewPanel.vue'; import LiteDesignPreviewPanel from './LiteDesignPreviewPanel.vue';
const AppDesignPanel = defineAsyncComponent(() =>
import('#/components/form-editor/AppDesignPanel.vue'),
);
const AppSettingsPanel = defineAsyncComponent(() =>
import('#/components/form-editor/AppSettingsPanel.vue'),
);
const DashboardBasicInfoConfirmPanel = defineAsyncComponent(() =>
import('#/components/form-editor/DashboardBasicInfoConfirmPanel.vue'),
);
const DashboardDesignConfirmPanel = defineAsyncComponent(() =>
import('#/components/form-editor/DashboardDesignConfirmPanel.vue'),
);
const DashboardPublishConfirmPanel = defineAsyncComponent(() =>
import('#/components/form-editor/DashboardPublishConfirmPanel.vue'),
);
const SystemSummaryConfirmPanel = defineAsyncComponent(() =>
import('#/components/form-editor/SystemSummaryConfirmPanel.vue'),
);
// ==================== Props ==================== // ==================== Props ====================
const props = withDefaults(defineProps<AiChatPanelProps>(), { const props = withDefaults(defineProps<AiChatPanelProps>(), {
mode: 'workflow', mode: 'workflow',
@@ -1026,7 +1007,7 @@ onUnmounted(() => {
/> />
<!-- 应用设计面板 --> <!-- 应用设计面板 -->
<AppDesignPanel <LiteDesignPreviewPanel
v-if="showAppDesignPanel" v-if="showAppDesignPanel"
:visible="showAppDesignPanel" :visible="showAppDesignPanel"
:design="currentAppDesign as any" :design="currentAppDesign as any"
@@ -1036,27 +1017,27 @@ onUnmounted(() => {
/> />
<!-- 应用设置面板 --> <!-- 应用设置面板 -->
<AppSettingsPanel <LiteDesignPreviewPanel
v-if="showAppSettingsPanel" v-if="showAppSettingsPanel"
:visible="showAppSettingsPanel" :visible="showAppSettingsPanel"
:settings="currentAppSettings as any" :design="currentAppSettings as any"
@update:visible="showAppSettingsPanel = $event" @update:visible="showAppSettingsPanel = $event"
@confirm="handleAppSettingsConfirm" @confirm="handleAppSettingsConfirm"
@close="handleAppSettingsClose" @close="handleAppSettingsClose"
/> />
<!-- 仪表盘基础信息面板 --> <!-- 仪表盘基础信息面板 -->
<DashboardBasicInfoConfirmPanel <LiteDesignPreviewPanel
v-if="showDashboardBasicInfoPanel" v-if="showDashboardBasicInfoPanel"
:visible="showDashboardBasicInfoPanel" :visible="showDashboardBasicInfoPanel"
:basic-info="currentDashboardBasicInfo as any" :design="currentDashboardBasicInfo as any"
@update:visible="showDashboardBasicInfoPanel = $event" @update:visible="showDashboardBasicInfoPanel = $event"
@confirm="handleDashboardBasicInfoConfirm" @confirm="handleDashboardBasicInfoConfirm"
@close="handleDashboardBasicInfoClose" @close="handleDashboardBasicInfoClose"
/> />
<!-- 仪表盘设计面板 --> <!-- 仪表盘设计面板 -->
<DashboardDesignConfirmPanel <LiteDesignPreviewPanel
v-if="showDashboardDesignPanel" v-if="showDashboardDesignPanel"
:visible="showDashboardDesignPanel" :visible="showDashboardDesignPanel"
:design="currentDashboardDesign as any" :design="currentDashboardDesign as any"
@@ -1066,20 +1047,20 @@ onUnmounted(() => {
/> />
<!-- 仪表盘发布面板 --> <!-- 仪表盘发布面板 -->
<DashboardPublishConfirmPanel <LiteDesignPreviewPanel
v-if="showDashboardPublishPanel" v-if="showDashboardPublishPanel"
:visible="showDashboardPublishPanel" :visible="showDashboardPublishPanel"
:publish-data="currentDashboardPublish as any" :design="currentDashboardPublish as any"
@update:visible="showDashboardPublishPanel = $event" @update:visible="showDashboardPublishPanel = $event"
@confirm="handleDashboardPublishConfirm" @confirm="handleDashboardPublishConfirm"
@close="handleDashboardPublishClose" @close="handleDashboardPublishClose"
/> />
<!-- 系统总结面板 --> <!-- 系统总结面板 -->
<SystemSummaryConfirmPanel <LiteDesignPreviewPanel
v-if="showSystemSummaryPanel" v-if="showSystemSummaryPanel"
:visible="showSystemSummaryPanel" :visible="showSystemSummaryPanel"
:data="currentSystemSummary as any" :design="currentSystemSummary as any"
@update:visible="showSystemSummaryPanel = $event" @update:visible="showSystemSummaryPanel = $event"
@confirm="handleSystemSummaryConfirm" @confirm="handleSystemSummaryConfirm"
@close="handleSystemSummaryClose" @close="handleSystemSummaryClose"
@@ -1097,7 +1078,7 @@ onUnmounted(() => {
@close="handleDesignClose" @close="handleDesignClose"
/> />
<AppDesignPanel <LiteDesignPreviewPanel
v-if="showAppDesignPanel" v-if="showAppDesignPanel"
:visible="showAppDesignPanel" :visible="showAppDesignPanel"
:design="currentAppDesign as any" :design="currentAppDesign as any"
@@ -1106,25 +1087,25 @@ onUnmounted(() => {
@close="handleAppDesignClose" @close="handleAppDesignClose"
/> />
<AppSettingsPanel <LiteDesignPreviewPanel
v-if="showAppSettingsPanel" v-if="showAppSettingsPanel"
:visible="showAppSettingsPanel" :visible="showAppSettingsPanel"
:settings="currentAppSettings as any" :design="currentAppSettings as any"
@update:visible="showAppSettingsPanel = $event" @update:visible="showAppSettingsPanel = $event"
@confirm="handleAppSettingsConfirm" @confirm="handleAppSettingsConfirm"
@close="handleAppSettingsClose" @close="handleAppSettingsClose"
/> />
<DashboardBasicInfoConfirmPanel <LiteDesignPreviewPanel
v-if="showDashboardBasicInfoPanel" v-if="showDashboardBasicInfoPanel"
:visible="showDashboardBasicInfoPanel" :visible="showDashboardBasicInfoPanel"
:basic-info="currentDashboardBasicInfo as any" :design="currentDashboardBasicInfo as any"
@update:visible="showDashboardBasicInfoPanel = $event" @update:visible="showDashboardBasicInfoPanel = $event"
@confirm="handleDashboardBasicInfoConfirm" @confirm="handleDashboardBasicInfoConfirm"
@close="handleDashboardBasicInfoClose" @close="handleDashboardBasicInfoClose"
/> />
<DashboardDesignConfirmPanel <LiteDesignPreviewPanel
v-if="showDashboardDesignPanel" v-if="showDashboardDesignPanel"
:visible="showDashboardDesignPanel" :visible="showDashboardDesignPanel"
:design="currentDashboardDesign as any" :design="currentDashboardDesign as any"
@@ -1133,19 +1114,19 @@ onUnmounted(() => {
@close="handleDashboardDesignClose" @close="handleDashboardDesignClose"
/> />
<DashboardPublishConfirmPanel <LiteDesignPreviewPanel
v-if="showDashboardPublishPanel" v-if="showDashboardPublishPanel"
:visible="showDashboardPublishPanel" :visible="showDashboardPublishPanel"
:publish-data="currentDashboardPublish as any" :design="currentDashboardPublish as any"
@update:visible="showDashboardPublishPanel = $event" @update:visible="showDashboardPublishPanel = $event"
@confirm="handleDashboardPublishConfirm" @confirm="handleDashboardPublishConfirm"
@close="handleDashboardPublishClose" @close="handleDashboardPublishClose"
/> />
<SystemSummaryConfirmPanel <LiteDesignPreviewPanel
v-if="showSystemSummaryPanel" v-if="showSystemSummaryPanel"
:visible="showSystemSummaryPanel" :visible="showSystemSummaryPanel"
:data="currentSystemSummary as any" :design="currentSystemSummary as any"
@update:visible="showSystemSummaryPanel = $event" @update:visible="showSystemSummaryPanel = $event"
@confirm="handleSystemSummaryConfirm" @confirm="handleSystemSummaryConfirm"
@close="handleSystemSummaryClose" @close="handleSystemSummaryClose"
@@ -13,7 +13,6 @@ import type { ChatMessage } from '#/components/ChatBox/index';
*/ */
import { import {
computed, computed,
defineAsyncComponent,
nextTick, nextTick,
onUnmounted, onUnmounted,
ref, ref,
@@ -34,9 +33,6 @@ import { ChatBox } from '#/components/ChatBox/index';
import AiWorkingAnimation from '../../../../components/ai-loading/AiWorkingAnimation.vue'; import AiWorkingAnimation from '../../../../components/ai-loading/AiWorkingAnimation.vue';
const AppDesignPanel = defineAsyncComponent(
() => import('#/components/form-editor/AppDesignPanel.vue'),
);
const props = defineProps<{ const props = defineProps<{
/** Agent 详情(可选,用于显示名称和欢迎配置) */ /** Agent 详情(可选,用于显示名称和欢迎配置) */
agent?: Agent | null; agent?: Agent | null;
@@ -503,7 +499,7 @@ function handleStreamEvent(
if (configData?.type === 'design_preview') { if (configData?.type === 'design_preview') {
const previewType = configData.preview_type; const previewType = configData.preview_type;
// 应用设计方案使用 AppDesignPanel(富文本编辑器) // 应用设计方案使用轻量预览面板
if (previewType === 'app_design') { if (previewType === 'app_design') {
currentAppDesign.value = { currentAppDesign.value = {
type: previewType, type: previewType,
@@ -924,7 +920,7 @@ onUnmounted(() => {
v-if="showAppDesignPanel && currentAppDesign" v-if="showAppDesignPanel && currentAppDesign"
class="flex flex-1 flex-col overflow-hidden" class="flex flex-1 flex-col overflow-hidden"
> >
<AppDesignPanel <LiteDesignPreviewPanel
:visible="showAppDesignPanel" :visible="showAppDesignPanel"
:design="currentAppDesign as any" :design="currentAppDesign as any"
@update:visible="showAppDesignPanel = $event" @update:visible="showAppDesignPanel = $event"
@@ -1,17 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import type { WorkflowStreamEvent } from '#/api/ai-platform/ai-platform'; import type { WorkflowStreamEvent } from '#/api/ai-platform/ai-platform';
import type { DesignPreviewData } from '#/components/ai-chat-panel/types';
import type { ChatMessage, ReasoningStep } from '#/components/ChatBox/index'; import type { ChatMessage, ReasoningStep } from '#/components/ChatBox/index';
import type {
AppDesignData,
AppSettingsData,
DashboardBasicInfoData,
DashboardDesignData,
DashboardPublishData,
DesignData,
SystemSummaryData,
} from '#/components/form-editor';
import { computed, defineAsyncComponent, onUnmounted, ref, watch } from 'vue'; import { computed, onUnmounted, ref, watch } from 'vue';
import { Settings2, X } from '@vben/icons'; import { Settings2, X } from '@vben/icons';
import { $t } from '@vben/locales'; import { $t } from '@vben/locales';
@@ -31,24 +23,14 @@ import {
} from '#/api/ai-platform/ai-platform'; } from '#/api/ai-platform/ai-platform';
import LiteDesignPreviewPanel from '#/components/ai-chat-panel/LiteDesignPreviewPanel.vue'; import LiteDesignPreviewPanel from '#/components/ai-chat-panel/LiteDesignPreviewPanel.vue';
import { ChatBox } from '#/components/ChatBox/index'; import { ChatBox } from '#/components/ChatBox/index';
const AppDesignPanel = defineAsyncComponent(
() => import('#/components/form-editor/AppDesignPanel.vue'), type DesignData = DesignPreviewData;
); type AppDesignData = DesignPreviewData;
const AppSettingsPanel = defineAsyncComponent( type AppSettingsData = DesignPreviewData;
() => import('#/components/form-editor/AppSettingsPanel.vue'), type DashboardBasicInfoData = DesignPreviewData;
); type DashboardDesignData = DesignPreviewData;
const DashboardBasicInfoConfirmPanel = defineAsyncComponent( type DashboardPublishData = DesignPreviewData;
() => import('#/components/form-editor/DashboardBasicInfoConfirmPanel.vue'), type SystemSummaryData = DesignPreviewData;
);
const DashboardDesignConfirmPanel = defineAsyncComponent(
() => import('#/components/form-editor/DashboardDesignConfirmPanel.vue'),
);
const DashboardPublishConfirmPanel = defineAsyncComponent(
() => import('#/components/form-editor/DashboardPublishConfirmPanel.vue'),
);
const SystemSummaryConfirmPanel = defineAsyncComponent(
() => import('#/components/form-editor/SystemSummaryConfirmPanel.vue'),
);
const props = defineProps<{ const props = defineProps<{
nodes: any[]; nodes: any[];
@@ -1269,7 +1251,7 @@ onUnmounted(() => {
/> />
<!-- 应用设计面板 --> <!-- 应用设计面板 -->
<AppDesignPanel <LiteDesignPreviewPanel
v-if="showAppDesignPanel" v-if="showAppDesignPanel"
:visible="showAppDesignPanel" :visible="showAppDesignPanel"
:design="currentAppDesign" :design="currentAppDesign"
@@ -1279,27 +1261,27 @@ onUnmounted(() => {
/> />
<!-- 应用设置面板 --> <!-- 应用设置面板 -->
<AppSettingsPanel <LiteDesignPreviewPanel
v-if="showAppSettingsPanel" v-if="showAppSettingsPanel"
:visible="showAppSettingsPanel" :visible="showAppSettingsPanel"
:settings="currentAppSettings" :design="currentAppSettings"
@update:visible="showAppSettingsPanel = $event" @update:visible="showAppSettingsPanel = $event"
@confirm="handleAppSettingsConfirm" @confirm="handleAppSettingsConfirm"
@close="handleAppSettingsClose" @close="handleAppSettingsClose"
/> />
<!-- 仪表盘基础信息面板 --> <!-- 仪表盘基础信息面板 -->
<DashboardBasicInfoConfirmPanel <LiteDesignPreviewPanel
v-if="showDashboardBasicInfoPanel" v-if="showDashboardBasicInfoPanel"
:visible="showDashboardBasicInfoPanel" :visible="showDashboardBasicInfoPanel"
:basic-info="currentDashboardBasicInfo" :design="currentDashboardBasicInfo"
@update:visible="showDashboardBasicInfoPanel = $event" @update:visible="showDashboardBasicInfoPanel = $event"
@confirm="handleDashboardBasicInfoConfirm" @confirm="handleDashboardBasicInfoConfirm"
@close="handleDashboardBasicInfoClose" @close="handleDashboardBasicInfoClose"
/> />
<!-- 仪表盘设计面板 --> <!-- 仪表盘设计面板 -->
<DashboardDesignConfirmPanel <LiteDesignPreviewPanel
v-if="showDashboardDesignPanel" v-if="showDashboardDesignPanel"
:visible="showDashboardDesignPanel" :visible="showDashboardDesignPanel"
:design="currentDashboardDesign" :design="currentDashboardDesign"
@@ -1309,20 +1291,20 @@ onUnmounted(() => {
/> />
<!-- 仪表盘发布面板 --> <!-- 仪表盘发布面板 -->
<DashboardPublishConfirmPanel <LiteDesignPreviewPanel
v-if="showDashboardPublishPanel" v-if="showDashboardPublishPanel"
:visible="showDashboardPublishPanel" :visible="showDashboardPublishPanel"
:publish-data="currentDashboardPublish" :design="currentDashboardPublish"
@update:visible="showDashboardPublishPanel = $event" @update:visible="showDashboardPublishPanel = $event"
@confirm="handleDashboardPublishConfirm" @confirm="handleDashboardPublishConfirm"
@close="handleDashboardPublishClose" @close="handleDashboardPublishClose"
/> />
<!-- 系统总结面板 --> <!-- 系统总结面板 -->
<SystemSummaryConfirmPanel <LiteDesignPreviewPanel
v-if="showSystemSummaryPanel" v-if="showSystemSummaryPanel"
:visible="showSystemSummaryPanel" :visible="showSystemSummaryPanel"
:data="currentSystemSummary" :design="currentSystemSummary"
@update:visible="showSystemSummaryPanel = $event" @update:visible="showSystemSummaryPanel = $event"
@confirm="handleSystemSummaryConfirm" @confirm="handleSystemSummaryConfirm"
@close="handleSystemSummaryClose" @close="handleSystemSummaryClose"
@@ -54,53 +54,69 @@ const components: Record<string, any> = {
), ),
// 循环节点 // 循环节点
loop: defineAsyncComponent(() => import('../panels/LoopPanel.vue')), loop: defineAsyncComponent(() => import('../panels/LoopPanel.vue')),
// 表单节点 // 轻量版兼容旧工作流中的在线开发节点,不再加载原表单/应用/仪表盘配置面板
form_basic_info: defineAsyncComponent( form_basic_info: defineAsyncComponent(
() => import('../panels/FormBasicInfoPanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
form_database_design: defineAsyncComponent( form_database_design: defineAsyncComponent(
() => import('../panels/FormDatabaseDesignPanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
form_database_create: defineAsyncComponent( form_database_create: defineAsyncComponent(
() => import('../panels/FormDatabaseCreatePanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
form_ui_design: defineAsyncComponent( form_ui_design: defineAsyncComponent(
() => import('../panels/FormUIDesignPanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
form_list_design: defineAsyncComponent( form_list_design: defineAsyncComponent(
() => import('../panels/FormListDesignPanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
form_create: defineAsyncComponent( form_create: defineAsyncComponent(
() => import('../panels/FormCreatePanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
form_publish: defineAsyncComponent( form_publish: defineAsyncComponent(
() => import('../panels/FormPublishPanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
),
form_data_create: defineAsyncComponent(
() => import('../panels/PrunedNodePanel.vue'),
),
form_data_read: defineAsyncComponent(
() => import('../panels/PrunedNodePanel.vue'),
),
form_data_update: defineAsyncComponent(
() => import('../panels/PrunedNodePanel.vue'),
),
form_data_delete: defineAsyncComponent(
() => import('../panels/PrunedNodePanel.vue'),
),
form_data_list: defineAsyncComponent(
() => import('../panels/PrunedNodePanel.vue'),
),
form_schema_to_llm: defineAsyncComponent(
() => import('../panels/PrunedNodePanel.vue'),
), ),
// 应用节点
app_create: defineAsyncComponent( app_create: defineAsyncComponent(
() => import('../panels/AppCreatePanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
app_design: defineAsyncComponent( app_design: defineAsyncComponent(
() => import('../panels/AppDesignPanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
app_settings: defineAsyncComponent( app_settings: defineAsyncComponent(
() => import('../panels/AppSettingsPanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
app_update: defineAsyncComponent( app_update: defineAsyncComponent(
() => import('../panels/AppUpdatePanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
// 仪表盘节点
dashboard_basic_info: defineAsyncComponent( dashboard_basic_info: defineAsyncComponent(
() => import('../panels/DashboardBasicInfoPanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
dashboard_design: defineAsyncComponent( dashboard_design: defineAsyncComponent(
() => import('../panels/DashboardDesignPanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
dashboard_create: defineAsyncComponent( dashboard_create: defineAsyncComponent(
() => import('../panels/DashboardCreatePanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
dashboard_publish: defineAsyncComponent( dashboard_publish: defineAsyncComponent(
() => import('../panels/DashboardPublishPanel.vue'), () => import('../panels/PrunedNodePanel.vue'),
), ),
// 系统总结节点 // 系统总结节点
system_summary: defineAsyncComponent( system_summary: defineAsyncComponent(
@@ -108,25 +124,6 @@ const components: Record<string, any> = {
), ),
// 子流程节点 // 子流程节点
subflow: defineAsyncComponent(() => import('../panels/SubflowPanel.vue')), subflow: defineAsyncComponent(() => import('../panels/SubflowPanel.vue')),
// 表单数据节点
form_data_create: defineAsyncComponent(
() => import('../panels/FormDataPanel.vue'),
),
form_data_read: defineAsyncComponent(
() => import('../panels/FormDataPanel.vue'),
),
form_data_update: defineAsyncComponent(
() => import('../panels/FormDataPanel.vue'),
),
form_data_delete: defineAsyncComponent(
() => import('../panels/FormDataPanel.vue'),
),
form_data_list: defineAsyncComponent(
() => import('../panels/FormDataPanel.vue'),
),
form_schema_to_llm: defineAsyncComponent(
() => import('../panels/FormDataPanel.vue'),
),
// Text-to-SQL 节点 // Text-to-SQL 节点
text_to_sql: defineAsyncComponent( text_to_sql: defineAsyncComponent(
() => import('../panels/TextToSqlPanel.vue'), () => import('../panels/TextToSqlPanel.vue'),
@@ -27,17 +27,13 @@ import {
Database, Database,
DatabaseBackup, DatabaseBackup,
DatabaseZap, DatabaseZap,
FilePlus,
FileText,
Fullscreen, Fullscreen,
GitBranch, GitBranch,
GitFork, GitFork,
Globe, Globe,
HelpCircle, HelpCircle,
LayoutDashboard,
LayoutTemplate, LayoutTemplate,
ListChecks, ListChecks,
Map,
MessageSquareMore, MessageSquareMore,
MessageSquareText, MessageSquareText,
Minus, Minus,
@@ -47,14 +43,10 @@ import {
RefreshCw, RefreshCw,
Save, Save,
Search, Search,
Send,
Settings,
Snowflake, Snowflake,
Square, Square,
TableProperties,
Trash2, Trash2,
Undo2, Undo2,
Upload,
Workflow, Workflow,
} from '@vben/icons'; } from '@vben/icons';
import { $t } from '@vben/locales'; import { $t } from '@vben/locales';
@@ -84,32 +76,16 @@ import ContextMenu from './components/ContextMenu.vue';
import Panel from './components/Panel.vue'; import Panel from './components/Panel.vue';
import VersionHistoryPanel from './components/VersionHistoryPanel.vue'; import VersionHistoryPanel from './components/VersionHistoryPanel.vue';
import AddButtonEdge from './edges/AddButtonEdge.vue'; import AddButtonEdge from './edges/AddButtonEdge.vue';
import AppCreateNode from './nodes/AppCreateNode.vue';
import AppDesignNode from './nodes/AppDesignNode.vue';
import AppSettingsNode from './nodes/AppSettingsNode.vue';
import AppUpdateNode from './nodes/AppUpdateNode.vue';
import ChoiceNode from './nodes/ChoiceNode.vue'; import ChoiceNode from './nodes/ChoiceNode.vue';
import CodeNode from './nodes/CodeNode.vue'; import CodeNode from './nodes/CodeNode.vue';
import ConditionNode from './nodes/ConditionNode.vue'; import ConditionNode from './nodes/ConditionNode.vue';
import ConfirmNode from './nodes/ConfirmNode.vue'; import ConfirmNode from './nodes/ConfirmNode.vue';
import DashboardBasicInfoNode from './nodes/DashboardBasicInfoNode.vue';
import DashboardCreateNode from './nodes/DashboardCreateNode.vue';
import DashboardDesignNode from './nodes/DashboardDesignNode.vue';
import DashboardPublishNode from './nodes/DashboardPublishNode.vue';
import DbDeleteNode from './nodes/DbDeleteNode.vue'; import DbDeleteNode from './nodes/DbDeleteNode.vue';
import DbInsertNode from './nodes/DbInsertNode.vue'; import DbInsertNode from './nodes/DbInsertNode.vue';
import DbQueryNode from './nodes/DbQueryNode.vue'; import DbQueryNode from './nodes/DbQueryNode.vue';
import DbSqlNode from './nodes/DbSqlNode.vue'; import DbSqlNode from './nodes/DbSqlNode.vue';
import DbUpdateNode from './nodes/DbUpdateNode.vue'; import DbUpdateNode from './nodes/DbUpdateNode.vue';
import EndNode from './nodes/EndNode.vue'; import EndNode from './nodes/EndNode.vue';
import FormBasicInfoNode from './nodes/FormBasicInfoNode.vue';
import FormCreateNode from './nodes/FormCreateNode.vue';
import FormDatabaseCreateNode from './nodes/FormDatabaseCreateNode.vue';
import FormDatabaseDesignNode from './nodes/FormDatabaseDesignNode.vue';
import FormDataNode from './nodes/FormDataNode.vue';
import FormListDesignNode from './nodes/FormListDesignNode.vue';
import FormPublishNode from './nodes/FormPublishNode.vue';
import FormUIDesignNode from './nodes/FormUIDesignNode.vue';
import HttpNode from './nodes/HttpNode.vue'; import HttpNode from './nodes/HttpNode.vue';
import IntentNode from './nodes/IntentNode.vue'; import IntentNode from './nodes/IntentNode.vue';
import KnowledgeRetrievalNode from './nodes/KnowledgeRetrievalNode.vue'; import KnowledgeRetrievalNode from './nodes/KnowledgeRetrievalNode.vue';
@@ -118,6 +94,7 @@ import LoopNode from './nodes/LoopNode.vue';
import MergeNode from './nodes/MergeNode.vue'; import MergeNode from './nodes/MergeNode.vue';
import MessageNode from './nodes/MessageNode.vue'; import MessageNode from './nodes/MessageNode.vue';
import ParallelNode from './nodes/ParallelNode.vue'; import ParallelNode from './nodes/ParallelNode.vue';
import PrunedNode from './nodes/PrunedNode.vue';
import QuestionNode from './nodes/QuestionNode.vue'; import QuestionNode from './nodes/QuestionNode.vue';
import SnowflakeCortexAnalystNode from './nodes/SnowflakeCortexAnalystNode.vue'; import SnowflakeCortexAnalystNode from './nodes/SnowflakeCortexAnalystNode.vue';
import SnowflakeCortexLLMNode from './nodes/SnowflakeCortexLLMNode.vue'; import SnowflakeCortexLLMNode from './nodes/SnowflakeCortexLLMNode.vue';
@@ -184,35 +161,33 @@ const nodeTypes = {
snowflake_cortex_analyst: markRaw(SnowflakeCortexAnalystNode), snowflake_cortex_analyst: markRaw(SnowflakeCortexAnalystNode),
// 循环节点 // 循环节点
loop: markRaw(LoopNode), loop: markRaw(LoopNode),
// 表单节点 // 轻量版兼容旧工作流中的在线开发节点,不再加载原表单/应用/仪表盘组件
form_basic_info: markRaw(FormBasicInfoNode), form_basic_info: markRaw(PrunedNode),
form_database_design: markRaw(FormDatabaseDesignNode), form_database_design: markRaw(PrunedNode),
form_database_create: markRaw(FormDatabaseCreateNode), form_database_create: markRaw(PrunedNode),
form_ui_design: markRaw(FormUIDesignNode), form_ui_design: markRaw(PrunedNode),
form_list_design: markRaw(FormListDesignNode), form_list_design: markRaw(PrunedNode),
form_create: markRaw(FormCreateNode), form_create: markRaw(PrunedNode),
form_publish: markRaw(FormPublishNode), form_publish: markRaw(PrunedNode),
// 应用管理节点 app_create: markRaw(PrunedNode),
app_create: markRaw(AppCreateNode), app_design: markRaw(PrunedNode),
app_design: markRaw(AppDesignNode), app_settings: markRaw(PrunedNode),
app_settings: markRaw(AppSettingsNode), app_update: markRaw(PrunedNode),
app_update: markRaw(AppUpdateNode), dashboard_basic_info: markRaw(PrunedNode),
// 仪表盘节点 dashboard_design: markRaw(PrunedNode),
dashboard_basic_info: markRaw(DashboardBasicInfoNode), dashboard_create: markRaw(PrunedNode),
dashboard_design: markRaw(DashboardDesignNode), dashboard_publish: markRaw(PrunedNode),
dashboard_create: markRaw(DashboardCreateNode),
dashboard_publish: markRaw(DashboardPublishNode),
// 系统总结节点 // 系统总结节点
system_summary: markRaw(SystemSummaryNode), system_summary: markRaw(SystemSummaryNode),
// 子流程节点 // 子流程节点
subflow: markRaw(SubflowNode), subflow: markRaw(SubflowNode),
// 表单数据节点 // 表单数据节点在轻量版中仅保留旧工作流渲染兼容
form_data_create: markRaw(FormDataNode), form_data_create: markRaw(PrunedNode),
form_data_read: markRaw(FormDataNode), form_data_read: markRaw(PrunedNode),
form_data_update: markRaw(FormDataNode), form_data_update: markRaw(PrunedNode),
form_data_delete: markRaw(FormDataNode), form_data_delete: markRaw(PrunedNode),
form_data_list: markRaw(FormDataNode), form_data_list: markRaw(PrunedNode),
form_schema_to_llm: markRaw(FormDataNode), form_schema_to_llm: markRaw(PrunedNode),
// Text-to-SQL 节点 // Text-to-SQL 节点
text_to_sql: markRaw(TextToSqlNode), text_to_sql: markRaw(TextToSqlNode),
// 知识库节点 // 知识库节点
@@ -390,94 +365,6 @@ const nodeCategories = computed(() => [
}, },
], ],
}, },
{
name: $t('ai-platform.workflow.editor.categories.formDesign'),
nodes: [
{
type: 'form_basic_info',
label: getNodeLabel('form_basic_info'),
icon: 'FileText',
color: 'purple',
},
{
type: 'form_database_design',
label: getNodeLabel('form_database_design'),
icon: 'Database',
color: 'purple',
},
{
type: 'form_database_create',
label: getNodeLabel('form_database_create'),
icon: 'DatabaseZap',
color: 'purple',
},
{
type: 'form_ui_design',
label: getNodeLabel('form_ui_design'),
icon: 'LayoutTemplate',
color: 'purple',
},
{
type: 'form_list_design',
label: getNodeLabel('form_list_design'),
icon: 'TableProperties',
color: 'purple',
},
{
type: 'form_create',
label: getNodeLabel('form_create'),
icon: 'FilePlus',
color: 'purple',
},
{
type: 'form_publish',
label: getNodeLabel('form_publish'),
icon: 'Send',
color: 'purple',
},
],
},
{
name: $t('ai-platform.workflow.editor.categories.formData'),
nodes: [
{
type: 'form_data_create',
label: getNodeLabel('form_data_create'),
icon: 'FilePlus',
color: 'green',
},
{
type: 'form_data_read',
label: getNodeLabel('form_data_read'),
icon: 'FileText',
color: 'blue',
},
{
type: 'form_data_update',
label: getNodeLabel('form_data_update'),
icon: 'FileText',
color: 'orange',
},
{
type: 'form_data_delete',
label: getNodeLabel('form_data_delete'),
icon: 'Trash2',
color: 'red',
},
{
type: 'form_data_list',
label: getNodeLabel('form_data_list'),
icon: 'Search',
color: 'blue',
},
{
type: 'form_schema_to_llm',
label: getNodeLabel('form_schema_to_llm'),
icon: 'Code',
color: 'purple',
},
],
},
{ {
name: $t('ai-platform.workflow.editor.categories.dialog'), name: $t('ai-platform.workflow.editor.categories.dialog'),
nodes: [ nodes: [
@@ -587,6 +474,12 @@ const nodeCategories = computed(() => [
icon: 'Workflow', icon: 'Workflow',
color: 'purple', color: 'purple',
}, },
{
type: 'system_summary',
label: getNodeLabel('system_summary'),
icon: 'ClipboardCheck',
color: 'purple',
},
{ {
type: 'end', type: 'end',
label: getNodeLabel('end'), label: getNodeLabel('end'),
@@ -612,72 +505,6 @@ const nodeCategories = computed(() => [
}, },
], ],
}, },
{
name: $t('ai-platform.workflow.editor.categories.appManage'),
nodes: [
{
type: 'app_create',
label: getNodeLabel('app_create'),
icon: 'LayoutTemplate',
color: 'indigo',
},
{
type: 'app_design',
label: getNodeLabel('app_design'),
icon: 'LayoutDashboard',
color: 'indigo',
},
{
type: 'app_settings',
label: getNodeLabel('app_settings'),
icon: 'Settings',
color: 'indigo',
},
{
type: 'app_update',
label: getNodeLabel('app_update'),
icon: 'Save',
color: 'indigo',
},
],
},
{
name: $t('ai-platform.workflow.editor.categories.dashboard'),
icon: 'LayoutDashboard',
color: 'cyan',
nodes: [
{
type: 'dashboard_basic_info',
label: getNodeLabel('dashboard_basic_info'),
icon: 'FileText',
color: 'cyan',
},
{
type: 'dashboard_design',
label: getNodeLabel('dashboard_design'),
icon: 'LayoutDashboard',
color: 'cyan',
},
{
type: 'dashboard_create',
label: getNodeLabel('dashboard_create'),
icon: 'FilePlus',
color: 'cyan',
},
{
type: 'dashboard_publish',
label: getNodeLabel('dashboard_publish'),
icon: 'Upload',
color: 'cyan',
},
{
type: 'system_summary',
label: getNodeLabel('system_summary'),
icon: 'ClipboardCheck',
color: 'cyan',
},
],
},
{ {
name: $t('ai-platform.workflow.editor.categories.knowledge'), name: $t('ai-platform.workflow.editor.categories.knowledge'),
nodes: [ nodes: [
@@ -0,0 +1,24 @@
<script setup lang="ts">
import { EyeOff } from '@vben/icons';
import BaseNode from './BaseNode.vue';
defineProps<{
data: any;
id: string;
selected?: boolean;
type: string;
}>();
</script>
<template>
<BaseNode
:node-id="id"
:selected="selected"
:label="data.label || type"
:node-type="type"
>
<template #icon><EyeOff class="size-5" /></template>
<template #desc>轻量版已隐藏该在线开发节点</template>
</BaseNode>
</template>
@@ -0,0 +1,23 @@
<script setup lang="ts">
import { computed } from 'vue';
const props = defineProps<{
data?: Record<string, any>;
nodeType?: string;
}>();
const configJson = computed(() =>
JSON.stringify(props.data || {}, null, 2),
);
</script>
<template>
<div class="space-y-3">
<div class="text-muted-foreground text-sm">
该节点属于在线开发能力当前轻量版只保留历史查看和运行兼容
</div>
<pre
class="bg-muted/50 border-border max-h-[480px] overflow-auto rounded border p-3 text-xs leading-relaxed"
>{{ configJson }}</pre>
</div>
</template>
@@ -1,32 +1,16 @@
import { markRaw } from 'vue'; import { markRaw } from 'vue';
import AddButtonEdge from '../editor/edges/AddButtonEdge.vue'; import AddButtonEdge from '../editor/edges/AddButtonEdge.vue';
import AppCreateNode from '../editor/nodes/AppCreateNode.vue';
import AppDesignNode from '../editor/nodes/AppDesignNode.vue';
import AppSettingsNode from '../editor/nodes/AppSettingsNode.vue';
import AppUpdateNode from '../editor/nodes/AppUpdateNode.vue';
import ChoiceNode from '../editor/nodes/ChoiceNode.vue'; import ChoiceNode from '../editor/nodes/ChoiceNode.vue';
import CodeNode from '../editor/nodes/CodeNode.vue'; import CodeNode from '../editor/nodes/CodeNode.vue';
import ConditionNode from '../editor/nodes/ConditionNode.vue'; import ConditionNode from '../editor/nodes/ConditionNode.vue';
import ConfirmNode from '../editor/nodes/ConfirmNode.vue'; import ConfirmNode from '../editor/nodes/ConfirmNode.vue';
import DashboardBasicInfoNode from '../editor/nodes/DashboardBasicInfoNode.vue';
import DashboardCreateNode from '../editor/nodes/DashboardCreateNode.vue';
import DashboardDesignNode from '../editor/nodes/DashboardDesignNode.vue';
import DashboardPublishNode from '../editor/nodes/DashboardPublishNode.vue';
import DbDeleteNode from '../editor/nodes/DbDeleteNode.vue'; import DbDeleteNode from '../editor/nodes/DbDeleteNode.vue';
import DbInsertNode from '../editor/nodes/DbInsertNode.vue'; import DbInsertNode from '../editor/nodes/DbInsertNode.vue';
import DbQueryNode from '../editor/nodes/DbQueryNode.vue'; import DbQueryNode from '../editor/nodes/DbQueryNode.vue';
import DbSqlNode from '../editor/nodes/DbSqlNode.vue'; import DbSqlNode from '../editor/nodes/DbSqlNode.vue';
import DbUpdateNode from '../editor/nodes/DbUpdateNode.vue'; import DbUpdateNode from '../editor/nodes/DbUpdateNode.vue';
import EndNode from '../editor/nodes/EndNode.vue'; import EndNode from '../editor/nodes/EndNode.vue';
import FormBasicInfoNode from '../editor/nodes/FormBasicInfoNode.vue';
import FormCreateNode from '../editor/nodes/FormCreateNode.vue';
import FormDatabaseCreateNode from '../editor/nodes/FormDatabaseCreateNode.vue';
import FormDatabaseDesignNode from '../editor/nodes/FormDatabaseDesignNode.vue';
import FormDataNode from '../editor/nodes/FormDataNode.vue';
import FormListDesignNode from '../editor/nodes/FormListDesignNode.vue';
import FormPublishNode from '../editor/nodes/FormPublishNode.vue';
import FormUIDesignNode from '../editor/nodes/FormUIDesignNode.vue';
import HttpNode from '../editor/nodes/HttpNode.vue'; import HttpNode from '../editor/nodes/HttpNode.vue';
import IntentNode from '../editor/nodes/IntentNode.vue'; import IntentNode from '../editor/nodes/IntentNode.vue';
import KnowledgeRetrievalNode from '../editor/nodes/KnowledgeRetrievalNode.vue'; import KnowledgeRetrievalNode from '../editor/nodes/KnowledgeRetrievalNode.vue';
@@ -35,6 +19,7 @@ import LoopNode from '../editor/nodes/LoopNode.vue';
import MergeNode from '../editor/nodes/MergeNode.vue'; import MergeNode from '../editor/nodes/MergeNode.vue';
import MessageNode from '../editor/nodes/MessageNode.vue'; import MessageNode from '../editor/nodes/MessageNode.vue';
import ParallelNode from '../editor/nodes/ParallelNode.vue'; import ParallelNode from '../editor/nodes/ParallelNode.vue';
import PrunedNode from '../editor/nodes/PrunedNode.vue';
import QuestionNode from '../editor/nodes/QuestionNode.vue'; import QuestionNode from '../editor/nodes/QuestionNode.vue';
import SnowflakeCortexAnalystNode from '../editor/nodes/SnowflakeCortexAnalystNode.vue'; import SnowflakeCortexAnalystNode from '../editor/nodes/SnowflakeCortexAnalystNode.vue';
import SnowflakeCortexLLMNode from '../editor/nodes/SnowflakeCortexLLMNode.vue'; import SnowflakeCortexLLMNode from '../editor/nodes/SnowflakeCortexLLMNode.vue';
@@ -67,29 +52,29 @@ export const workflowNodeTypes = {
snowflake_cortex_llm: markRaw(SnowflakeCortexLLMNode), snowflake_cortex_llm: markRaw(SnowflakeCortexLLMNode),
snowflake_cortex_analyst: markRaw(SnowflakeCortexAnalystNode), snowflake_cortex_analyst: markRaw(SnowflakeCortexAnalystNode),
loop: markRaw(LoopNode), loop: markRaw(LoopNode),
form_basic_info: markRaw(FormBasicInfoNode), form_basic_info: markRaw(PrunedNode),
form_database_design: markRaw(FormDatabaseDesignNode), form_database_design: markRaw(PrunedNode),
form_database_create: markRaw(FormDatabaseCreateNode), form_database_create: markRaw(PrunedNode),
form_ui_design: markRaw(FormUIDesignNode), form_ui_design: markRaw(PrunedNode),
form_list_design: markRaw(FormListDesignNode), form_list_design: markRaw(PrunedNode),
form_create: markRaw(FormCreateNode), form_create: markRaw(PrunedNode),
form_publish: markRaw(FormPublishNode), form_publish: markRaw(PrunedNode),
app_create: markRaw(AppCreateNode), app_create: markRaw(PrunedNode),
app_design: markRaw(AppDesignNode), app_design: markRaw(PrunedNode),
app_settings: markRaw(AppSettingsNode), app_settings: markRaw(PrunedNode),
app_update: markRaw(AppUpdateNode), app_update: markRaw(PrunedNode),
dashboard_basic_info: markRaw(DashboardBasicInfoNode), dashboard_basic_info: markRaw(PrunedNode),
dashboard_design: markRaw(DashboardDesignNode), dashboard_design: markRaw(PrunedNode),
dashboard_create: markRaw(DashboardCreateNode), dashboard_create: markRaw(PrunedNode),
dashboard_publish: markRaw(DashboardPublishNode), dashboard_publish: markRaw(PrunedNode),
system_summary: markRaw(SystemSummaryNode), system_summary: markRaw(SystemSummaryNode),
subflow: markRaw(SubflowNode), subflow: markRaw(SubflowNode),
form_data_create: markRaw(FormDataNode), form_data_create: markRaw(PrunedNode),
form_data_read: markRaw(FormDataNode), form_data_read: markRaw(PrunedNode),
form_data_update: markRaw(FormDataNode), form_data_update: markRaw(PrunedNode),
form_data_delete: markRaw(FormDataNode), form_data_delete: markRaw(PrunedNode),
form_data_list: markRaw(FormDataNode), form_data_list: markRaw(PrunedNode),
form_schema_to_llm: markRaw(FormDataNode), form_schema_to_llm: markRaw(PrunedNode),
text_to_sql: markRaw(TextToSqlNode), text_to_sql: markRaw(TextToSqlNode),
knowledge_retrieval: markRaw(KnowledgeRetrievalNode), knowledge_retrieval: markRaw(KnowledgeRetrievalNode),
}; };