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/common/Sidebar.vue b/src/components/common/Sidebar.vue
index b1f87dd..d3b9ff5 100644
--- a/src/components/common/Sidebar.vue
+++ b/src/components/common/Sidebar.vue
@@ -5,7 +5,7 @@
{{ item.title }}
- {{ subItem.title }}
+ {{ subItem.title }}
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 = {};
+ }
+ }
+})