2024-06-16 22:57:26 +08:00

369 lines
11 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { RouteRecordRaw } from "vue-router";
import { testMultilevelMenu } from "@/mock/testRoute";
/**
* 路由path路径与文件夹名称相同找文件可以浏览器地址快速查找方便定位文件
*
* 路由meta对象参数我们通常将属性放到meta对象中
* meta: {
* title: 菜单栏以及 tabsView 栏、菜单搜索名称(国际化)
* link: 是否是超链接菜单开启外链条件1、 link链接地址不为空 2、iframe: false
* hide: 是否隐藏此路由
* keepAlive: 是否缓存组件状态
* affix: 是否固定在 tabsView 栏上
* iframe: 是否内嵌窗口开启条件1、iframetrue 2、link链接地址不为空
* roles: 当前路由权限表示,取角色管理。路由控制显示、隐藏。 超级管理员admin普通角色common
* icon: 菜单、tabsView 图标等
* svgIcon: svg图标
* }
*/
/**
* 路由的层级设置
* 一级children下的一级路由为menu菜单的最外层例如首页、系统设置、权限管理在这里我称它为 `children下的一级路由`
* children下的一级路由内在设置children则是在一级当前菜单下再配置菜单
* 依此类推
*/
export const dynamicRoutes: RouteRecordRaw[] = [
{
path: "/",
name: "/",
redirect: "/home",
component: () => import("@/layout/index.vue"), // 容器布局-顶层路由
meta: {
keepAlive: true
},
// 二级路由-主要渲染页面
children: [
{
path: "/home",
name: "home",
component: () => import("@/views/home/home.vue"),
meta: {
title: "home", // 国际化
hide: false, // 是否隐藏此路由
keepAlive: false, // 缓存组件状态
affix: true, // 固定在tagesView栏上
link: "", // 是否外链
iframe: false, // 是否内嵌窗口
roles: ["admin", "common"], // 路由权限
svgIcon: "home" // 菜单图标
}
},
{
path: "/home2",
name: "home2",
component: () => import("@/views/home/home.vue"),
meta: {
title: "home", // 国际化
hide: false, // 是否隐藏此路由
keepAlive: false, // 缓存组件状态
affix: true, // 固定在tagesView栏上
link: "", // 是否外链
iframe: false, // 是否内嵌窗口
roles: ["common"], // 路由权限
svgIcon: "home" // 菜单图标
}
},
{
path: "/table-management",
name: "table-management",
redirect: "/table-management/common-table",
meta: {
title: "table-management",
link: "",
hide: false,
keepAlive: true,
affix: true,
iframe: false,
roles: ["admin"],
svgIcon: "table"
},
children: [
{
path: "/table-management/common-table",
name: "common-table",
component: () => import("@/views/table-management/common-table/common-table.vue"),
meta: {
title: "common-table",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
icon: "icon-menu"
}
},
{
path: "/table-management/custom-table",
name: "custom-table",
component: () => import("@/views/table-management/custom-table/custom-table.vue"),
meta: {
title: "custom-table",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
icon: "icon-menu"
}
}
]
},
{
path: "/form-management",
name: "form-management",
redirect: "/form-management/common-form",
meta: {
title: "form-management",
link: "",
hide: false,
keepAlive: true,
affix: true,
iframe: false,
roles: ["admin"],
svgIcon: "form"
},
children: [
{
path: "/form-management/common-form",
name: "common-form",
component: () => import("@/views/form-management/common-form/common-form.vue"),
meta: {
title: "common-form",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
icon: "icon-menu"
}
},
{
path: "/form-management/dynamic-form",
name: "dynamic-form",
component: () => import("@/views/form-management/dynamic-form/dynamic-form.vue"),
meta: {
title: "dynamic-form",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
icon: "icon-menu"
}
}
]
},
{
path: "/multilevel-menu",
name: "multilevel-menu",
redirect: "/multilevel-menu/second-menu-1",
meta: {
title: "multilevel-menu",
link: "",
hide: false,
keepAlive: true,
affix: true,
iframe: false,
roles: ["admin"],
svgIcon: "switch"
},
children: [
{
path: "/multilevel-menu/second-menu-1",
name: "second-menu-1",
component: () => import("@/views/multilevel-menu/second-menu/second-menu-1.vue"),
meta: {
title: "second-menu-1",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
icon: "icon-menu"
}
},
{
path: "/multilevel-menu/second-menu-2",
name: "second-menu-2",
redirect: "/multilevel-menu/third-menu-1",
meta: {
title: "second-menu-2",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
icon: "icon-menu"
},
children: [
{
path: "/multilevel-menu/third-menu-1",
name: "third-menu-1",
component: () => import("@/views/multilevel-menu/third-menu/third-menu-1.vue"),
meta: {
title: "third-menu-1",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
icon: "icon-menu"
}
},
{
path: "/multilevel-menu/third-menu-2",
name: "third-menu-2",
component: () => import("@/views/multilevel-menu/third-menu/third-menu-2.vue"),
meta: {
title: "third-menu-2",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
icon: "icon-menu"
}
},
...testMultilevelMenu
]
}
]
},
{
path: "/personal-center",
name: "personal-center",
meta: {
title: "personal-center",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
svgIcon: "user"
},
children: [
{
path: "/personal-center/userinfo",
name: "userinfo",
component: () => import("@/views/personal-center/userinfo/userinfo.vue"),
meta: {
title: "userinfo",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
icon: "icon-menu"
},
children: []
},
{
path: "/personal-center/user-settings",
name: "user-settings",
component: () => import("@/views/personal-center/user-settings/user-settings.vue"),
meta: {
title: "user-settings",
link: "",
hide: false,
keepAlive: true,
affix: false,
iframe: false,
roles: ["admin"],
icon: "icon-menu"
},
children: []
}
]
},
{
path: "/internationalization",
name: "internationalization",
component: () => import("@/views/internationalization/internationalization.vue"),
meta: {
title: "internationalization",
hide: false,
keepAlive: true,
affix: false,
link: "",
iframe: false,
roles: ["admin", "common"],
svgIcon: "earth"
}
},
{
path: "/about-project",
name: "about-project",
component: () => import("@/views/about-project/about-project.vue"),
meta: {
title: "about-project",
hide: false,
keepAlive: true,
affix: false,
link: "",
iframe: false,
roles: ["admin", "common"],
svgIcon: "about"
}
}
]
}
];
/**
* 静态路由 (默认路由)
* 此路由不要动,用于做静态路由定向,如果要添加路由,请在 `dynamicRoutes数组` 中添加
* @description 前端控制路由 直接改 dynamicRoutes 中的路由,后端控制则不需要,请求接口路由数据时,覆盖 dynamicRoutes 第一个顶层 children 的内容(全屏,不包括 lauyout 中的路由出口)
* @returns 返回路由菜单数据
*/
export const staticRoutes = [
{
path: "/login",
name: "login",
component: () => import("@/views/login/login.vue"),
meta: {
title: "login"
}
}
/**
* 提示:写在这里的为全屏界面,不建议写在这里
* 非全屏界面,请写在 dynamicRoutes 路由数组中
*/
];
/**
* 定义404、401界面
* @link 参考https://router.vuejs.org/zh/guide/essentials/history-mode.html#netlify
*/
export const notFoundAndNoPower = [
{
path: "/401",
name: "no-power",
component: () => import("@/views/error/401.vue"),
meta: {
title: "not-power",
hide: true
}
},
{
path: "/:path(.*)*", // 匹配任意路由,兜底,未找到页面的时候跳转该页面
name: "not-found",
component: () => import("@/views/error/404.vue"),
meta: {
title: "not-found",
hide: true
}
}
];