router.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import Vue from 'vue'
  2. import Router from 'vue-router'
  3. import {config, trim} from './helper'
  4. import _ from "lodash";
  5. import marketRouter from './router-market.js'
  6. // 默认title
  7. document.title = config('SITE_NAME');
  8. // title 模板
  9. const siteTitleTpl = config('SITE_TITLE_TPL');
  10. // 路由配置
  11. const routes = [
  12. {
  13. path: '/',
  14. name: 'index',
  15. component: () => import('./views/index.vue')
  16. },
  17. {
  18. path: '*',
  19. component: () => import('./views/error.vue')
  20. },
  21. {
  22. path: '/sales/partnerList/partnerDetail',
  23. name: 'partnerDetail',
  24. component: () => import('./views/sales/partnerDetail.vue'),
  25. alias: ['/sales/examineList/examineDetail']
  26. },
  27. {
  28. path: '/sales/withdrawList/withdrawDetail',
  29. name: 'withdrawDetail',
  30. alias: '/sales/settleList/settleDetail',
  31. component: () => import('./views/sales/withdrawDetail.vue')
  32. },
  33. {
  34. path: '/sales/distribution/poster',
  35. name: 'poster',
  36. component: () => import('./views/sales/codePoster.vue')
  37. },
  38. {
  39. path: '/order/orderList/orderDetail',
  40. name: 'orderDetail',
  41. component: () => import('./views/order/orderDetail.vue')
  42. },
  43. {
  44. path: '/userMage/userList/userDetail',
  45. name: 'userDetail',
  46. component: () => import('./views/userManage/userDetail.vue')
  47. },
  48. {
  49. path: '/boardMsg/inforList/inforDetail',
  50. name: 'inforDetail',
  51. component: () => import('./views/boardMsg/inforDetail.vue')
  52. }
  53. ];
  54. // 路由自动加载
  55. const routeComponent = require.context(
  56. './views',
  57. true,
  58. /\.vue$/
  59. );
  60. routeComponent.keys().forEach(fileName => {
  61. // 过滤组件
  62. if (fileName.indexOf('components/') !== -1 || fileName === "index") {
  63. return;
  64. }
  65. const path = '/' + trim(fileName.replace(/^\.\/(.*)\.\w+$/, '$1'), '/', 'left');
  66. routes.push({
  67. path: path,
  68. name: path,
  69. component: routeComponent(fileName).default
  70. })
  71. });
  72. Vue.use(Router);
  73. const router = new Router({
  74. mode: 'history',
  75. routes: [...routes, ...marketRouter]
  76. });
  77. const originalPush = Router.prototype.push
  78. Router.prototype.push = function push(location) {// 解决路由重复报错的问题
  79. return originalPush.call(this, location).catch(err => err)
  80. }
  81. // title 设置
  82. export const setTitle = function (to) {
  83. let title = config('SITE_NAME');
  84. let currentMenu = {};
  85. if (router.app.$store.getters.getAdminMenu.length) {
  86. router.app.$store.getters.getAdminMenu.forEach(item => {
  87. if (item.url === to.path) {
  88. title = siteTitleTpl.replace(/{title}/g, item.name);
  89. currentMenu = _.cloneDeep(item);
  90. }
  91. });
  92. }
  93. router.app.$store.dispatch('updateCurrentMenu', currentMenu);
  94. document.title = title;
  95. };
  96. router.afterEach(to => {
  97. if (router.app.$store.getters.getAdminMenu.length !== 0) {
  98. setTitle(to)
  99. }
  100. window.scrollTo(0, 0);
  101. });
  102. export default router