fix: use ai admin dashboard home

This commit is contained in:
2026-06-11 09:59:56 +08:00
parent d652fc2bbd
commit 7c83edba1d
3 changed files with 258 additions and 4 deletions
@@ -38,10 +38,6 @@ const widgetComponents: Record<
'announcement-list': defineAsyncComponent( 'announcement-list': defineAsyncComponent(
() => import('./widgets/AnnouncementList.vue'), () => import('./widgets/AnnouncementList.vue'),
), ),
'approval-center': defineAsyncComponent(
() => import('./widgets/ApprovalCenter.vue'),
),
'my-apps': defineAsyncComponent(() => import('./widgets/MyApps.vue')),
'notice-list': defineAsyncComponent(() => import('./widgets/NoticeList.vue')), 'notice-list': defineAsyncComponent(() => import('./widgets/NoticeList.vue')),
'quick-links': defineAsyncComponent(() => import('./widgets/QuickLinks.vue')), 'quick-links': defineAsyncComponent(() => import('./widgets/QuickLinks.vue')),
'server-monitor': defineAsyncComponent( 'server-monitor': defineAsyncComponent(
@@ -0,0 +1,246 @@
import type { DashboardConfig } from '#/components/dashboard-design';
const AI_AGENT_HOME_CODE = 'main_home';
const widgetStyle = {
backgroundColor: '',
borderColor: '',
borderRadius: 8,
borderStyle: 'solid',
borderWidth: 0,
padding: 16,
shadowBlur: 4,
shadowColor: 'rgba(0, 0, 0, 0.1)',
shadowEnabled: true,
shadowOffsetX: 0,
shadowOffsetY: 1,
titleAlign: 'left',
titleColor: '',
titleFontSize: 14,
titleFontWeight: 'normal',
titleShow: true,
} as const;
const aiAgentAdminHomeConfig: DashboardConfig = {
id: 'ai-agent-admin-main-home',
name: '控制中心',
columns: 12,
rowHeight: 68,
margin: [12, 12],
backgroundColor: '',
widgets: [
{
id: 'welcome',
i: 'welcome',
x: 0,
y: 0,
w: 9,
h: 2,
minW: 4,
minH: 2,
type: 'welcome-card',
title: '欢迎回来',
props: {
title: '欢迎回来',
subtitle: '聚焦智能体协作、流程编排、知识库和基础权限治理',
showTime: true,
showWeather: false,
},
style: widgetStyle,
},
{
id: 'weather',
i: 'weather',
x: 9,
y: 0,
w: 3,
h: 2,
minW: 2,
minH: 2,
type: 'weather',
title: '今日天气',
props: {
title: '今日天气',
cityName: '北京',
latitude: 39.9042,
longitude: 116.4074,
autoLocate: false,
refreshInterval: 30,
},
style: widgetStyle,
},
{
id: 'ai-collaboration',
i: 'ai-collaboration',
x: 0,
y: 2,
w: 7,
h: 3,
minW: 6,
minH: 2,
type: 'quick-links',
title: 'AI 协作',
props: {
title: 'AI 协作',
columns: 4,
rows: 2,
menus: [
{
id: 'ai-agent',
title: '智能体',
icon: 'lucide:square-user',
path: '/ai-platform/agent',
},
{
id: 'ai-workflow',
title: '流程编排',
icon: 'lucide:workflow',
path: '/ai-platform/workflow',
},
{
id: 'ai-workflow-runs',
title: '执行历史',
icon: 'lucide:history',
path: '/ai-platform/workflow-runs',
},
{
id: 'ai-knowledge',
title: '知识库',
icon: 'lucide:library-big',
path: '/ai-platform/knowledge-base',
},
{
id: 'ai-model',
title: '模型配置',
icon: 'lucide:settings',
path: '/ai-platform/model',
},
{
id: 'codex-agent',
title: 'Codex 助手',
icon: 'lucide:code-2',
path: '/agent-chat/codex',
},
],
},
style: widgetStyle,
},
{
id: 'base-admin',
i: 'base-admin',
x: 7,
y: 2,
w: 5,
h: 3,
minW: 4,
minH: 2,
type: 'quick-links',
title: '基础管理',
props: {
title: '基础管理',
columns: 3,
rows: 2,
menus: [
{
id: 'system-user',
title: '用户管理',
icon: 'lucide:users',
path: '/system/user',
},
{
id: 'system-role',
title: '角色管理',
icon: 'lucide:shield-check',
path: '/system/role',
},
{
id: 'system-permission',
title: '权限管理',
icon: 'lucide:key-round',
path: '/system/new-permission',
},
{
id: 'system-menu',
title: '菜单管理',
icon: 'lucide:menu',
path: '/system/menu',
},
{
id: 'announcement',
title: '公告管理',
icon: 'lucide:megaphone',
path: '/message/announcement',
},
{
id: 'message',
title: '消息中心',
icon: 'lucide:bell',
path: '/message/list',
},
],
},
style: widgetStyle,
},
{
id: 'announcement-list',
i: 'announcement-list',
x: 0,
y: 5,
w: 4,
h: 4,
minW: 3,
minH: 3,
type: 'announcement-list',
title: '最新公告',
props: {
title: '最新公告',
limit: 6,
},
style: widgetStyle,
},
{
id: 'notice-list',
i: 'notice-list',
x: 4,
y: 5,
w: 4,
h: 4,
minW: 3,
minH: 3,
type: 'notice-list',
title: '消息通知',
props: {
title: '消息通知',
limit: 6,
},
style: widgetStyle,
},
{
id: 'server-monitor',
i: 'server-monitor',
x: 8,
y: 5,
w: 4,
h: 4,
minW: 4,
minH: 3,
type: 'server-monitor',
title: '运行监控',
props: {
title: '运行监控',
refreshInterval: 5000,
},
style: widgetStyle,
},
],
};
function isAiAgentAdminHomeCode(code: string) {
return code === AI_AGENT_HOME_CODE;
}
function createAiAgentAdminHomeConfig() {
return JSON.parse(JSON.stringify(aiAgentAdminHomeConfig)) as DashboardConfig;
}
export { createAiAgentAdminHomeConfig, isAiAgentAdminHomeCode };
@@ -7,6 +7,11 @@ import { ElEmpty, ElMessage, ElScrollbar } from 'element-plus';
import { getPageByCodeApi } from '#/api/online-dev/page-manager'; import { getPageByCodeApi } from '#/api/online-dev/page-manager';
import DashboardRenderer from '#/components/dashboard-design/DashboardRenderer.vue'; import DashboardRenderer from '#/components/dashboard-design/DashboardRenderer.vue';
import {
createAiAgentAdminHomeConfig,
isAiAgentAdminHomeCode,
} from './ai-agent-home-config';
defineOptions({ name: 'PageRender' }); defineOptions({ name: 'PageRender' });
const route = useRoute(); const route = useRoute();
@@ -44,6 +49,13 @@ async function loadPageData() {
loading.value = true; loading.value = true;
try { try {
if (isAiAgentAdminHomeCode(code)) {
const config = createAiAgentAdminHomeConfig();
pageName.value = config.name;
pageConfig.value = JSON.stringify(config);
return;
}
const page = await getPageByCodeApi(code); const page = await getPageByCodeApi(code);
pageName.value = page.name; pageName.value = page.name;
pageConfig.value = pageConfig.value =