作者 朱兆平

用户登录适配权限目录问题,登陆后已适配,一刷新 vue router就初始化为以前的了 已解决

@@ -17,7 +17,6 @@ export const requestLogin = params => { @@ -17,7 +17,6 @@ export const requestLogin = params => {
17 for (let it in data) { 17 for (let it in data) {
18 ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&' 18 ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
19 } 19 }
20 - console.log(ret)  
21 return ret 20 return ret
22 }], 21 }],
23 headers: { 22 headers: {
@@ -28,15 +28,15 @@ Vue.use(VueRouter) @@ -28,15 +28,15 @@ Vue.use(VueRouter)
28 Vue.use(Vuex) 28 Vue.use(Vuex)
29 29
30 //NProgress.configure({ showSpinner: false }); 30 //NProgress.configure({ showSpinner: false });
31 - 31 +console.log("mainjs:");
  32 +console.log(rout.routes);
32 const router = new VueRouter({ 33 const router = new VueRouter({
33 routes:rout.routes 34 routes:rout.routes
34 -})  
35 -//判断本地存储的用户栏目列表是否存在,如果存在则加载路由  
36 -if(sessionStorage.getItem('menu')){  
37 - rout.setUserMenus(JSON.parse(sessionStorage.getItem('menu')));  
38 - router.options.routes = rout.routes  
39 -} 35 +});
  36 +
  37 +//本地存储系统初始化的router路由,用来处理用户退出后,把路由数据初始化
  38 +sessionStorage.setItem('sysMenu', JSON.stringify(rout.routes));
  39 +
40 router.beforeEach((to, from, next) => { 40 router.beforeEach((to, from, next) => {
41 //NProgress.start(); 41 //NProgress.start();
42 if (to.path == '/login') { 42 if (to.path == '/login') {
@@ -84,11 +84,37 @@ let routes = [ @@ -84,11 +84,37 @@ let routes = [
84 redirect: { path: '/404' } 84 redirect: { path: '/404' }
85 } 85 }
86 ]; 86 ];
87 - 87 +let initRouters = routes.concat();
88 let setUserMenus = function (list) { 88 let setUserMenus = function (list) {
89 routes = list; 89 routes = list;
90 - let s= 1; 90 +}
  91 +/**
  92 + * 处理登陆后的账号对应的菜单
  93 + * @param menuList
  94 + */
  95 +let handleMenuList = function (router,menu) {
  96 + var _self = this;
  97 + var routerName = "";
  98 + router.forEach(function (v_router) {
  99 + routerName = v_router.name;
  100 + menu.forEach(function (v_menu) {
  101 + //查找返回的目录列表是否包含路由名称,有就返回匹配到的元素,没有就移除
  102 + let result = menu.find(item => {
  103 + return item.name === routerName;
  104 + });
  105 +
  106 + //匹配到继续判断是否子元素,有子元素继续递归
  107 + if (result) {
  108 + if(v_router.children) {
  109 + _self.handleMenuList(v_router.children,result.children);
  110 + }
  111 + //没有则可以移除
  112 + }else {
  113 + router.splice(router.findIndex(itm => itm.name === routerName ),1);
  114 + }
  115 + })
  116 + });
91 } 117 }
92 export default { 118 export default {
93 - routes,setUserMenus 119 + routes,setUserMenus,handleMenuList,initRouters
94 }; 120 };
@@ -71,6 +71,7 @@ @@ -71,6 +71,7 @@
71 </template> 71 </template>
72 72
73 <script> 73 <script>
  74 + import rt from '../routes'
74 export default { 75 export default {
75 data() { 76 data() {
76 return { 77 return {
@@ -109,6 +110,13 @@ @@ -109,6 +110,13 @@
109 //type: 'warning' 110 //type: 'warning'
110 }).then(() => { 111 }).then(() => {
111 sessionStorage.removeItem('user'); 112 sessionStorage.removeItem('user');
  113 + sessionStorage.removeItem('menu');
  114 +
  115 + //退出后初始化原来的路由
  116 + let sysRoutes = JSON.parse(sessionStorage.getItem('sysMenu'));
  117 + console.log(sysRoutes);
  118 + _this.$router.options.routes = sysRoutes;
  119 +
112 _this.$router.push('/login'); 120 _this.$router.push('/login');
113 }).catch(() => { 121 }).catch(() => {
114 122
@@ -125,13 +133,22 @@ @@ -125,13 +133,22 @@
125 } 133 }
126 }, 134 },
127 mounted() { 135 mounted() {
  136 + var _this = this;
128 var user = sessionStorage.getItem('user'); 137 var user = sessionStorage.getItem('user');
129 if (user) { 138 if (user) {
130 user = JSON.parse(user); 139 user = JSON.parse(user);
131 this.sysUserName = user.username || ''; 140 this.sysUserName = user.username || '';
132 this.sysUserAvatar = user.userface || '/static/images/faceDefault.jpg'; 141 this.sysUserAvatar = user.userface || '/static/images/faceDefault.jpg';
133 } 142 }
134 - 143 + //操作路由,判断本地存储的用户栏目列表是否存在,如果存在则加载路由
  144 + var userRouters = sessionStorage.getItem('menu');
  145 + if (userRouters) {
  146 + userRouters = JSON.parse(userRouters);
  147 + let sysMenus = _this.$router.options.routes;
  148 + rt.handleMenuList(sysMenus,userRouters);
  149 + console.log("home:");
  150 + console.log(_this.$router.options.routes);
  151 + }
135 } 152 }
136 } 153 }
137 154
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 33
34 <script> 34 <script>
35 import { requestLogin,getuserMenus } from '../api/api'; 35 import { requestLogin,getuserMenus } from '../api/api';
36 - import routes from '../routes' 36 + import rt from '../routes'
37 //import NProgress from 'nprogress' 37 //import NProgress from 'nprogress'
38 export default { 38 export default {
39 data() { 39 data() {
@@ -66,11 +66,7 @@ @@ -66,11 +66,7 @@
66 handleReset2() { 66 handleReset2() {
67 this.$refs.ruleForm2.resetFields(); 67 this.$refs.ruleForm2.resetFields();
68 }, 68 },
69 - /**  
70 - * 处理登陆后的账号对应的菜单  
71 - * @param menuList  
72 - */  
73 - handleMenuList: function (router,menu) { 69 + handleMenuList : function (router,menu) {
74 var _self = this; 70 var _self = this;
75 var routerName = ""; 71 var routerName = "";
76 router.forEach(function (v_router) { 72 router.forEach(function (v_router) {
@@ -84,14 +80,18 @@ @@ -84,14 +80,18 @@
84 //匹配到继续判断是否子元素,有子元素继续递归 80 //匹配到继续判断是否子元素,有子元素继续递归
85 if (result) { 81 if (result) {
86 if(v_router.children) { 82 if(v_router.children) {
87 - _self.handleMenuList(v_router.children,v_menu.children); 83 + _self.handleMenuList(v_router.children,result.children);
88 } 84 }
89 //没有则可以移除 85 //没有则可以移除
90 }else { 86 }else {
91 router.splice(router.findIndex(itm => itm.name === routerName ),1); 87 router.splice(router.findIndex(itm => itm.name === routerName ),1);
92 } 88 }
93 }) 89 })
94 - }) 90 + });
  91 + console.log("longined router:");
  92 + console.log(_self.$router.options.routes);
  93 + //本地存储用户目录 ,防刷新目录丢失用
  94 + sessionStorage.setItem('menu', JSON.stringify(_self.$router.options.routes));
95 }, 95 },
96 handleSubmit2: function (ev) { 96 handleSubmit2: function (ev) {
97 var _this = this; 97 var _this = this;
@@ -105,8 +105,10 @@ @@ -105,8 +105,10 @@
105 this.logining = false; 105 this.logining = false;
106 //NProgress.done(); 106 //NProgress.done();
107 let status = res.status; 107 let status = res.status;
108 - let user = res.data.principal;  
109 - let loginSuccess = res.data.authenticated; 108 + let authentication = res.data.authentication;
  109 + let user = authentication.principal;
  110 + let loginSuccess = authentication.authenticated;
  111 + let loginUserMenus = res.data.loginUserMenus;
110 if (status !== 200) { 112 if (status !== 200) {
111 let msg = "登录错误"; 113 let msg = "登录错误";
112 this.$message({ 114 this.$message({
@@ -115,14 +117,20 @@ @@ -115,14 +117,20 @@
115 }); 117 });
116 } else if (loginSuccess) { 118 } else if (loginSuccess) {
117 sessionStorage.setItem('user', JSON.stringify(user)); 119 sessionStorage.setItem('user', JSON.stringify(user));
118 - getuserMenus('').then(res => {  
119 - if(res && res.status===200){  
120 - _this.userMenus = res.data.list;  
121 - this.handleMenuList(routes.routes,_this.userMenus);  
122 - //本地存储用户目录 ,防刷新目录丢失用  
123 - sessionStorage.setItem('menu', JSON.stringify(routes.routes));  
124 - }  
125 - }); 120 + //处理用户menu
  121 + _this.userMenus = loginUserMenus.list;
  122 + console.log("userMenus:");
  123 + console.log(_this.userMenus);
  124 + console.log(loginUserMenus.list);
  125 + let sysMenus = _this.$router.options.routes;
  126 +
  127 + console.log("sysMenus:");
  128 + console.log(sysMenus);
  129 +
  130 + _this.handleMenuList(sysMenus,_this.userMenus);
  131 +
  132 + console.log("user:");
  133 + console.log(_this.$router.options.routes);
126 this.$router.push({path: '/main'}); 134 this.$router.push({path: '/main'});
127 } 135 }
128 }).catch(error => { 136 }).catch(error => {
@@ -5,7 +5,26 @@ @@ -5,7 +5,26 @@
5 </template> 5 </template>
6 6
7 <script> 7 <script>
  8 + import rt from '../routes'
8 export default { 9 export default {
  10 + mounted() {
  11 + var _this = this;
  12 + var user = sessionStorage.getItem('user');
  13 + if (user) {
  14 + user = JSON.parse(user);
  15 + this.sysUserName = user.username || '';
  16 + this.sysUserAvatar = user.userface || '/static/images/faceDefault.jpg';
  17 + }
  18 + //操作路由,判断本地存储的用户栏目列表是否存在,如果存在则加载路由
  19 + var userRouters = sessionStorage.getItem('menu');
  20 + if (userRouters) {
  21 + userRouters = JSON.parse(userRouters);
  22 + let sysMenus = _this.$router.options.routes;
  23 + rt.handleMenuList(sysMenus,userRouters);
  24 + console.log("main:");
  25 + console.log(_this.$router.options.routes);
  26 + }
  27 + }
9 } 28 }
10 29
11 </script> 30 </script>