import Vue from "vue"; import VueRouter from "vue-router"; import store from "../store"; Vue.use(VueRouter); const routes = [ { path: "/", redirect: "/home", }, { path: "/home", name: "home", component: () => import(/* webpackChunkName: "home" */ "../views/home/Home.vue"), }, { path: "/login", name: "login", component: () => import(/* webpackChunkName: "login" */ "../views/login.vue"), }, { path: "/register", name: "register", component: () => import(/* webpackChunkName: "register" */ "../views/register.vue"), }, { path: "/account", name: "account", component: () => import(/* webpackChunkName: "account" */ "../views/account/account.vue"), }, { path: "/fund", name: "fund", component: () => import(/* webpackChunkName: "fund" */ "../views/fund/fund.vue"), }, { path: "/ipo", name: "ipo", component: () => import(/* webpackChunkName: "ipo" */ "../views/ipo/ipo.vue"), }, { path: "/blockTrading", name: "blockTrading", component: () => import( /* webpackChunkName: "blockTrading" */ "../views/blockTrading/blockTrading.vue" ), }, { path: "/aiTrading", name: "aiTrading", component: () => import( /* webpackChunkName: "aiTrading" */ "../views/aiTrading/aiTrading.vue" ), }, ]; const router = new VueRouter({ routes, // 避免重复导航错误 scrollBehavior: () => ({ y: 0 }), }); // 路由守卫 router.beforeEach((to, from, next) => { // 获取token const token = store.state.token || window.localStorage.getItem("USERTOKEN") || null; // 白名单路由,不需要登录就可以访问 const whiteList = ["/login", "/register"]; // 避免重复导航到当前位置 if (to.path === from.path) { return next(false); } // // 如果已登录且要去登录或注册页 // if (token && whiteList.includes(to.path)) { // // 已登录,跳转到首页 // next("/"); // } else if (whiteList.includes(to.path)) { // // 未登录,要去白名单页面,直接放行 // next(); // } else { // // 不在白名单中,需要验证token // if (token) { // // 有token,放行 // next(); // } else { // // 没有token,跳转到登录页 // next("/login"); // } // } if (to.meta.requireAuth && token) { next("/login"); return; } next(); }); // 捕获导航错误 const originalPush = VueRouter.prototype.push; VueRouter.prototype.push = function push(location) { return originalPush.call(this, location).catch((err) => { if (err.name !== "NavigationDuplicated") throw err; }); }; const originalReplace = VueRouter.prototype.replace; VueRouter.prototype.replace = function replace(location) { return originalReplace.call(this, location).catch((err) => { if (err.name !== "NavigationDuplicated") throw err; }); }; export default router;