diff --git a/src/store/modules/app.js b/src/store/modules/app.js
index e30ae3bfd92e27719859d568e1b34d7c7da2985a..4b612ec243a9cf635c4c0b4ece41f07c105932a9 100644
--- a/src/store/modules/app.js
+++ b/src/store/modules/app.js
@@ -1,5 +1,6 @@
 import Cookies from 'js-cookie';
 
+
 const app = {
   state: {
     sidebar: {
@@ -19,11 +20,17 @@ const app = {
       state.sidebar.opened = !state.sidebar.opened;
     },
     ADD_VISITED_VIEWS: (state, view) => {
-      if (state.visitedViews.includes(view)) return
-      state.visitedViews.push(view)
+      if (state.visitedViews.some(v => v.path === view.path)) return
+      state.visitedViews.push({ name: view.name, path: view.path })
     },
     DEL_VISITED_VIEWS: (state, view) => {
-      const index = state.visitedViews.indexOf(view)
+      let index
+      for (const [i, v] of state.visitedViews.entries()) {
+        if (v.path === view.path) {
+          index = i
+          break
+        }
+      }
       state.visitedViews.splice(index, 1)
     }
   },
diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js
index c4cfa4f03ae10b0d488eb25cba81d7d9141dd935..dbbc9f4ef3aa3576d577714b8fcfedb74194afe9 100644
--- a/src/store/modules/permission.js
+++ b/src/store/modules/permission.js
@@ -1,4 +1,5 @@
 import { asyncRouterMap, constantRouterMap } from 'src/router';
+import { deepClone } from 'utils'
 
 /**
  * 通过meta.role判断是否与当前用户权限匹配
@@ -38,8 +39,8 @@ const permission = {
   },
   mutations: {
     SET_ROUTERS: (state, routers) => {
-      state.addRouters = routers;
-      state.routers = constantRouterMap.concat(routers);
+      state.addRouters = deepClone(routers)
+      state.routers = deepClone(constantRouterMap.concat(routers))
     }
   },
   actions: {
diff --git a/src/utils/index.js b/src/utils/index.js
index 5cf482dc4810a554ba8730b77256a7edc6da646e..3e60916fa459840db1af91ed61549bed29f40377 100644
--- a/src/utils/index.js
+++ b/src/utils/index.js
@@ -250,3 +250,21 @@
    };
  }
 
+
+ export function deepClone(source) {
+   if (!source && typeof source !== 'object') {
+     throw new Error('error arguments', 'shallowClone');
+   }
+   const targetObj = source.constructor === Array ? [] : {};
+   for (const keys in source) {
+     if (source.hasOwnProperty(keys)) {
+       if (source[keys] && typeof source[keys] === 'object') {
+         targetObj[keys] = source[keys].constructor === Array ? [] : {};
+         targetObj[keys] = deepClone(source[keys]);
+       } else {
+         targetObj[keys] = source[keys];
+       }
+     }
+   }
+   return targetObj;
+ }