index.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. const vueFile = import.meta.glob('/src/views/**/*.vue')
  22. // 这个方法可以动态添加 路由
  23. function text() {
  24. let a = [{
  25. path: 'test',
  26. component: '/src/views/settings/Test.vue',
  27. title: '测试页面',
  28. icon: 'iconfont icon-dianhua'
  29. }]
  30. a.forEach(item => {
  31. let data = {
  32. path: '/' + item.path,
  33. name: item.title,
  34. meta: {
  35. title: item.title
  36. },
  37. component: vueFile[`${item.component}`]
  38. }
  39. router.addRoute(data)
  40. })
  41. }
  42. export function addRoutes() {
  43. text()
  44. let modules = [...Dashboard]
  45. System.forEach((item) => {
  46. modules.push(item)
  47. router.addRoute(item)
  48. })
  49. routesAsynced = true
  50. }
  51. const whiteList = ['/login', '/dashboard', '/scrollSource', '/404', '/401', '/']
  52. router.beforeEach((to, _from, next) => {
  53. if (to.meta.passRule) {
  54. to.meta.title ? changeTitle(to.meta.title) : ''
  55. next()
  56. return
  57. } else if (to.meta.blankPage) {
  58. to.meta.title ? changeTitle(to.meta.title) : ''
  59. next(to.query.path)
  60. return
  61. }
  62. if (to.meta.parent) {
  63. to.meta.title ? changeTitle(to.meta.title) : ''
  64. next(to.meta.parent)
  65. return
  66. }
  67. NProgress.start()
  68. if (!routesAsynced) {
  69. addRoutes()
  70. }
  71. if (store.state.user.token || whiteList.indexOf(to.path) !== -1) {
  72. to.meta.title ? changeTitle(to.meta.title) : '' // 动态title
  73. next()
  74. } else {
  75. next('/login') // 全部重定向到登录页
  76. to.meta.title ? changeTitle(to.meta.title) : '' // 动态title
  77. }
  78. })
  79. router.afterEach((to, _from) => {
  80. const keepAliveComponentsName = store.getters['keepAlive/keepAliveComponentsName'] || []
  81. const name = to.matched[to.matched.length - 1].components.default.name
  82. if (to.meta && to.meta.cache && name && !keepAliveComponentsName.includes(name)) {
  83. store.commit('keepAlive/addKeepAliveComponentsName', name)
  84. }
  85. NProgress.done()
  86. })
  87. export {modules}
  88. export default router