feat: restore lightweight control center
This commit is contained in:
@@ -17,7 +17,7 @@ from core.menu.schema import MenuCreate, MenuUpdate
|
||||
menu_cache = CacheManager(prefix="menu:")
|
||||
|
||||
# 缓存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}"
|
||||
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:
|
||||
"""Route the retained control center to the AI agent workspace."""
|
||||
"""Keep the retained control center on the lightweight admin dashboard."""
|
||||
if menu.name == "ControlCenter":
|
||||
menu.path = "/ai-platform/agent"
|
||||
menu.component = "ai-platform/agent/index"
|
||||
menu.path = "/page-render/main_home"
|
||||
menu.component = "_core/page-render/index"
|
||||
menu.query = None
|
||||
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ export const overridesPreferences = defineOverridesPreferences({
|
||||
enablePreferences: false,
|
||||
accessMode: 'mixed',
|
||||
authPageLayout: 'panel-center',
|
||||
defaultHomePath: '/ai-platform/agent',
|
||||
defaultHomePath: '/page-render/main_home',
|
||||
layout: 'header-sidebar-nav',
|
||||
preferencesButtonPosition: 'header',
|
||||
},
|
||||
|
||||
@@ -168,6 +168,7 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) {
|
||||
'../views/_core/fallback/**/*.vue',
|
||||
'../views/_core/file-preview/index.vue',
|
||||
'../views/_core/menu/index.vue',
|
||||
'../views/_core/page-render/index.vue',
|
||||
'../views/_core/permission/index.vue',
|
||||
'../views/_core/role/index.vue',
|
||||
'../views/_core/user/index.vue',
|
||||
|
||||
@@ -8,6 +8,7 @@ export const LIGHT_MENU_NAMES = new Set([
|
||||
'AnnouncementList',
|
||||
'AnnouncementManage',
|
||||
'KnowledgeBase',
|
||||
'PageRenderMainHome',
|
||||
'SystemManagement',
|
||||
'SystemMenu',
|
||||
'SystemPermission',
|
||||
@@ -23,6 +24,7 @@ const LIGHT_ROUTE_PATH_PREFIXES = [
|
||||
'/ai-platform/workflow',
|
||||
'/ai-platform/workflow-runs',
|
||||
'/message/announcement',
|
||||
'/page-render/main_home',
|
||||
'/system/menu',
|
||||
'/system/new-permission',
|
||||
'/system/role',
|
||||
|
||||
@@ -5,7 +5,16 @@ const routes: RouteRecordRaw[] = [
|
||||
meta: { hideInMenu: true },
|
||||
name: 'ControlCenterLegacyRedirect',
|
||||
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 },
|
||||
|
||||
@@ -3,7 +3,6 @@ import { preferences } from '@vben/preferences';
|
||||
const LEGACY_HOME_PATTERNS = [
|
||||
/^\/app\/[^/]+\/page-render\//,
|
||||
/^\/app\/[^/]+\/form-render\//,
|
||||
/^\/page-render\//,
|
||||
/^\/form-render\//,
|
||||
];
|
||||
|
||||
|
||||
@@ -1,20 +1,27 @@
|
||||
<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 { 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' });
|
||||
|
||||
const route = useRoute();
|
||||
const DashboardRenderer = defineAsyncComponent(
|
||||
() => import('#/components/dashboard-design/DashboardRenderer.vue'),
|
||||
);
|
||||
const loading = ref(false);
|
||||
const pageConfig = ref<string>('');
|
||||
const pageName = ref('');
|
||||
const pageCode = ref('');
|
||||
|
||||
const builtinPages: Record<string, Component> = {
|
||||
main_home: defineAsyncComponent(() => import('./AiAgentHome.vue')),
|
||||
};
|
||||
const currentBuiltinPage = computed(() => builtinPages[pageCode.value]);
|
||||
|
||||
// 获取页面编码
|
||||
function getPageCode(): string {
|
||||
// 优先从 query 获取
|
||||
@@ -46,9 +53,19 @@ async function loadPageData() {
|
||||
}
|
||||
|
||||
pageCode.value = code;
|
||||
if (builtinPages[code]) {
|
||||
pageName.value = '控制中心';
|
||||
pageConfig.value = '';
|
||||
loading.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
loading.value = true;
|
||||
|
||||
try {
|
||||
const { getPageByCodeApi } = await import(
|
||||
'#/api/online-dev/page-manager'
|
||||
);
|
||||
const page = await getPageByCodeApi(code);
|
||||
pageName.value = page.name;
|
||||
pageConfig.value =
|
||||
@@ -78,7 +95,8 @@ watch(
|
||||
<template>
|
||||
<ElScrollbar class="rounded-[8px] py-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="暂无页面配置" />
|
||||
</div>
|
||||
</ElScrollbar>
|
||||
|
||||
Reference in New Issue
Block a user