feat: 运营平台基建 搭建

This commit is contained in:
2026-07-23 15:00:19 +08:00
parent 3b5a908ee4
commit 5523695518
11 changed files with 1096 additions and 130 deletions
+43 -14
View File
@@ -141,6 +141,44 @@ function getFirstMenuPath(nodes: MenuNode[]): string {
return '/dashboard';
}
/**
* 注册 BasicLayout 布局路由(如果不存在)
* 动态路由作为其子路由挂载
*/
function ensureLayoutRoute() {
const existing = router.hasRoute('BasicLayout');
if (!existing) {
router.addRoute({
path: '/',
name: 'BasicLayout',
component: () => import('@/layouts/BasicLayout'),
children: [],
meta: { title: '首页' },
});
}
}
/**
* 注册兜底菜单和路由(后端接口不可用时使用)
*/
function registerFallbackRoutes() {
ensureLayoutRoute();
router.addRoute('BasicLayout', {
path: 'dashboard',
name: 'Dashboard',
component: () => import('@/pages/dashboard'),
meta: { title: '工作台', icon: 'DashboardOutlined' },
});
router.addRoute('BasicLayout', {
path: 'about',
name: 'About',
component: () => import('@/pages/about'),
meta: { title: '关于', icon: 'InfoCircleOutlined' },
});
router.addRoute('BasicLayout', { path: '', redirect: '/dashboard' });
}
export function useMenuStore() {
const loadMenu = async () => {
if (state.loaded) return;
@@ -151,6 +189,9 @@ export function useMenuStore() {
state.menuItems = transformMenuNode(menuTree);
state.homePath = getFirstMenuPath(menuTree);
// 确保 BasicLayout 布局路由已注册
ensureLayoutRoute();
// 动态注册路由:将后端路由配置注入到 BasicLayout 布局下
const dynamicRoutes = transformMenuToRoutes(menuTree);
dynamicRoutes.forEach((route) => {
@@ -170,20 +211,8 @@ export function useMenuStore() {
];
state.homePath = '/dashboard';
// 兜底路由(挂载到 BasicLayout 下)
router.addRoute('BasicLayout', {
path: '/dashboard',
name: 'Dashboard',
component: () => import('@/pages/dashboard'),
meta: { title: '工作台', icon: 'DashboardOutlined' },
});
router.addRoute('BasicLayout', {
path: '/about',
name: 'About',
component: () => import('@/pages/about'),
meta: { title: '关于', icon: 'InfoCircleOutlined' },
});
router.addRoute('BasicLayout', { path: '', redirect: '/dashboard' });
// 兜底路由
registerFallbackRoutes();
state.loaded = true;
}