From 1404c2ddc5b82a750045bc062690015830171bf1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E5=AD=90=E9=BB=98?= <925456043@qq.com>
Date: Tue, 28 Jul 2026 12:23:20 +0800
Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=B7=A5=E4=BD=9C?=
=?UTF-8?q?=E6=B5=81=E4=B8=8E=E6=99=BA=E8=83=BD=E4=BD=93=E7=BC=96=E6=8E=92?=
=?UTF-8?q?=E7=95=8C=E9=9D=A2=E6=80=A7=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 使用登录态独立全屏壳层承载编排页面
- 保留鉴权、锁屏、水印及原有设计器功能
- 增加独立路由回归测试
---
.../layouts/AuthenticatedStandaloneLayout.vue | 75 +++++++++++++++++++
.../__tests__/agent-design-route.test.ts | 28 +++++++
.../__tests__/workflow-design-route.test.ts | 23 ++++++
.../router/routes/external/agent-design.ts | 23 ++++++
.../app/src/router/routes/modules/agent.ts | 15 +---
.../app/src/router/routes/modules/workflow.ts | 6 +-
.../ai/agents/AgentDesignerStandaloneView.vue | 11 +++
.../workflow/WorkflowDesignStandaloneView.vue | 31 ++++++++
8 files changed, 197 insertions(+), 15 deletions(-)
create mode 100644 easyflow-ui-admin/app/src/layouts/AuthenticatedStandaloneLayout.vue
create mode 100644 easyflow-ui-admin/app/src/router/__tests__/agent-design-route.test.ts
create mode 100644 easyflow-ui-admin/app/src/router/__tests__/workflow-design-route.test.ts
create mode 100644 easyflow-ui-admin/app/src/router/routes/external/agent-design.ts
create mode 100644 easyflow-ui-admin/app/src/views/ai/agents/AgentDesignerStandaloneView.vue
create mode 100644 easyflow-ui-admin/app/src/views/ai/workflow/WorkflowDesignStandaloneView.vue
diff --git a/easyflow-ui-admin/app/src/layouts/AuthenticatedStandaloneLayout.vue b/easyflow-ui-admin/app/src/layouts/AuthenticatedStandaloneLayout.vue
new file mode 100644
index 00000000..0c9b3ba1
--- /dev/null
+++ b/easyflow-ui-admin/app/src/layouts/AuthenticatedStandaloneLayout.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
diff --git a/easyflow-ui-admin/app/src/router/__tests__/agent-design-route.test.ts b/easyflow-ui-admin/app/src/router/__tests__/agent-design-route.test.ts
new file mode 100644
index 00000000..e49afce6
--- /dev/null
+++ b/easyflow-ui-admin/app/src/router/__tests__/agent-design-route.test.ts
@@ -0,0 +1,28 @@
+import { describe, expect, it } from 'vitest';
+
+import agentDesignRoutes from '../routes/external/agent-design';
+import agentRoutes from '../routes/modules/agent';
+
+describe('agent design route', () => {
+ it('keeps the standalone designer outside dynamic menu routes', () => {
+ const designRoute = agentDesignRoutes.find(
+ (route) => route.name === 'AgentDesigner',
+ );
+
+ expect(agentRoutes.some((route) => route.name === 'AgentDesigner')).toBe(
+ false,
+ );
+ expect(designRoute).toBeDefined();
+ expect(designRoute?.path).toBe('/ai/agents/designer/:id');
+ expect(designRoute?.meta).toMatchObject({
+ activePath: '/ai/agents',
+ hideInBreadcrumb: true,
+ hideInMenu: true,
+ hideInTab: true,
+ noBasicLayout: true,
+ openInNewWindow: true,
+ });
+ expect(designRoute?.meta?.ignoreAccess).not.toBe(true);
+ expect(designRoute?.component).toBeTypeOf('function');
+ });
+});
diff --git a/easyflow-ui-admin/app/src/router/__tests__/workflow-design-route.test.ts b/easyflow-ui-admin/app/src/router/__tests__/workflow-design-route.test.ts
new file mode 100644
index 00000000..b60a894d
--- /dev/null
+++ b/easyflow-ui-admin/app/src/router/__tests__/workflow-design-route.test.ts
@@ -0,0 +1,23 @@
+import { describe, expect, it } from 'vitest';
+
+import workflowRoutes from '../routes/modules/workflow';
+
+describe('workflow design route', () => {
+ it('uses the authenticated standalone shell without exposing a menu or tab', () => {
+ const designRoute = workflowRoutes.find(
+ (route) => route.name === 'WorkflowDesign',
+ );
+
+ expect(designRoute).toBeDefined();
+ expect(designRoute?.path).toBe('/ai/workflow/design');
+ expect(designRoute?.meta).toMatchObject({
+ activePath: '/ai/workflow',
+ hideInBreadcrumb: true,
+ hideInMenu: true,
+ hideInTab: true,
+ noBasicLayout: true,
+ });
+ expect(designRoute?.meta?.ignoreAccess).not.toBe(true);
+ expect(designRoute?.component).toBeTypeOf('function');
+ });
+});
diff --git a/easyflow-ui-admin/app/src/router/routes/external/agent-design.ts b/easyflow-ui-admin/app/src/router/routes/external/agent-design.ts
new file mode 100644
index 00000000..15902691
--- /dev/null
+++ b/easyflow-ui-admin/app/src/router/routes/external/agent-design.ts
@@ -0,0 +1,23 @@
+import type { RouteRecordRaw } from 'vue-router';
+
+import { $t } from '#/locales';
+
+const routes: RouteRecordRaw[] = [
+ {
+ name: 'AgentDesigner',
+ path: '/ai/agents/designer/:id',
+ component: () =>
+ import('#/views/ai/agents/AgentDesignerStandaloneView.vue'),
+ meta: {
+ title: $t('menus.ai.agents'),
+ openInNewWindow: true,
+ hideInMenu: true,
+ hideInTab: true,
+ hideInBreadcrumb: true,
+ noBasicLayout: true,
+ activePath: '/ai/agents',
+ },
+ },
+];
+
+export default routes;
diff --git a/easyflow-ui-admin/app/src/router/routes/modules/agent.ts b/easyflow-ui-admin/app/src/router/routes/modules/agent.ts
index 16648870..e4c737bb 100644
--- a/easyflow-ui-admin/app/src/router/routes/modules/agent.ts
+++ b/easyflow-ui-admin/app/src/router/routes/modules/agent.ts
@@ -1,19 +1,6 @@
-import type {RouteRecordRaw} from 'vue-router';
-
-import {$t} from '#/locales';
+import type { RouteRecordRaw } from 'vue-router';
const routes: RouteRecordRaw[] = [
- {
- name: 'AgentDesigner',
- path: '/ai/agents/designer/:id',
- component: () => import('#/views/ai/agents/AgentDesigner.vue'),
- meta: {
- title: $t('menus.ai.agents'),
- openInNewWindow: true,
- hideInMenu: true,
- activePath: '/ai/agents',
- },
- },
{
name: 'AgentChat',
path: '/ai/agent-chat',
diff --git a/easyflow-ui-admin/app/src/router/routes/modules/workflow.ts b/easyflow-ui-admin/app/src/router/routes/modules/workflow.ts
index 8bce4f3b..808c47ce 100644
--- a/easyflow-ui-admin/app/src/router/routes/modules/workflow.ts
+++ b/easyflow-ui-admin/app/src/router/routes/modules/workflow.ts
@@ -8,11 +8,15 @@ const routes: RouteRecordRaw[] = [
icon: 'ant-design:apartment-outlined',
title: '工作流设计',
hideInMenu: true,
+ hideInTab: true,
+ hideInBreadcrumb: true,
+ noBasicLayout: true,
activePath: '/ai/workflow',
},
name: 'WorkflowDesign',
path: '/ai/workflow/design',
- component: () => import('#/views/ai/workflow/WorkflowDesign.vue'),
+ component: () =>
+ import('#/views/ai/workflow/WorkflowDesignStandaloneView.vue'),
},
{
meta: {
diff --git a/easyflow-ui-admin/app/src/views/ai/agents/AgentDesignerStandaloneView.vue b/easyflow-ui-admin/app/src/views/ai/agents/AgentDesignerStandaloneView.vue
new file mode 100644
index 00000000..60367294
--- /dev/null
+++ b/easyflow-ui-admin/app/src/views/ai/agents/AgentDesignerStandaloneView.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowDesignStandaloneView.vue b/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowDesignStandaloneView.vue
new file mode 100644
index 00000000..e2819d61
--- /dev/null
+++ b/easyflow-ui-admin/app/src/views/ai/workflow/WorkflowDesignStandaloneView.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+