|
@@ -0,0 +1,86 @@
|
|
|
+// import Vue from 'vue'
|
|
|
+import router from "./router";
|
|
|
+// import store from './store'
|
|
|
+import { ElMessage } from "element-plus";
|
|
|
+// import NProgress from "nprogress"; // progress bar
|
|
|
+// import "nprogress/nprogress.css"; // progress bar style
|
|
|
+import { getToken } from "./utils/auth";
|
|
|
+// import getPageTitle from '@/utils/get-page-title'
|
|
|
+
|
|
|
+// NProgress.configure({ showSpinner: false }); // NProgress Configuration
|
|
|
+
|
|
|
+const whiteList = ["/login"]; // no redirect whitelist
|
|
|
+
|
|
|
+// let isOpen = false
|
|
|
+
|
|
|
+// router.onError((error: any) => {
|
|
|
+// if (error instanceof Error) {
|
|
|
+// const isChunkLoadFailed = error.name.indexOf('chunk')
|
|
|
+// const targetPath = router.history.pending.fullPath;
|
|
|
+// if (isChunkLoadFailed && !isOpen) {
|
|
|
+// isOpen = true
|
|
|
+// router.app.$confirm("网站有更新请点击确定刷新页面?", "更新提示", {
|
|
|
+// confirmButtonText: "确定",
|
|
|
+// cancelButtonText: "取消",
|
|
|
+// type: "warning"
|
|
|
+// })
|
|
|
+// .then(() => {
|
|
|
+// location.hash = targetPath
|
|
|
+// window.location.reload()
|
|
|
+// })
|
|
|
+// .catch(() => {
|
|
|
+// return
|
|
|
+// });
|
|
|
+// }
|
|
|
+// }
|
|
|
+// });
|
|
|
+
|
|
|
+router.beforeEach(async (to, from, next) => {
|
|
|
+ // from.query = to.query
|
|
|
+ // start progress bar
|
|
|
+ // NProgress.start();
|
|
|
+ const hasToken = getToken();
|
|
|
+ if (hasToken) {
|
|
|
+ if (to.path === "/login") {
|
|
|
+ // 如果有tonken直接跳转到首页
|
|
|
+ next({ path: "/" });
|
|
|
+
|
|
|
+ // NProgress.done();
|
|
|
+ } else {
|
|
|
+ const hasGetUserInfo = store.getters.phone;
|
|
|
+ // 有名字 说明有用户信息 跳走
|
|
|
+ if (hasGetUserInfo) {
|
|
|
+ next();
|
|
|
+ } else {
|
|
|
+ try {
|
|
|
+ // 异步获取用户信息
|
|
|
+ await store.dispatch("user/getInfo");
|
|
|
+
|
|
|
+ next({ ...to, replace: true });
|
|
|
+ } catch (error: any) {
|
|
|
+ // remove token and go to login page to re-login
|
|
|
+ await store.dispatch("user/resetToken");
|
|
|
+ if (error.msg) {
|
|
|
+ ElMessage.error(error.msg);
|
|
|
+ }
|
|
|
+ next(`/login`);
|
|
|
+ // NProgress.done();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ /* has no token*/
|
|
|
+ if (whiteList.indexOf(to.path) !== -1) {
|
|
|
+ // in the free login whitelist, go directly
|
|
|
+ next();
|
|
|
+ } else {
|
|
|
+ // other pages that do not have permission to access are redirected to the login page.
|
|
|
+ next(`/login`);
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
+router.afterEach(() => {
|
|
|
+ // finish progress bar
|
|
|
+ // NProgress.done();
|
|
|
+});
|