index.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /**
  2. * @description 所有人可使用的参数配置列表
  3. * @params hideMenu: 是否隐藏当前路由结点不在导航中展示
  4. * @params alwaysShow: 只有一个子路由时是否总是展示菜单,默认false
  5. */
  6. import {createRouter, createWebHistory} from 'vue-router'
  7. import store from '@/store'
  8. import NProgress from '@/utils/system/nprogress'
  9. import {changeTitle} from '@/utils/system/title'
  10. // 动态路由相关引入数据
  11. // 引入modules
  12. import Dashboard from './modules/dashboard'
  13. import System from './modules/system'
  14. let modules = [...Dashboard]
  15. const routes = modules
  16. const router = createRouter({
  17. history: createWebHistory(),
  18. routes,
  19. })
  20. let routesAsynced = false
  21. export function addRoutes() {
  22. let modules = [...Dashboard]
  23. System.forEach((item) => {
  24. modules.push(item)
  25. router.addRoute(item)
  26. })
  27. routesAsynced = true
  28. }
  29. const whiteList = ['/login', '/dashboard', '/404', '/401', '/']
  30. router.beforeEach((to, _from, next) => {
  31. if (to.meta.blankPage && to.params.passRule) {
  32. to.meta.title ? changeTitle(to.params.name) : ''
  33. next()
  34. return
  35. } else if (to.meta.blankPage) {
  36. to.meta.title ? changeTitle(to.meta.title) : '' // 动态title
  37. next(to.query.path)
  38. return;
  39. }
  40. if (to.meta.parent) {
  41. to.meta.title ? changeTitle(to.meta.title) : '' // 动态title
  42. next(to.meta.parent)
  43. return
  44. }
  45. if (whiteList.indexOf(to.path) === -1) {
  46. const userPaths = [...store.state.user.paths]
  47. const toPathArr = to.path.split('/')
  48. const target = toPathArr[toPathArr.length - 1]
  49. if (userPaths.indexOf(target) === -1 && userPaths.indexOf('/' + target) === -1) {
  50. next('/401')
  51. }
  52. }
  53. NProgress.start()
  54. if (!routesAsynced) {
  55. addRoutes()
  56. }
  57. if (store.state.user.token || whiteList.indexOf(to.path) !== -1) {
  58. to.meta.title ? changeTitle(to.meta.title) : '' // 动态title
  59. next()
  60. } else {
  61. next('/login') // 全部重定向到登录页
  62. to.meta.title ? changeTitle(to.meta.title) : '' // 动态title
  63. }
  64. })
  65. router.afterEach((to, _from) => {
  66. const keepAliveComponentsName = store.getters['keepAlive/keepAliveComponentsName'] || []
  67. const name = to.matched[to.matched.length - 1].components.default.name
  68. if (to.meta && to.meta.cache && name && !keepAliveComponentsName.includes(name)) {
  69. store.commit('keepAlive/addKeepAliveComponentsName', name)
  70. }
  71. NProgress.done()
  72. })
  73. export {modules}
  74. export default router