Browse Source

multiple loads route

Bt4Girls 3 năm trước cách đây
mục cha
commit
d6f24f7bf9
1 tập tin đã thay đổi với 31 bổ sung1 xóa
  1. 31 1
      src/store/modules/permission.js

+ 31 - 1
src/store/modules/permission.js

@@ -37,6 +37,35 @@ function hasRole(roles, route) {
   }
 }
 
+/**
+ * 简易深拷贝
+ * @param  target
+ * @returns {Object}
+ */
+function deepClone (target) {
+  let result
+  if (typeof target === 'object') {
+    if (Array.isArray(target)) {
+      result = []
+      for (const i in target) {
+        result.push(deepClone(target[i]))
+      }
+    } else if (target === null) {
+      result = null
+    } else if (target.constructor === RegExp) {
+      result = target
+    } else {
+      result = {}
+      for (const i in target) {
+        result[i] = deepClone(target[i])
+      }
+    }
+  } else {
+    result = target
+  }
+  return result
+}
+
 function filterAsyncRouter (routerMap, roles) {
   const accessedRouters = routerMap.filter(route => {
     if (hasPermission(roles.permissionList, route)) {
@@ -65,7 +94,8 @@ const permission = {
     GenerateRoutes ({ commit }, data) {
       return new Promise(resolve => {
         const { roles } = data
-        const accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
+        const routerMap = deepClone(asyncRouterMap)
+        const accessedRouters = filterAsyncRouter(routerMap, roles)
         commit('SET_ROUTERS', accessedRouters)
         resolve()
       })