diff --git a/package.json b/package.json index b654cef..e8d1e59 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "vue-echarts-v3": "1.0.3", "vue-quill-editor": "2.1.6", "vue-router": "^2.3.1", - "vue-simplemde": "0.3.8" + "vue-simplemde": "0.3.8", + "vuex": "^2.2.1" }, "devDependencies": { "autoprefixer": "^6.7.2", diff --git a/src/components/common/Header.vue b/src/components/common/Header.vue index ff4f289..83e4a9d 100644 --- a/src/components/common/Header.vue +++ b/src/components/common/Header.vue @@ -23,14 +23,14 @@ }, computed:{ username(){ - let username = localStorage.getItem('ms_username'); + let username = this.$store.state.user.username; return username ? username : this.name; } }, methods:{ handleCommand(command) { if(command == 'loginout'){ - localStorage.removeItem('ms_username') + this.$store.commit('logout'); this.$router.push('/login'); } } diff --git a/src/components/page/Login.vue b/src/components/page/Login.vue index aa3c17d..4a9e72f 100644 --- a/src/components/page/Login.vue +++ b/src/components/page/Login.vue @@ -7,7 +7,8 @@ - +
登录 @@ -20,7 +21,7 @@ \ No newline at end of file + diff --git a/src/main.js b/src/main.js index 6472eb8..703c770 100644 --- a/src/main.js +++ b/src/main.js @@ -7,9 +7,14 @@ import 'element-ui/lib/theme-default/index.css'; // 默认主题 // import '../static/css/theme-green/index.css'; // 浅绿色主题 import "babel-polyfill"; import './mock/index.js'; +import qs from 'qs'; +import store from 'store'; Vue.use(ElementUI); Vue.prototype.$axios = axios; +Vue.prototype.$qs = qs; +Vue.prototype.$store = store; + new Vue({ router, render: h => h(App) -}).$mount('#app'); \ No newline at end of file +}).$mount('#app'); diff --git a/src/mock/index.js b/src/mock/index.js index 2300863..d53de4f 100644 --- a/src/mock/index.js +++ b/src/mock/index.js @@ -1,11 +1,12 @@ import Mock from 'mockjs'; import {vuetable} from './vuetable.js'; import {datasource} from './datasource.js'; +import {user} from './user.js'; -let data = [].concat(vuetable,datasource); +let data = [].concat(vuetable,datasource,user); data.forEach(function(res){ Mock.mock(res.path, res.data); }); -export default Mock; \ No newline at end of file +export default Mock; diff --git a/src/mock/user.js b/src/mock/user.js new file mode 100644 index 0000000..807c215 --- /dev/null +++ b/src/mock/user.js @@ -0,0 +1,23 @@ +export const user = [ + { + path: '/api/user', + data: { + 'errno|0-1': 1, + 'errmsg': function () { + if (this.errno == 1) { + return '用户名或密码错误'; + } + return ''; + }, + 'user': { + "id": "@natural", + "username": "@cname", + "auth": function () { + var base = ["/basetable", "/vuetable", "/baseform", "/vueeditor", "/markdown", "/upload", "/basecharts", "/mixcharts"] + var start = Math.floor(Math.random() * (base.length - 1)) + return ["/", "/login", "/logout", "/readme"].concat(base.slice(-start)); + } + } + } + } +] diff --git a/src/router/index.js b/src/router/index.js index bc21a26..e78906c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -3,7 +3,7 @@ import Router from 'vue-router'; Vue.use(Router); -export default new Router({ +const router = new Router({ routes: [ { path: '/', @@ -12,7 +12,7 @@ export default new Router({ { path: '/readme', component: resolve => require(['../components/common/Home.vue'], resolve), - children:[ + children: [ { path: '/', component: resolve => require(['../components/page/Readme.vue'], resolve) @@ -57,3 +57,27 @@ export default new Router({ }, ] }) + +router.beforeEach((to, from, next) => { + + if (to.path === '/login' || to.name === 'login') { + next() + } else { + var user = router.app.$store.state.user + // 通过state获取权限,登录成功时,获取列表 + if (!user.id) { + return next({path: '/login'}) + } + var auth = user.auth.some(auth => to.path == auth); + + if (!auth) { + router.app.$alert('没有权限', '错误', { + confirmButtonText: '确定' + }) + } + next(auth) + } + +}) + +export default router diff --git a/src/store.js b/src/store.js new file mode 100644 index 0000000..ed7eb26 --- /dev/null +++ b/src/store.js @@ -0,0 +1,21 @@ +/** + * Created by Administrator on 2017.05.16. + */ +import Vue from 'vue'; +import Vuex from 'vuex' + +Vue.use(Vuex) + +export default new Vuex.Store({ + state: { + user: {} + }, + mutations: { + login (state, user) { + state.user = user; + }, + logout (state) { + state.user = {}; + } + } +})