diff --git a/src/mock/login/index.js b/src/mock/login/index.js index 10b23b01..10ec314f 100644 --- a/src/mock/login/index.js +++ b/src/mock/login/index.js @@ -26,7 +26,8 @@ Mock.mock('/login', 'post', ({url, type, body}) => { code: 0, msg: '登陆成功', data: { - ...user + ...user, + token: '1234567890' } } } else { diff --git a/src/pages/core/login/index.vue b/src/pages/core/login/index.vue index b27ba78b..465cfe1b 100644 --- a/src/pages/core/login/index.vue +++ b/src/pages/core/login/index.vue @@ -82,6 +82,7 @@ export default { } Cookies.set('username', res.username, setting) Cookies.set('password', res.password, setting) + Cookies.set('token', res.token, setting) this.$router.push({ name: 'index' }) diff --git a/src/plugin/axios/index.js b/src/plugin/axios/index.js index a5de929d..62f96ca1 100644 --- a/src/plugin/axios/index.js +++ b/src/plugin/axios/index.js @@ -4,7 +4,7 @@ import axios from 'axios' axios.interceptors.response.use(res => { // 在这里对返回的数据进行处理 - if (res.data.code) { + if (res.data.code !== undefined) { if (res.data.code !== 0) { Message.error(res.data.msg) return Promise.reject(res.data.msg) diff --git a/src/router/index.js b/src/router/index.js index 23884b41..68134178 100755 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,16 +1,37 @@ import Vue from 'vue' import VueRouter from 'vue-router' +import Cookies from 'js-cookie' // 在菜单中显示的那部分路由 -import { router } from '@/router/menu/index.js' +import * as menu from '@/router/menu/index.js' // 不在菜单中显示的那部分路由 -import invisibleRouter from './invisible/index.js' +import invisible from './invisible/index.js' Vue.use(VueRouter) -export default new VueRouter({ +let router = new VueRouter({ routes: [ - ...router, - ...invisibleRouter + ...menu.router, + ...invisible ] }) + +router.beforeEach((to, from, next) => { + // 需要身份校验 + if (to.meta.requiresAuth) { + // 这里暂时将cookie里是否存有token作为验证是否登陆的条件 请根据自身业务需要修改 + if (Cookies.get('token')) { + next() + } else { + // 没有登陆的时候跳转到登陆界面 + next({ + name: 'login' + }) + } + } else { + // 不需要身份校验 直接通过 + next() + } +}) + +export default router diff --git a/src/router/invisible/index.js b/src/router/invisible/index.js index 897bb102..5025949a 100644 --- a/src/router/invisible/index.js +++ b/src/router/invisible/index.js @@ -10,6 +10,9 @@ export default [ { path: 'index', name: 'index', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/core/index/index.vue'], resolve) } } ] diff --git a/src/router/menu/_business.js b/src/router/menu/_business.js index f7f128a8..c7f1b1ad 100644 --- a/src/router/menu/_business.js +++ b/src/router/menu/_business.js @@ -3,6 +3,9 @@ export const menu = { title: '业务演示', path: '/demo/business', name: 'demo-business', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/components/core/MainLayout/index.vue'], resolve) }, // redirect: { // name: '' @@ -18,6 +21,9 @@ export const menu = { icon: 'file-o', path: 'data/worker', name: 'demo-business-data-worker', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/business/data/worker/index.vue'], resolve) } } ] diff --git a/src/router/menu/_plugin.js b/src/router/menu/_plugin.js index af1b7fbb..b2daef65 100644 --- a/src/router/menu/_plugin.js +++ b/src/router/menu/_plugin.js @@ -3,6 +3,9 @@ export const menu = { title: '功能', path: '/demo/plugins', name: 'demo-plugins', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/components/core/MainLayout/index.vue'], resolve) }, // redirect: { // name: 'demo-plugins-marked-readme' @@ -18,6 +21,9 @@ export const menu = { icon: 'file-o', path: 'marked/demo', name: 'demo-plugins-marked-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/marked/demo.vue'], resolve) } }, { @@ -25,6 +31,9 @@ export const menu = { icon: 'file-o', path: 'marked/demoHighlight', name: 'demo-plugins-marked-demoHighlight', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/marked/demoHighlight.vue'], resolve) } } ] @@ -39,6 +48,9 @@ export const menu = { icon: 'file-o', path: 'simpleMDE/demo', name: 'demo-plugins-simpleMDE-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/simpleMDE/demo.vue'], resolve) } } ] @@ -53,6 +65,9 @@ export const menu = { icon: 'file-o', path: 'quill/demo', name: 'demo-plugins-quill-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/quill/demo.vue'], resolve) } } ] @@ -67,6 +82,9 @@ export const menu = { icon: 'file-o', path: 'font-awesome/list', name: 'demo-font-awesome-list', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/font-awesome/list.vue'], resolve) } }, { @@ -74,6 +92,9 @@ export const menu = { icon: 'file-o', path: 'font-awesome/select', name: 'demo-font-awesome-select', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/font-awesome/select.vue'], resolve) } } ] @@ -88,6 +109,9 @@ export const menu = { icon: 'file-o', path: 'vue-grid-layout/demo', name: 'demo-plugins-vue-grid-layout-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/vue-grid-layout/demo.vue'], resolve) } } ] @@ -102,6 +126,9 @@ export const menu = { icon: 'file-o', path: 'timeago/demo', name: 'demo-plugins-timeago-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/timeago/demo.vue'], resolve) } } ] @@ -116,6 +143,9 @@ export const menu = { icon: 'file-o', path: 'papaParse/demo', name: 'demo-plugins-papaParse-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/papaParse/demo.vue'], resolve) } } ] @@ -130,6 +160,9 @@ export const menu = { icon: 'file-o', path: 'countup/demo', name: 'demo-plugins-countup-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/countup/demo.vue'], resolve) } } ] @@ -144,6 +177,9 @@ export const menu = { icon: 'file-o', path: 'clipboard-polyfill/demo', name: 'demo-plugins-clipboard-polyfill-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/clipboard-polyfill/demo.vue'], resolve) } } ] @@ -158,6 +194,9 @@ export const menu = { icon: 'file-o', path: 'js-cookie/demo', name: 'demo-plugins-js-cookie-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/js-cookie/demo.vue'], resolve) } } ] @@ -172,6 +211,9 @@ export const menu = { icon: 'file-o', path: 'highlight/demo', name: 'demo-plugins-highlight-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/highlight/demo.vue'], resolve) } } ] @@ -186,6 +228,9 @@ export const menu = { icon: 'file-o', path: 'mock/demoDTD', name: 'demo-plugins-mock-demoDTD', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/mock/demoDTD.vue'], resolve) } }, { @@ -193,6 +238,9 @@ export const menu = { icon: 'file-o', path: 'mock/demoDPD', name: 'demo-plugins-mock-demoDPD', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/mock/demoDPD.vue'], resolve) } }, { @@ -200,6 +248,9 @@ export const menu = { icon: 'file-o', path: 'mock/ajax', name: 'demo-plugins-mock-ajax', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/mock/ajax.vue'], resolve) } } ] @@ -214,6 +265,9 @@ export const menu = { icon: 'file-o', path: 'vue-splitpane/demo', name: 'demo-plugins-vue-splitpane-demo', + meta: { + requiresAuth: true + }, component: resolve => { require(['@/pages/demo/plugins/vue-splitpane/demo.vue'], resolve) } } ]