mirror of
https://github.com/m-xlsea/ruoyi-plus-soybean.git
synced 2025-09-24 07:49:47 +08:00
refactor(projects): 路由声明重构,添加composables,BaseLayout进行中,文件夹规范
This commit is contained in:
68
src/router/const/index.ts
Normal file
68
src/router/const/index.ts
Normal file
@ -0,0 +1,68 @@
|
||||
import type { RouteKey } from '@/interface';
|
||||
|
||||
interface RouteConst {
|
||||
/** 路由名称 */
|
||||
name: RouteKey;
|
||||
/** 路由路径 */
|
||||
path: string;
|
||||
/** 路由标题 */
|
||||
title: string;
|
||||
}
|
||||
|
||||
/** 声明的路由名称、路径和标题 */
|
||||
const routeConstMap = new Map<RouteKey, RouteConst>([
|
||||
['root', { name: 'root', path: '/', title: 'Root' }],
|
||||
['login', { name: 'login', path: '/login', title: '登录' }],
|
||||
['no-permission', { name: 'no-permission', path: '/403', title: '无权限' }],
|
||||
['not-found', { name: 'not-found', path: '/404', title: '未找到' }],
|
||||
['service-error', { name: 'service-error', path: '/500', title: '服务器错误' }],
|
||||
['dashboard', { name: 'dashboard', path: '/dashboard', title: '仪表盘' }],
|
||||
['dashboard_analysis', { name: 'dashboard_analysis', path: '/dashboard/analysis', title: '分析页' }],
|
||||
['dashboard_workbench', { name: 'dashboard_workbench', path: '/dashboard/workbench', title: '工作台' }],
|
||||
['document', { name: 'document', path: '/document', title: '文档' }],
|
||||
['document_vue', { name: 'document_vue', path: '/document/vue', title: 'vue文档' }],
|
||||
['document_vite', { name: 'document_vite', path: '/document/vite', title: 'vite文档' }],
|
||||
['document_naive', { name: 'document_naive', path: '/document/naive', title: 'naive文档' }],
|
||||
['component', { name: 'component', path: '/component', title: '组件插件' }],
|
||||
['component_map', { name: 'component_map', path: '/component/map', title: '地图插件' }],
|
||||
['component_video', { name: 'component_video', path: '/component/video', title: '视频插件' }],
|
||||
['component_editor', { name: 'component_editor', path: '/component/editor', title: '编辑器' }],
|
||||
[
|
||||
'component_editor_quill',
|
||||
{ name: 'component_editor_quill', path: '/component/editor/quill', title: '富文本编辑器' }
|
||||
],
|
||||
[
|
||||
'component_editor_markdown',
|
||||
{ name: 'component_editor_markdown', path: '/component/editor/markdown', title: 'markdown编辑器' }
|
||||
],
|
||||
['component_swiper', { name: 'component_swiper', path: '/component/swiper', title: 'Swiper插件' }],
|
||||
['feat', { name: 'feat', path: '/feat', title: '功能示例' }],
|
||||
['feat_copy', { name: 'feat_copy', path: '/feat/copy', title: '剪贴板' }],
|
||||
['feat_icon', { name: 'feat_icon', path: '/feat/icon', title: '图标' }],
|
||||
['feat_print', { name: 'feat_print', path: '/feat/print', title: '打印' }],
|
||||
['multi-menu', { name: 'multi-menu', path: '/multi-menu', title: '多级菜单' }],
|
||||
['multi-menu_first', { name: 'multi-menu_first', path: '/multi-menu/first', title: '一级菜单' }],
|
||||
['multi-menu_first_second', { name: 'multi-menu_first_second', path: '/multi-menu/first/second', title: '二级菜单' }],
|
||||
['exception', { name: 'exception', path: '/exception', title: '异常页' }],
|
||||
['exception_403', { name: 'exception_403', path: '/exception/403', title: '异常页-403' }],
|
||||
['exception_404', { name: 'exception_404', path: '/exception/404', title: '异常页-404' }],
|
||||
['exception_500', { name: 'exception_500', path: '/exception/500', title: '异常页-500' }],
|
||||
['about', { name: 'about', path: '/about', title: '关于' }]
|
||||
]);
|
||||
|
||||
/** 获取路由的声明(name、path、title) */
|
||||
export function getRouteConst(key: RouteKey) {
|
||||
return routeConstMap.get(key)!;
|
||||
}
|
||||
/** 路由名称 */
|
||||
export function routeName(key: RouteKey) {
|
||||
return routeConstMap.get(key)!.name;
|
||||
}
|
||||
/** 路由路径 */
|
||||
export function routePath(key: RouteKey) {
|
||||
return routeConstMap.get(key)!.path;
|
||||
}
|
||||
/** 路由标题 */
|
||||
export function routeTitle(key: RouteKey) {
|
||||
return routeConstMap.get(key)!.title;
|
||||
}
|
5
src/router/export/index.ts
Normal file
5
src/router/export/index.ts
Normal file
@ -0,0 +1,5 @@
|
||||
import { getCacheRoutes, transformRouteToMenu } from '@/utils';
|
||||
import { customRoutes, routes } from '../routes';
|
||||
|
||||
export const cacheRoutes = getCacheRoutes(routes);
|
||||
export const menus = transformRouteToMenu(customRoutes);
|
@ -1,8 +1,4 @@
|
||||
import { getCacheRoutes, transformRouteToMenu } from '@/utils';
|
||||
import { customRoutes, routes, ROUTE_HOME } from './routes';
|
||||
import { router, setupRouter } from './setup';
|
||||
|
||||
const cacheRoutes = getCacheRoutes(routes);
|
||||
const menus = transformRouteToMenu(customRoutes);
|
||||
|
||||
export { customRoutes, routes, ROUTE_HOME, router, setupRouter, cacheRoutes, menus };
|
||||
export * from './const';
|
||||
export * from './routes';
|
||||
export * from './setup';
|
||||
export * from './export';
|
||||
|
@ -1,18 +1,19 @@
|
||||
import type { CustomRoute } from '@/interface';
|
||||
import { EnumRoutePath, EnumRouteTitle } from '@/enum';
|
||||
import { ROUTE_NAME_MAP, setRouterCacheName, setSingleRoute } from '@/utils';
|
||||
import { setRouterCacheName, setSingleRoute } from '@/utils';
|
||||
import { BasicLayout } from '@/layouts';
|
||||
import About from '@/views/about/index.vue';
|
||||
import { getRouteConst } from '../const';
|
||||
|
||||
setRouterCacheName(About, ROUTE_NAME_MAP.get('about'));
|
||||
const { name, path, title } = getRouteConst('about');
|
||||
setRouterCacheName(About, name);
|
||||
|
||||
const ABOUT: CustomRoute = setSingleRoute(BasicLayout, {
|
||||
name: ROUTE_NAME_MAP.get('about'),
|
||||
path: EnumRoutePath.about,
|
||||
name,
|
||||
path,
|
||||
component: About,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.about,
|
||||
title,
|
||||
icon: 'fluent:book-information-24-regular'
|
||||
}
|
||||
});
|
||||
|
@ -1,90 +1,90 @@
|
||||
import type { CustomRoute } from '@/interface';
|
||||
import { EnumRoutePath, EnumRouteTitle } from '@/enum';
|
||||
import { BasicLayout, RouterViewLayout } from '@/layouts';
|
||||
import { ROUTE_NAME_MAP, setRouterCacheName } from '@/utils';
|
||||
import { setRouterCacheName } from '@/utils';
|
||||
import ComponentMap from '@/views/component/map/index.vue';
|
||||
import ComponentVideo from '@/views/component/video/index.vue';
|
||||
import EditorQuill from '@/views/component/editor/quill/index.vue';
|
||||
import EditorMarkdown from '@/views/component/editor/markdown/index.vue';
|
||||
import ComponentSwiper from '@/views/component/swiper/index.vue';
|
||||
import { routeName, routePath, routeTitle } from '../const';
|
||||
|
||||
setRouterCacheName(ComponentMap, ROUTE_NAME_MAP.get('component_map'));
|
||||
setRouterCacheName(ComponentVideo, ROUTE_NAME_MAP.get('component_video'));
|
||||
setRouterCacheName(EditorQuill, ROUTE_NAME_MAP.get('component_editor_quill'));
|
||||
setRouterCacheName(EditorMarkdown, ROUTE_NAME_MAP.get('component_editor_markdown'));
|
||||
setRouterCacheName(ComponentSwiper, ROUTE_NAME_MAP.get('component_swiper'));
|
||||
setRouterCacheName(ComponentMap, routeName('component_map'));
|
||||
setRouterCacheName(ComponentVideo, routeName('component_video'));
|
||||
setRouterCacheName(EditorQuill, routeName('component_editor_quill'));
|
||||
setRouterCacheName(EditorMarkdown, routeName('component_editor_markdown'));
|
||||
setRouterCacheName(ComponentSwiper, routeName('component_swiper'));
|
||||
|
||||
const COMPONENT: CustomRoute = {
|
||||
name: ROUTE_NAME_MAP.get('component'),
|
||||
path: EnumRoutePath.component,
|
||||
name: routeName('component'),
|
||||
path: routePath('component'),
|
||||
component: BasicLayout,
|
||||
redirect: { name: ROUTE_NAME_MAP.get('component_map') },
|
||||
redirect: { name: routeName('component_map') },
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.component,
|
||||
title: routeTitle('component'),
|
||||
icon: 'fluent:app-store-24-regular'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('component_map'),
|
||||
path: EnumRoutePath.component_map,
|
||||
name: routeName('component_map'),
|
||||
path: routePath('component_map'),
|
||||
component: ComponentMap,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.component_map,
|
||||
title: routeTitle('component_map'),
|
||||
fullPage: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('component_video'),
|
||||
path: EnumRoutePath.component_video,
|
||||
name: routeName('component_video'),
|
||||
path: routePath('component_video'),
|
||||
component: ComponentVideo,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.component_video,
|
||||
title: routeTitle('component_video'),
|
||||
fullPage: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('component_editor'),
|
||||
path: EnumRoutePath.component_editor,
|
||||
name: routeName('component_editor'),
|
||||
path: routePath('component_editor'),
|
||||
component: RouterViewLayout,
|
||||
redirect: { name: ROUTE_NAME_MAP.get('component_editor_quill') },
|
||||
redirect: { name: routeName('component_editor_quill') },
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.component_editor,
|
||||
title: routeTitle('component_editor'),
|
||||
fullPage: true
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('component_editor_quill'),
|
||||
path: EnumRoutePath.component_editor_quill,
|
||||
name: routeName('component_editor_quill'),
|
||||
path: routePath('component_editor_quill'),
|
||||
component: EditorQuill,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.component_editor_quill,
|
||||
title: routeTitle('component_editor_quill'),
|
||||
fullPage: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('component_editor_markdown'),
|
||||
path: EnumRoutePath.component_editor_markdown,
|
||||
name: routeName('component_editor_markdown'),
|
||||
path: routePath('component_editor_markdown'),
|
||||
component: EditorMarkdown,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.component_editor_markdown,
|
||||
title: routeTitle('component_editor_markdown'),
|
||||
fullPage: true
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('component_swiper'),
|
||||
path: EnumRoutePath.component_swiper,
|
||||
name: routeName('component_swiper'),
|
||||
path: routePath('component_swiper'),
|
||||
component: ComponentSwiper,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.component_swiper
|
||||
title: routeTitle('component_swiper')
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1,31 +1,31 @@
|
||||
import type { CustomRoute } from '@/interface';
|
||||
import { EnumRoutePath, EnumRouteTitle } from '@/enum';
|
||||
import { BaseLayout } from '@/layouts';
|
||||
import { ROUTE_NAME_MAP, setRouterCacheName } from '@/utils';
|
||||
import { ROUTE_HOME } from '../routes';
|
||||
import { BasicLayout } from '@/layouts';
|
||||
import { setRouterCacheName } from '@/utils';
|
||||
import DashboardWorkbench from '@/views/dashboard/workbench/index.vue';
|
||||
import { ROUTE_HOME } from '../routes';
|
||||
import { routeName, routePath, routeTitle } from '../const';
|
||||
|
||||
setRouterCacheName(DashboardWorkbench, ROUTE_NAME_MAP.get('dashboard_workbench'));
|
||||
setRouterCacheName(DashboardWorkbench, routeName('dashboard_workbench'));
|
||||
|
||||
const DASHBOARD: CustomRoute = {
|
||||
name: ROUTE_NAME_MAP.get('dashboard'),
|
||||
path: EnumRoutePath.dashboard,
|
||||
component: BaseLayout,
|
||||
redirect: { name: ROUTE_NAME_MAP.get('dashboard_analysis') },
|
||||
name: routeName('dashboard'),
|
||||
path: routePath('dashboard'),
|
||||
component: BasicLayout,
|
||||
redirect: { name: routeName('dashboard_analysis') },
|
||||
meta: {
|
||||
title: EnumRouteTitle.dashboard,
|
||||
title: routeTitle('dashboard_analysis'),
|
||||
icon: 'carbon:dashboard'
|
||||
},
|
||||
children: [
|
||||
ROUTE_HOME,
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('dashboard_workbench'),
|
||||
path: EnumRoutePath.dashboard_workbench,
|
||||
name: routeName('dashboard_workbench'),
|
||||
path: routePath('dashboard_workbench'),
|
||||
component: DashboardWorkbench,
|
||||
meta: {
|
||||
keepAlive: true,
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.dashboard_workbench
|
||||
title: routeTitle('dashboard_workbench')
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1,54 +1,54 @@
|
||||
import type { CustomRoute } from '@/interface';
|
||||
import { EnumRoutePath, EnumRouteTitle } from '@/enum';
|
||||
import { BasicLayout } from '@/layouts';
|
||||
import { ROUTE_NAME_MAP, setRouterCacheName } from '@/utils';
|
||||
import { setRouterCacheName } from '@/utils';
|
||||
import DocumentVue from '@/views/document/vue/index.vue';
|
||||
import DocumentVite from '@/views/document/vite/index.vue';
|
||||
import DocumentNaive from '@/views/document/naive/index.vue';
|
||||
import { routeName, routePath, routeTitle } from '../const';
|
||||
|
||||
setRouterCacheName(DocumentVue, ROUTE_NAME_MAP.get('document_vue'));
|
||||
setRouterCacheName(DocumentVite, ROUTE_NAME_MAP.get('document_vite'));
|
||||
setRouterCacheName(DocumentNaive, ROUTE_NAME_MAP.get('document_naive'));
|
||||
setRouterCacheName(DocumentVue, routeName('document_vue'));
|
||||
setRouterCacheName(DocumentVite, routeName('document_vite'));
|
||||
setRouterCacheName(DocumentNaive, routeName('document_naive'));
|
||||
|
||||
const DOCUMENT: CustomRoute = {
|
||||
name: ROUTE_NAME_MAP.get('document'),
|
||||
path: EnumRoutePath.document,
|
||||
name: routeName('document'),
|
||||
path: routePath('document'),
|
||||
component: BasicLayout,
|
||||
redirect: { name: ROUTE_NAME_MAP.get('document_vue') },
|
||||
redirect: { name: routeName('document_vue') },
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.document,
|
||||
title: routeTitle('document'),
|
||||
icon: 'carbon:document'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('document_vue'),
|
||||
path: EnumRoutePath.document_vue,
|
||||
name: routeName('document_vue'),
|
||||
path: routePath('document_vue'),
|
||||
component: DocumentVue,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.document_vue,
|
||||
title: routeTitle('document_vue'),
|
||||
fullPage: true,
|
||||
keepAlive: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('document_vite'),
|
||||
path: EnumRoutePath.document_vite,
|
||||
name: routeName('document_vite'),
|
||||
path: routePath('document_vite'),
|
||||
component: DocumentVite,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.document_vite,
|
||||
title: routeTitle('document_vite'),
|
||||
fullPage: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('document_naive'),
|
||||
path: EnumRoutePath.document_naive,
|
||||
name: routeName('document_naive'),
|
||||
path: routePath('document_naive'),
|
||||
component: DocumentNaive,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.document_naive,
|
||||
title: routeTitle('document_naive'),
|
||||
fullPage: true
|
||||
}
|
||||
}
|
||||
|
@ -1,53 +1,53 @@
|
||||
import type { CustomRoute } from '@/interface';
|
||||
import { EnumRoutePath, EnumRouteTitle } from '@/enum';
|
||||
import { BasicLayout } from '@/layouts';
|
||||
import { ROUTE_NAME_MAP, setRouterCacheName } from '@/utils';
|
||||
import { setRouterCacheName } from '@/utils';
|
||||
import Exception403 from '@/views/system/exception/403.vue';
|
||||
import Exception404 from '@/views/system/exception/404.vue';
|
||||
import Exception500 from '@/views/system/exception/500.vue';
|
||||
import { routeName, routePath, routeTitle } from '../const';
|
||||
|
||||
setRouterCacheName(Exception404, ROUTE_NAME_MAP.get('exception_404'));
|
||||
setRouterCacheName(Exception403, ROUTE_NAME_MAP.get('exception_403'));
|
||||
setRouterCacheName(Exception500, ROUTE_NAME_MAP.get('exception_500'));
|
||||
setRouterCacheName(Exception404, routeName('exception_404'));
|
||||
setRouterCacheName(Exception403, routeName('exception_403'));
|
||||
setRouterCacheName(Exception500, routeName('exception_500'));
|
||||
|
||||
const EXCEPTION: CustomRoute = {
|
||||
name: ROUTE_NAME_MAP.get('exception'),
|
||||
path: EnumRoutePath.exception,
|
||||
name: routeName('exception'),
|
||||
path: routePath('exception'),
|
||||
component: BasicLayout,
|
||||
redirect: { name: ROUTE_NAME_MAP.get('exception_403') },
|
||||
redirect: { name: routeName('exception_403') },
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.exception,
|
||||
title: routeTitle('exception'),
|
||||
icon: 'ant-design:exception-outlined'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('exception_403'),
|
||||
path: EnumRoutePath.exception_403,
|
||||
name: routeName('exception_403'),
|
||||
path: routePath('exception_403'),
|
||||
component: Exception403,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.exception_403,
|
||||
title: routeTitle('exception_403'),
|
||||
fullPage: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('exception_404'),
|
||||
path: EnumRoutePath.exception_404,
|
||||
name: routeName('exception_404'),
|
||||
path: routePath('exception_404'),
|
||||
component: Exception404,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.exception_404,
|
||||
title: routeTitle('exception_404'),
|
||||
fullPage: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('exception_500'),
|
||||
path: EnumRoutePath.exception_500,
|
||||
name: routeName('exception_500'),
|
||||
path: routePath('exception_500'),
|
||||
component: Exception500,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.exception_500,
|
||||
title: routeTitle('exception_500'),
|
||||
fullPage: true
|
||||
}
|
||||
}
|
||||
|
@ -1,52 +1,52 @@
|
||||
import type { CustomRoute } from '@/interface';
|
||||
import { EnumRoutePath, EnumRouteTitle } from '@/enum';
|
||||
import { BasicLayout } from '@/layouts';
|
||||
import { ROUTE_NAME_MAP, setRouterCacheName } from '@/utils';
|
||||
import { setRouterCacheName } from '@/utils';
|
||||
import FeatCopy from '@/views/feat/copy/index.vue';
|
||||
import FeatIcon from '@/views/feat/icon/index.vue';
|
||||
import FeatPrint from '@/views/feat/print/index.vue';
|
||||
import { routeName, routePath, routeTitle } from '../const';
|
||||
|
||||
setRouterCacheName(FeatCopy, ROUTE_NAME_MAP.get('feat_copy'));
|
||||
setRouterCacheName(FeatIcon, ROUTE_NAME_MAP.get('feat_icon'));
|
||||
setRouterCacheName(FeatPrint, ROUTE_NAME_MAP.get('feat_print'));
|
||||
setRouterCacheName(FeatCopy, routeName('feat_copy'));
|
||||
setRouterCacheName(FeatIcon, routeName('feat_icon'));
|
||||
setRouterCacheName(FeatPrint, routeName('feat_print'));
|
||||
|
||||
const FEAT: CustomRoute = {
|
||||
name: ROUTE_NAME_MAP.get('feat'),
|
||||
path: EnumRoutePath.feat,
|
||||
name: routeName('feat'),
|
||||
path: routePath('feat'),
|
||||
component: BasicLayout,
|
||||
redirect: { name: ROUTE_NAME_MAP.get('feat_copy') },
|
||||
redirect: { name: routeName('feat_copy') },
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.feat,
|
||||
title: routeTitle('feat'),
|
||||
icon: 'ic:round-repeat'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('feat_copy'),
|
||||
path: EnumRoutePath.feat_copy,
|
||||
name: routeName('feat_copy'),
|
||||
path: routePath('feat_copy'),
|
||||
component: FeatCopy,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.feat_copy,
|
||||
title: routeTitle('feat_copy'),
|
||||
fullPage: true
|
||||
}
|
||||
},
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('feat_icon'),
|
||||
path: EnumRoutePath.feat_icon,
|
||||
name: routeName('feat_icon'),
|
||||
path: routePath('feat_icon'),
|
||||
component: FeatIcon,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.feat_icon
|
||||
title: routeTitle('feat_icon')
|
||||
}
|
||||
},
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('feat_print'),
|
||||
path: EnumRoutePath.feat_print,
|
||||
name: routeName('feat_print'),
|
||||
path: routePath('feat_print'),
|
||||
component: FeatPrint,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.feat_print
|
||||
title: routeTitle('feat_print')
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1,40 +1,41 @@
|
||||
import type { CustomRoute } from '@/interface';
|
||||
import { EnumRoutePath, EnumRouteTitle } from '@/enum';
|
||||
import { BasicLayout, RouterViewLayout } from '@/layouts';
|
||||
import { ROUTE_NAME_MAP, setRouterCacheName } from '@/utils';
|
||||
import { setRouterCacheName } from '@/utils';
|
||||
import MultiMenuFirstSecond from '@/views/multi-menu/first/second/index.vue';
|
||||
import { routeName, routePath, routeTitle } from '../const';
|
||||
|
||||
setRouterCacheName(MultiMenuFirstSecond, ROUTE_NAME_MAP.get('multi-menu_first_second'));
|
||||
setRouterCacheName(MultiMenuFirstSecond, routeName('multi-menu_first_second'));
|
||||
|
||||
const MULTI_MENU: CustomRoute = {
|
||||
name: ROUTE_NAME_MAP.get('multi-menu'),
|
||||
path: EnumRoutePath['multi-menu'],
|
||||
name: routeName('multi-menu'),
|
||||
path: routePath('multi-menu'),
|
||||
component: BasicLayout,
|
||||
redirect: { name: ROUTE_NAME_MAP.get('multi-menu_first') },
|
||||
redirect: { name: routeName('multi-menu_first') },
|
||||
meta: {
|
||||
title: EnumRouteTitle['multi-menu'],
|
||||
title: routeTitle('multi-menu'),
|
||||
icon: 'carbon:menu'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('multi-menu_first'),
|
||||
path: EnumRoutePath['multi-menu_first'],
|
||||
name: routeName('multi-menu_first'),
|
||||
path: routePath('multi-menu_first'),
|
||||
component: RouterViewLayout,
|
||||
redirect: { name: ROUTE_NAME_MAP.get('multi-menu_first_second') },
|
||||
redirect: { name: routeName('multi-menu_first_second') },
|
||||
meta: {
|
||||
keepAlive: true,
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle['multi-menu_first']
|
||||
title: routeTitle('multi-menu_first_second')
|
||||
},
|
||||
children: [
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('multi-menu_first_second'),
|
||||
path: EnumRoutePath['multi-menu_first_second'],
|
||||
name: routeName('multi-menu_first_second'),
|
||||
path: routePath('multi-menu_first_second'),
|
||||
component: MultiMenuFirstSecond,
|
||||
meta: {
|
||||
keepAlive: true,
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle['multi-menu_first_second']
|
||||
title: routeTitle('multi-menu_first_second'),
|
||||
fullPage: true
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -1,11 +1,10 @@
|
||||
import type { CustomRoute } from '@/interface';
|
||||
import { EnumRoutePath } from '@/enum';
|
||||
import { ROUTE_NAME_MAP } from '@/utils';
|
||||
import { routeName, routePath } from '../const';
|
||||
import { ROUTE_HOME } from '../routes';
|
||||
|
||||
const ROOT: CustomRoute = {
|
||||
name: ROUTE_NAME_MAP.get('root'),
|
||||
path: EnumRoutePath.root,
|
||||
name: routeName('root'),
|
||||
path: routePath('root'),
|
||||
redirect: { name: ROUTE_HOME.name },
|
||||
meta: {
|
||||
isNotMenu: true
|
||||
|
@ -1,6 +1,7 @@
|
||||
import type { Router, RouteLocationNormalized, NavigationGuardNext } from 'vue-router';
|
||||
import { useTitle } from '@vueuse/core';
|
||||
import { getToken, getLoginRedirectUrl, ROUTE_NAME_MAP } from '@/utils';
|
||||
import { routeName } from '@/router';
|
||||
import { getToken, getLoginRedirectUrl } from '@/utils';
|
||||
|
||||
/**
|
||||
* 路由守卫函数
|
||||
@ -29,9 +30,9 @@ function handleRouterAction(to: RouteLocationNormalized, from: RouteLocationNorm
|
||||
const routerAction: [boolean, () => void][] = [
|
||||
// 已登录状态跳转登录页,跳转至首页
|
||||
[
|
||||
isLogin && to.name === ROUTE_NAME_MAP.get('login'),
|
||||
isLogin && to.name === routeName('login'),
|
||||
() => {
|
||||
next({ name: ROUTE_NAME_MAP.get('root') });
|
||||
next({ name: routeName('root') });
|
||||
}
|
||||
],
|
||||
// 不需要登录权限的页面直接通行
|
||||
@ -46,7 +47,7 @@ function handleRouterAction(to: RouteLocationNormalized, from: RouteLocationNorm
|
||||
!isLogin && needLogin,
|
||||
() => {
|
||||
const redirectUrl = getLoginRedirectUrl();
|
||||
next({ name: ROUTE_NAME_MAP.get('login'), query: { redirectUrl } });
|
||||
next({ name: routeName('login'), query: { redirectUrl } });
|
||||
}
|
||||
],
|
||||
// 登录状态进入需要登录权限的页面,直接通行
|
||||
|
@ -1,12 +1,11 @@
|
||||
import type { RouteRecordRaw } from 'vue-router';
|
||||
import { EnumRoutePath, EnumRouteTitle } from '@/enum';
|
||||
import { BlankLayout } from '@/layouts';
|
||||
import type { LoginModuleType } from '@/interface';
|
||||
import { ROUTE_NAME_MAP } from '@/utils';
|
||||
import Login from '@/views/system/login/index.vue';
|
||||
import NoPermission from '@/views/system/exception/403.vue';
|
||||
import NotFound from '@/views/system/exception/404.vue';
|
||||
import ServiceError from '@/views/system/exception/500.vue';
|
||||
import { routeName, routePath, routeTitle } from '../const';
|
||||
|
||||
/**
|
||||
* 固定不变的路由
|
||||
@ -17,15 +16,15 @@ const constantRoutes: RouteRecordRaw[] = [
|
||||
name: 'single_',
|
||||
path: '/single_',
|
||||
component: BlankLayout,
|
||||
redirect: { name: ROUTE_NAME_MAP.get('not-found') },
|
||||
redirect: { name: routeName('not-found') },
|
||||
meta: {
|
||||
keepAlive: true
|
||||
},
|
||||
children: [
|
||||
// 登录
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('login'),
|
||||
path: EnumRoutePath.login,
|
||||
name: routeName('login'),
|
||||
path: routePath('login'),
|
||||
component: Login,
|
||||
props: route => {
|
||||
const moduleType: LoginModuleType = (route.query?.module as LoginModuleType) || 'pwd-login';
|
||||
@ -34,37 +33,37 @@ const constantRoutes: RouteRecordRaw[] = [
|
||||
};
|
||||
},
|
||||
meta: {
|
||||
title: EnumRouteTitle.login,
|
||||
title: routeTitle('login'),
|
||||
fullPage: true
|
||||
}
|
||||
},
|
||||
// 403
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('no-permission'),
|
||||
path: EnumRoutePath['no-permission'],
|
||||
name: routeName('no-permission'),
|
||||
path: routePath('no-permission'),
|
||||
component: NoPermission,
|
||||
meta: {
|
||||
title: EnumRouteTitle['no-permission'],
|
||||
title: routeTitle('no-permission'),
|
||||
fullPage: true
|
||||
}
|
||||
},
|
||||
// 404
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('not-found'),
|
||||
path: EnumRoutePath['not-found'],
|
||||
name: routeName('not-found'),
|
||||
path: routePath('not-found'),
|
||||
component: NotFound,
|
||||
meta: {
|
||||
title: EnumRouteTitle['not-found'],
|
||||
title: routeTitle('not-found'),
|
||||
fullPage: true
|
||||
}
|
||||
},
|
||||
// 500
|
||||
{
|
||||
name: ROUTE_NAME_MAP.get('service-error'),
|
||||
path: EnumRoutePath['service-error'],
|
||||
name: routeName('service-error'),
|
||||
path: routePath('service-error'),
|
||||
component: ServiceError,
|
||||
meta: {
|
||||
title: EnumRouteTitle['service-error'],
|
||||
title: routeTitle('service-error'),
|
||||
fullPage: true
|
||||
}
|
||||
}
|
||||
@ -73,7 +72,7 @@ const constantRoutes: RouteRecordRaw[] = [
|
||||
// 匹配无效的路径重定向404
|
||||
{
|
||||
path: '/:pathMatch(.*)*',
|
||||
redirect: { name: 'not-found' }
|
||||
redirect: { name: routeName('not-found') }
|
||||
}
|
||||
];
|
||||
|
||||
|
@ -1,18 +1,20 @@
|
||||
import type { CustomRoute } from '@/interface';
|
||||
import { EnumRoutePath, EnumRouteTitle } from '@/enum';
|
||||
import { ROUTE_NAME_MAP, setRouterCacheName } from '@/utils';
|
||||
import { setRouterCacheName } from '@/utils';
|
||||
import DashboardAnalysis from '@/views/dashboard/analysis/index.vue';
|
||||
import { getRouteConst } from '../const';
|
||||
|
||||
setRouterCacheName(DashboardAnalysis, ROUTE_NAME_MAP.get('dashboard_analysis'));
|
||||
const { name, path, title } = getRouteConst('dashboard_analysis');
|
||||
|
||||
setRouterCacheName(DashboardAnalysis, name);
|
||||
|
||||
/** 路由首页 */
|
||||
const ROUTE_HOME: CustomRoute = {
|
||||
name: ROUTE_NAME_MAP.get('dashboard_analysis'),
|
||||
path: EnumRoutePath.dashboard_analysis,
|
||||
name,
|
||||
path,
|
||||
component: DashboardAnalysis,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: EnumRouteTitle.dashboard_analysis
|
||||
title
|
||||
}
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user