Browse Source

权限修改

renmy 3 years ago
parent
commit
13483078e8

+ 15 - 1
src/layout/components/Sidebar/index.vue

@@ -19,7 +19,7 @@
 </template>
 
 <script>
-import { mapGetters } from 'vuex'
+import { mapGetters, mapState, mapActions } from 'vuex'
 import Logo from './Logo'
 import SidebarItem from './SidebarItem'
 import variables from '@/styles/variables.scss'
@@ -30,7 +30,21 @@ export default {
     ...mapGetters([
       'sidebar'
     ]),
+    
+    ...mapState("user", ['role']),
     routes() {
+      let role = this.role
+      let regx = /\//g
+      let roles = role.filter(res => res.match(regx).length ===  1)
+      let rolesChild = role.filter(res => res.match(regx).length !== 1)
+      console.log(rolesChild,"rolesChildrolesChildrolesChildrolesChild");
+      console.log(this.$router.options.routes,"rolesrolesrolesroles");
+      let parent = [...this.$router.options.routes].filter(element => roles.includes(element.path));
+      parent.forEach(element => {
+        element.children = element.children.filter(res => rolesChild.includes(element.path+'/'+res.path))
+      });
+      
+      console.log(parent,"asdsadsa");
       return this.$router.options.routes
     },
     activeMenu() {

+ 107 - 99
src/store/modules/user.js

@@ -3,114 +3,122 @@ import { getToken, setToken, removeToken } from '@/utils/auth'
 import { resetRouter } from '@/router'
 
 const getDefaultState = () => {
-  return {
-    token: getToken(),
-    name: '',
-    avatar: ''
-  }
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        role: []
+    }
 }
 
 const state = getDefaultState()
 
 const mutations = {
-  RESET_STATE: (state) => {
-    Object.assign(state, getDefaultState())
-  },
-  SET_TOKEN: (state, token) => {
-    state.token = token
-  },
-  SET_NAME: (state, name) => {
-    state.name = name
-  },
-  SET_AVATAR: (state, avatar) => {
-    state.avatar = avatar
-  }
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_ROLE: (state, data) => {
+        state.role = data
+    }
 }
 
 const actions = {
-  // user login
-  login({ commit }, userInfo) {
-    const { username, password } = userInfo
-    return new Promise((resolve, reject) => {
-      login({ username: username.trim(), password: password }).then(response => {
-        const { data } = response
-        commit('SET_TOKEN', data)
-        setToken(data)
-        resolve()
-      }).catch(error => {
-        reject(error)
-      })
-    })
-  },
-
-  // get user info
-  getInfo({ commit, state }) {
-    return new Promise((resolve, reject) => {
-      getInfo().then(response => {
-        const { data } = response
-
-        if (!data) {
-          return reject('Verification failed, please Login again.')
-        }
-
-        const { name, avatar } = data
-
-        commit('SET_NAME', name)
-        commit('SET_AVATAR', avatar)
-        resolve(data)
-      }).catch(error => {
-        reject(error)
-      })
-    })
-  },
-
-  // user logout
-  logout({ commit, state }) {
-    return new Promise((resolve, reject) => {
-      logout(state.token).then(() => {
-        removeToken() // must remove  token  first
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), password: password }).then(response => {
+                const { data } = response
+                commit('SET_TOKEN', data)
+                setToken(data)
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    setRole({ commit }, data) {
+        console.log(data, "dataddddddddddddd");
+        commit('SET_ROLE', data)
+    },
+
+    // get user info
+    getInfo({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                const { data } = response
+
+                if (!data) {
+                    return reject('Verification failed, please Login again.')
+                }
+
+                const { name, avatar } = data
+
+                commit('SET_NAME', name)
+                commit('SET_AVATAR', avatar)
+                resolve(data)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout(state.token).then(() => {
+                removeToken() // must remove  token  first
+                resetRouter()
+                commit('RESET_STATE')
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    },
+
+    async changeRoles({ commit, dispatch }, role) {
+        const token = role + '-token'
+
+        commit('SET_TOKEN', token)
+        setToken(token)
+
+        const { roles } = await dispatch('getInfo')
+
         resetRouter()
-        commit('RESET_STATE')
-        resolve()
-      }).catch(error => {
-        reject(error)
-      })
-    })
-  },
-
-  // remove token
-  resetToken({ commit }) {
-    return new Promise(resolve => {
-      removeToken() // must remove  token  first
-      commit('RESET_STATE')
-      resolve()
-    })
-  },
-
-  async changeRoles({ commit, dispatch }, role) {
-    const token = role + '-token'
-
-    commit('SET_TOKEN', token)
-    setToken(token)
-
-    const { roles } = await dispatch('getInfo')
-
-    resetRouter()
-
-    // generate accessible routes map based on roles
-    const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true })
-    // dynamically add accessible routes
-    router.addRoutes(accessRoutes)
-
-    // reset visited views and cached views
-    dispatch('tagsView/delAllViews', null, { root: true })
-  }
-}
 
-export default {
-  namespaced: true,
-  state,
-  mutations,
-  actions
+        // generate accessible routes map based on roles
+        const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true })
+            // dynamically add accessible routes
+        router.addRoutes(accessRoutes)
+
+        // reset visited views and cached views
+        dispatch('tagsView/delAllViews', null, { root: true })
+    }
 }
 
+export default {
+    namespaced: true,
+    state,
+    mutations,
+    actions
+}

+ 8 - 0
src/views/login/index.vue

@@ -48,6 +48,8 @@
 
 <script>
 import { validUsername } from '@/utils/validate'
+import { postJson, getSort } from '@/api/page'
+import { mapGetters, mapState, mapActions } from 'vuex'
 
 export default {
   name: 'Login',
@@ -89,6 +91,7 @@ export default {
     }
   },
   methods: {
+    ...mapActions("user", ['setRole']),
     showPwd() {
       if (this.passwordType === 'password') {
         this.passwordType = ''
@@ -105,6 +108,11 @@ export default {
           this.loading = true
           this.$store.dispatch('user/login', this.loginForm).then(() => {
             this.$router.push({ path: this.redirect || '/' })
+            postJson('/api/v1/sys/role/tree', { id: this.loginForm.username }).then(response => {
+              if (response.code === 200) {
+                this.setRole(response.data.checked)       
+              }
+            })
             this.loading = false
           }).catch(() => {
             this.loading = false

+ 6 - 6
src/views/sys/role/index.vue

@@ -186,17 +186,17 @@ export default {
       let childArr = []
       route.children.map((child, index) => {
         if (!child.hidden) {
-          child.path = child.path
+          child.path = route.path+'/'+child.path
           childArr.push(child)
         }
       })
       route.children = childArr
-      if (route.children.length === 1) {
-        this.routerMap.push(route.children[0])
-      }
-      else {
+      // if (route.children.length === 1) {
+      //   this.routerMap.push(route.children[0])
+      // }
+      // else {
         this.routerMap.push(route)
-      }
+      // }
     })
   },
   methods: {