feat: restore lightweight control center

This commit is contained in:
2026-06-13 09:04:53 +08:00
parent 2d902cd01e
commit ff9dcdd4e1
7 changed files with 41 additions and 12 deletions
+4 -4
View File
@@ -17,7 +17,7 @@ from core.menu.schema import MenuCreate, MenuUpdate
menu_cache = CacheManager(prefix="menu:") menu_cache = CacheManager(prefix="menu:")
# 缓存key # 缓存key
AI_AGENT_ADMIN_MENU_CACHE_VERSION = "v10" AI_AGENT_ADMIN_MENU_CACHE_VERSION = "v11"
MENU_TREE_CACHE_KEY = f"tree:ai_agent_admin:{AI_AGENT_ADMIN_MENU_CACHE_VERSION}" MENU_TREE_CACHE_KEY = f"tree:ai_agent_admin:{AI_AGENT_ADMIN_MENU_CACHE_VERSION}"
USER_ROUTE_CACHE_PREFIX = f"user_route:ai_agent_admin:{AI_AGENT_ADMIN_MENU_CACHE_VERSION}:" USER_ROUTE_CACHE_PREFIX = f"user_route:ai_agent_admin:{AI_AGENT_ADMIN_MENU_CACHE_VERSION}:"
@@ -48,10 +48,10 @@ def _filter_ai_agent_admin_menus(menus: List[Menu]) -> List[Menu]:
def _normalize_ai_agent_admin_menu(menu: Menu) -> None: def _normalize_ai_agent_admin_menu(menu: Menu) -> None:
"""Route the retained control center to the AI agent workspace.""" """Keep the retained control center on the lightweight admin dashboard."""
if menu.name == "ControlCenter": if menu.name == "ControlCenter":
menu.path = "/ai-platform/agent" menu.path = "/page-render/main_home"
menu.component = "ai-platform/agent/index" menu.component = "_core/page-render/index"
menu.query = None menu.query = None
+1 -1
View File
@@ -16,7 +16,7 @@ export const overridesPreferences = defineOverridesPreferences({
enablePreferences: false, enablePreferences: false,
accessMode: 'mixed', accessMode: 'mixed',
authPageLayout: 'panel-center', authPageLayout: 'panel-center',
defaultHomePath: '/ai-platform/agent', defaultHomePath: '/page-render/main_home',
layout: 'header-sidebar-nav', layout: 'header-sidebar-nav',
preferencesButtonPosition: 'header', preferencesButtonPosition: 'header',
}, },
+1
View File
@@ -168,6 +168,7 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) {
'../views/_core/fallback/**/*.vue', '../views/_core/fallback/**/*.vue',
'../views/_core/file-preview/index.vue', '../views/_core/file-preview/index.vue',
'../views/_core/menu/index.vue', '../views/_core/menu/index.vue',
'../views/_core/page-render/index.vue',
'../views/_core/permission/index.vue', '../views/_core/permission/index.vue',
'../views/_core/role/index.vue', '../views/_core/role/index.vue',
'../views/_core/user/index.vue', '../views/_core/user/index.vue',
@@ -8,6 +8,7 @@ export const LIGHT_MENU_NAMES = new Set([
'AnnouncementList', 'AnnouncementList',
'AnnouncementManage', 'AnnouncementManage',
'KnowledgeBase', 'KnowledgeBase',
'PageRenderMainHome',
'SystemManagement', 'SystemManagement',
'SystemMenu', 'SystemMenu',
'SystemPermission', 'SystemPermission',
@@ -23,6 +24,7 @@ const LIGHT_ROUTE_PATH_PREFIXES = [
'/ai-platform/workflow', '/ai-platform/workflow',
'/ai-platform/workflow-runs', '/ai-platform/workflow-runs',
'/message/announcement', '/message/announcement',
'/page-render/main_home',
'/system/menu', '/system/menu',
'/system/new-permission', '/system/new-permission',
'/system/role', '/system/role',
@@ -5,7 +5,16 @@ const routes: RouteRecordRaw[] = [
meta: { hideInMenu: true }, meta: { hideInMenu: true },
name: 'ControlCenterLegacyRedirect', name: 'ControlCenterLegacyRedirect',
path: '/control-center', path: '/control-center',
redirect: '/ai-platform/agent', redirect: '/page-render/main_home',
},
{
meta: {
hideInMenu: true,
title: '控制中心',
},
name: 'PageRenderMainHome',
path: '/page-render/main_home',
component: () => import('#/views/_core/page-render/index.vue'),
}, },
{ {
meta: { hideInMenu: true }, meta: { hideInMenu: true },
@@ -3,7 +3,6 @@ import { preferences } from '@vben/preferences';
const LEGACY_HOME_PATTERNS = [ const LEGACY_HOME_PATTERNS = [
/^\/app\/[^/]+\/page-render\//, /^\/app\/[^/]+\/page-render\//,
/^\/app\/[^/]+\/form-render\//, /^\/app\/[^/]+\/form-render\//,
/^\/page-render\//,
/^\/form-render\//, /^\/form-render\//,
]; ];
@@ -1,20 +1,27 @@
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, ref, watch } from 'vue'; import type { Component } from 'vue';
import { computed, defineAsyncComponent, onMounted, ref, watch } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { ElEmpty, ElMessage, ElScrollbar } from 'element-plus'; import { ElEmpty, ElMessage, ElScrollbar } from 'element-plus';
import { getPageByCodeApi } from '#/api/online-dev/page-manager';
import DashboardRenderer from '#/components/dashboard-design/DashboardRenderer.vue';
defineOptions({ name: 'PageRender' }); defineOptions({ name: 'PageRender' });
const route = useRoute(); const route = useRoute();
const DashboardRenderer = defineAsyncComponent(
() => import('#/components/dashboard-design/DashboardRenderer.vue'),
);
const loading = ref(false); const loading = ref(false);
const pageConfig = ref<string>(''); const pageConfig = ref<string>('');
const pageName = ref(''); const pageName = ref('');
const pageCode = ref(''); const pageCode = ref('');
const builtinPages: Record<string, Component> = {
main_home: defineAsyncComponent(() => import('./AiAgentHome.vue')),
};
const currentBuiltinPage = computed(() => builtinPages[pageCode.value]);
// 获取页面编码 // 获取页面编码
function getPageCode(): string { function getPageCode(): string {
// 优先从 query 获取 // 优先从 query 获取
@@ -46,9 +53,19 @@ async function loadPageData() {
} }
pageCode.value = code; pageCode.value = code;
if (builtinPages[code]) {
pageName.value = '控制中心';
pageConfig.value = '';
loading.value = false;
return;
}
loading.value = true; loading.value = true;
try { try {
const { getPageByCodeApi } = await import(
'#/api/online-dev/page-manager'
);
const page = await getPageByCodeApi(code); const page = await getPageByCodeApi(code);
pageName.value = page.name; pageName.value = page.name;
pageConfig.value = pageConfig.value =
@@ -78,7 +95,8 @@ watch(
<template> <template>
<ElScrollbar class="rounded-[8px] py-3"> <ElScrollbar class="rounded-[8px] py-3">
<div v-loading="loading" class="h-[calc(100vh-120px)] rounded-[8px] px-3"> <div v-loading="loading" class="h-[calc(100vh-120px)] rounded-[8px] px-3">
<DashboardRenderer v-if="pageConfig" :config="pageConfig" /> <component :is="currentBuiltinPage" v-if="currentBuiltinPage" />
<DashboardRenderer v-else-if="pageConfig" :config="pageConfig" />
<ElEmpty v-else-if="!loading" description="暂无页面配置" /> <ElEmpty v-else-if="!loading" description="暂无页面配置" />
</div> </div>
</ElScrollbar> </ElScrollbar>