index.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import Vue from 'vue';
  2. import VueRouter from 'vue-router';
  3. import HomeView from '../views/HomeView.vue';
  4. Vue.use(VueRouter);
  5. const routes = [
  6. {
  7. path: '/',
  8. name: 'home',
  9. component: HomeView,
  10. },
  11. {
  12. path: '/about',
  13. name: 'about',
  14. // route level code-splitting
  15. // this generates a separate chunk (about.[hash].js) for this route
  16. // which is lazy-loaded when the route is visited.
  17. component: () =>
  18. import(/* webpackChunkName: "about" */ '../views/AboutView.vue'),
  19. },
  20. {
  21. path: '/login',
  22. name: 'login',
  23. component: () => import('../views/Login.vue'),
  24. },
  25. ];
  26. const router = new VueRouter({
  27. routes,
  28. });
  29. // 由于后台管理系统 需要用户登录后才可以访问页面
  30. // 因此这里要拦截所有的路由,校验用户是否登录
  31. router.beforeEach((to, from, next) => {
  32. // 无论什么情况下 都要确保next被调用一次
  33. const token = localStorage.getItem('token');
  34. if (token) {
  35. // 说明登录过
  36. if (to.name === 'login') {
  37. // 如果登录过并且还是去登录页面, 此时就中断当前导航,并重新导航到主页
  38. return next('/');
  39. }
  40. next(); // 放行
  41. } else {
  42. // 就没有登录过
  43. if (to.name === 'login') return next();
  44. // 如果没有登录,同时 你去的页面还不是登录页面
  45. // 此时 强制你 去登录页面
  46. next({ name: 'login' });
  47. }
  48. });
  49. export default router;