chore: 后端路由模式时,本地静态路由和后端路由合并

This commit is contained in:
QJia 2024-11-15 14:01:35 +08:00
parent 788a29a8cb
commit 39e0e69eff
6 changed files with 240 additions and 3 deletions

View File

@ -5,6 +5,7 @@ import type {
import { generateAccessible } from '@vben/access';
import { preferences } from '@vben/preferences';
import { cloneDeep } from '@vben/utils';
import { message } from 'ant-design-vue';
@ -12,6 +13,8 @@ import { getAllMenusApi } from '#/api';
import { BasicLayout, IFrameView } from '#/layouts';
import { $t } from '#/locales';
import { staticMenuList } from './routes/static';
const forbiddenComponent = () => import('#/views/_core/fallback/forbidden.vue');
async function generateAccess(options: GenerateMenuAndRoutesOptions) {
@ -29,7 +32,10 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) {
content: `${$t('common.loadingMenu')}...`,
duration: 1.5,
});
return await getAllMenusApi();
const dynamicMenus = await getAllMenusApi();
// 本地菜单和动态菜单合并
return [...cloneDeep(staticMenuList), ...dynamicMenus];
},
// 可以指定没有权限跳转403页面
forbiddenComponent,

View File

@ -0,0 +1,73 @@
import type { RouteRecordStringComponent } from '@vben/types';
import { $t } from '@vben/locales';
/**
*
*/
/**
* demo
*/
const demoRoute: RouteRecordStringComponent[] = [
{
component: 'BasicLayout',
meta: {
hideChildrenInMenu: true,
icon: 'lucide:copyright',
order: 9999,
title: $t('demos.vben.about'),
},
name: 'About',
path: '/about',
children: [
{
component: '/_core/about/index',
meta: {
title: $t('demos.vben.about'),
},
name: 'VbenAbout',
path: '/vben-admin/about',
},
],
},
];
/**
*
*/
export const staticMenuList: RouteRecordStringComponent[] = [
{
component: 'BasicLayout',
meta: {
icon: 'lucide:layout-dashboard',
order: -1,
title: 'page.dashboard.title',
},
name: 'Dashboard',
path: '/',
redirect: '/analytics',
children: [
{
name: 'Analytics',
path: '/analytics',
component: '/dashboard/analytics/index',
meta: {
affixTab: true,
icon: 'lucide:area-chart',
title: 'page.dashboard.analytics',
},
},
{
name: 'Workspace',
path: '/workspace',
component: '/dashboard/workspace/index',
meta: {
icon: 'carbon:workspace',
title: 'page.dashboard.workspace',
},
},
],
},
...demoRoute,
];

View File

@ -5,6 +5,7 @@ import type {
import { generateAccessible } from '@vben/access';
import { preferences } from '@vben/preferences';
import { cloneDeep } from '@vben/utils';
import { ElMessage } from 'element-plus';
@ -12,6 +13,8 @@ import { getAllMenusApi } from '#/api';
import { BasicLayout, IFrameView } from '#/layouts';
import { $t } from '#/locales';
import { staticMenuList } from './routes/static';
const forbiddenComponent = () => import('#/views/_core/fallback/forbidden.vue');
async function generateAccess(options: GenerateMenuAndRoutesOptions) {
@ -29,7 +32,10 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) {
duration: 1500,
message: `${$t('common.loadingMenu')}...`,
});
return await getAllMenusApi();
const dynamicMenus = await getAllMenusApi();
// 本地菜单和动态菜单合并
return [...cloneDeep(staticMenuList), ...dynamicMenus];
},
// 可以指定没有权限跳转403页面
forbiddenComponent,

View File

@ -0,0 +1,73 @@
import type { RouteRecordStringComponent } from '@vben/types';
import { $t } from '@vben/locales';
/**
*
*/
/**
* demo
*/
const demoRoute: RouteRecordStringComponent[] = [
{
component: 'BasicLayout',
meta: {
hideChildrenInMenu: true,
icon: 'lucide:copyright',
order: 9999,
title: $t('demos.vben.about'),
},
name: 'About',
path: '/about',
children: [
{
component: '/_core/about/index',
meta: {
title: $t('demos.vben.about'),
},
name: 'VbenAbout',
path: '/vben-admin/about',
},
],
},
];
/**
*
*/
export const staticMenuList: RouteRecordStringComponent[] = [
{
component: 'BasicLayout',
meta: {
icon: 'lucide:layout-dashboard',
order: -1,
title: 'page.dashboard.title',
},
name: 'Dashboard',
path: '/',
redirect: '/analytics',
children: [
{
name: 'Analytics',
path: '/analytics',
component: '/dashboard/analytics/index',
meta: {
affixTab: true,
icon: 'lucide:area-chart',
title: 'page.dashboard.analytics',
},
},
{
name: 'Workspace',
path: '/workspace',
component: '/dashboard/workspace/index',
meta: {
icon: 'carbon:workspace',
title: 'page.dashboard.workspace',
},
},
],
},
...demoRoute,
];

View File

@ -5,12 +5,15 @@ import type {
import { generateAccessible } from '@vben/access';
import { preferences } from '@vben/preferences';
import { cloneDeep } from '@vben/utils';
import { message } from '#/adapter/naive';
import { getAllMenusApi } from '#/api';
import { BasicLayout, IFrameView } from '#/layouts';
import { $t } from '#/locales';
import { staticMenuList } from './routes/static';
const forbiddenComponent = () => import('#/views/_core/fallback/forbidden.vue');
async function generateAccess(options: GenerateMenuAndRoutesOptions) {
@ -27,7 +30,10 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) {
message.loading(`${$t('common.loadingMenu')}...`, {
duration: 1.5,
});
return await getAllMenusApi();
const dynamicMenus = await getAllMenusApi();
// 本地菜单和动态菜单合并
return [...cloneDeep(staticMenuList), ...dynamicMenus];
},
// 可以指定没有权限跳转403页面
forbiddenComponent,

View File

@ -0,0 +1,73 @@
import type { RouteRecordStringComponent } from '@vben/types';
import { $t } from '@vben/locales';
/**
*
*/
/**
* demo
*/
const demoRoute: RouteRecordStringComponent[] = [
{
component: 'BasicLayout',
meta: {
hideChildrenInMenu: true,
icon: 'lucide:copyright',
order: 9999,
title: $t('demos.vben.about'),
},
name: 'About',
path: '/about',
children: [
{
component: '/_core/about/index',
meta: {
title: $t('demos.vben.about'),
},
name: 'VbenAbout',
path: '/vben-admin/about',
},
],
},
];
/**
*
*/
export const staticMenuList: RouteRecordStringComponent[] = [
{
component: 'BasicLayout',
meta: {
icon: 'lucide:layout-dashboard',
order: -1,
title: 'page.dashboard.title',
},
name: 'Dashboard',
path: '/',
redirect: '/analytics',
children: [
{
name: 'Analytics',
path: '/analytics',
component: '/dashboard/analytics/index',
meta: {
affixTab: true,
icon: 'lucide:area-chart',
title: 'page.dashboard.analytics',
},
},
{
name: 'Workspace',
path: '/workspace',
component: '/dashboard/workspace/index',
meta: {
icon: 'carbon:workspace',
title: 'page.dashboard.workspace',
},
},
],
},
...demoRoute,
];