mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	v3.8.4:优化页面内嵌iframe切换tab不刷新数据
This commit is contained in:
		| @@ -12,11 +12,16 @@ | |||||||
| } | } | ||||||
|  |  | ||||||
| /* fade-transform */ | /* fade-transform */ | ||||||
|  | .fade-transform--move, | ||||||
| .fade-transform-leave-active, | .fade-transform-leave-active, | ||||||
| .fade-transform-enter-active { | .fade-transform-enter-active { | ||||||
|   transition: all .5s; |   transition: all .5s; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .fade-transform-leave-active { | ||||||
|  |   position: absolute; | ||||||
|  | } | ||||||
|  |  | ||||||
| .fade-transform-enter { | .fade-transform-enter { | ||||||
|   opacity: 0; |   opacity: 0; | ||||||
|   transform: translateX(-30px); |   transform: translateX(-30px); | ||||||
|   | |||||||
| @@ -2,15 +2,19 @@ | |||||||
|   <section class="app-main"> |   <section class="app-main"> | ||||||
|     <transition name="fade-transform" mode="out-in"> |     <transition name="fade-transform" mode="out-in"> | ||||||
|       <keep-alive :include="cachedViews"> |       <keep-alive :include="cachedViews"> | ||||||
|         <router-view :key="key" /> |         <router-view v-if="!$route.meta.link" :key="key" /> | ||||||
|       </keep-alive> |       </keep-alive> | ||||||
|     </transition> |     </transition> | ||||||
|  |     <iframe-toggle /> | ||||||
|   </section> |   </section> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|  | import iframeToggle from "./IframeToggle/index" | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
|   name: 'AppMain', |   name: 'AppMain', | ||||||
|  |   components: { iframeToggle }, | ||||||
|   computed: { |   computed: { | ||||||
|     cachedViews() { |     cachedViews() { | ||||||
|       return this.$store.state.tagsView.cachedViews |       return this.$store.state.tagsView.cachedViews | ||||||
| @@ -31,7 +35,7 @@ export default { | |||||||
|   overflow: hidden; |   overflow: hidden; | ||||||
| } | } | ||||||
|  |  | ||||||
| .fixed-header+.app-main { | .fixed-header + .app-main { | ||||||
|   padding-top: 50px; |   padding-top: 50px; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -41,7 +45,7 @@ export default { | |||||||
|     min-height: calc(100vh - 84px); |     min-height: calc(100vh - 84px); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .fixed-header+.app-main { |   .fixed-header + .app-main { | ||||||
|     padding-top: 84px; |     padding-top: 84px; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -51,7 +55,7 @@ export default { | |||||||
| // fix css style bug in open el-dialog | // fix css style bug in open el-dialog | ||||||
| .el-popup-parent--hidden { | .el-popup-parent--hidden { | ||||||
|   .fixed-header { |   .fixed-header { | ||||||
|     padding-right: 15px; |     padding-right: 17px; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| </style> | </style> | ||||||
|   | |||||||
| @@ -133,6 +133,9 @@ export default { | |||||||
|       const { name } = this.$route |       const { name } = this.$route | ||||||
|       if (name) { |       if (name) { | ||||||
|         this.$store.dispatch('tagsView/addView', this.$route) |         this.$store.dispatch('tagsView/addView', this.$route) | ||||||
|  |         if (this.$route.meta.link) { | ||||||
|  |           this.$store.dispatch('tagsView/addIframeView', this.$route) | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|       return false |       return false | ||||||
|     }, |     }, | ||||||
| @@ -153,6 +156,9 @@ export default { | |||||||
|     }, |     }, | ||||||
|     refreshSelectedTag(view) { |     refreshSelectedTag(view) { | ||||||
|       this.$tab.refreshPage(view); |       this.$tab.refreshPage(view); | ||||||
|  |       if (this.$route.meta.link) { | ||||||
|  |         this.$store.dispatch('tagsView/delIframeView', this.$route) | ||||||
|  |       } | ||||||
|     }, |     }, | ||||||
|     closeSelectedTag(view) { |     closeSelectedTag(view) { | ||||||
|       this.$tab.closePage(view).then(({ visitedViews }) => { |       this.$tab.closePage(view).then(({ visitedViews }) => { | ||||||
|   | |||||||
| @@ -1,9 +1,18 @@ | |||||||
| const state = { | const state = { | ||||||
|   visitedViews: [], |   visitedViews: [], | ||||||
|   cachedViews: [] |   cachedViews: [], | ||||||
|  |   iframeViews: [] | ||||||
| } | } | ||||||
|  |  | ||||||
| const mutations = { | const mutations = { | ||||||
|  |   ADD_IFRAME_VIEW: (state, view) => { | ||||||
|  |     if (state.iframeViews.some(v => v.path === view.path)) return | ||||||
|  |     state.iframeViews.push( | ||||||
|  |       Object.assign({}, view, { | ||||||
|  |         title: view.meta.title || 'no-name' | ||||||
|  |       }) | ||||||
|  |     ) | ||||||
|  |   }, | ||||||
|   ADD_VISITED_VIEW: (state, view) => { |   ADD_VISITED_VIEW: (state, view) => { | ||||||
|     if (state.visitedViews.some(v => v.path === view.path)) return |     if (state.visitedViews.some(v => v.path === view.path)) return | ||||||
|     state.visitedViews.push( |     state.visitedViews.push( | ||||||
| @@ -18,7 +27,6 @@ const mutations = { | |||||||
|       state.cachedViews.push(view.name) |       state.cachedViews.push(view.name) | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   DEL_VISITED_VIEW: (state, view) => { |   DEL_VISITED_VIEW: (state, view) => { | ||||||
|     for (const [i, v] of state.visitedViews.entries()) { |     for (const [i, v] of state.visitedViews.entries()) { | ||||||
|       if (v.path === view.path) { |       if (v.path === view.path) { | ||||||
| @@ -26,6 +34,10 @@ const mutations = { | |||||||
|         break |         break | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |     state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) | ||||||
|  |   }, | ||||||
|  |   DEL_IFRAME_VIEW: (state, view) => { | ||||||
|  |     state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) | ||||||
|   }, |   }, | ||||||
|   DEL_CACHED_VIEW: (state, view) => { |   DEL_CACHED_VIEW: (state, view) => { | ||||||
|     const index = state.cachedViews.indexOf(view.name) |     const index = state.cachedViews.indexOf(view.name) | ||||||
| @@ -36,6 +48,7 @@ const mutations = { | |||||||
|     state.visitedViews = state.visitedViews.filter(v => { |     state.visitedViews = state.visitedViews.filter(v => { | ||||||
|       return v.meta.affix || v.path === view.path |       return v.meta.affix || v.path === view.path | ||||||
|     }) |     }) | ||||||
|  |     state.iframeViews = state.iframeViews.filter(item => item.path === view.path) | ||||||
|   }, |   }, | ||||||
|   DEL_OTHERS_CACHED_VIEWS: (state, view) => { |   DEL_OTHERS_CACHED_VIEWS: (state, view) => { | ||||||
|     const index = state.cachedViews.indexOf(view.name) |     const index = state.cachedViews.indexOf(view.name) | ||||||
| @@ -45,16 +58,15 @@ const mutations = { | |||||||
|       state.cachedViews = [] |       state.cachedViews = [] | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   DEL_ALL_VISITED_VIEWS: state => { |   DEL_ALL_VISITED_VIEWS: state => { | ||||||
|     // keep affix tags |     // keep affix tags | ||||||
|     const affixTags = state.visitedViews.filter(tag => tag.meta.affix) |     const affixTags = state.visitedViews.filter(tag => tag.meta.affix) | ||||||
|     state.visitedViews = affixTags |     state.visitedViews = affixTags | ||||||
|  |     state.iframeViews = [] | ||||||
|   }, |   }, | ||||||
|   DEL_ALL_CACHED_VIEWS: state => { |   DEL_ALL_CACHED_VIEWS: state => { | ||||||
|     state.cachedViews = [] |     state.cachedViews = [] | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   UPDATE_VISITED_VIEW: (state, view) => { |   UPDATE_VISITED_VIEW: (state, view) => { | ||||||
|     for (let v of state.visitedViews) { |     for (let v of state.visitedViews) { | ||||||
|       if (v.path === view.path) { |       if (v.path === view.path) { | ||||||
| @@ -63,7 +75,6 @@ const mutations = { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|    |  | ||||||
|   DEL_RIGHT_VIEWS: (state, view) => { |   DEL_RIGHT_VIEWS: (state, view) => { | ||||||
|     const index = state.visitedViews.findIndex(v => v.path === view.path) |     const index = state.visitedViews.findIndex(v => v.path === view.path) | ||||||
|     if (index === -1) { |     if (index === -1) { | ||||||
| @@ -77,10 +88,13 @@ const mutations = { | |||||||
|       if (i > -1) { |       if (i > -1) { | ||||||
|         state.cachedViews.splice(i, 1) |         state.cachedViews.splice(i, 1) | ||||||
|       } |       } | ||||||
|  |       if(item.meta.link) { | ||||||
|  |         const fi = state.iframeViews.findIndex(v => v.path === item.path) | ||||||
|  |         state.iframeViews.splice(fi, 1) | ||||||
|  |       } | ||||||
|       return false |       return false | ||||||
|     }) |     }) | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   DEL_LEFT_VIEWS: (state, view) => { |   DEL_LEFT_VIEWS: (state, view) => { | ||||||
|     const index = state.visitedViews.findIndex(v => v.path === view.path) |     const index = state.visitedViews.findIndex(v => v.path === view.path) | ||||||
|     if (index === -1) { |     if (index === -1) { | ||||||
| @@ -94,6 +108,10 @@ const mutations = { | |||||||
|       if (i > -1) { |       if (i > -1) { | ||||||
|         state.cachedViews.splice(i, 1) |         state.cachedViews.splice(i, 1) | ||||||
|       } |       } | ||||||
|  |       if(item.meta.link) { | ||||||
|  |         const fi = state.iframeViews.findIndex(v => v.path === item.path) | ||||||
|  |         state.iframeViews.splice(fi, 1) | ||||||
|  |       } | ||||||
|       return false |       return false | ||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
| @@ -104,13 +122,15 @@ const actions = { | |||||||
|     dispatch('addVisitedView', view) |     dispatch('addVisitedView', view) | ||||||
|     dispatch('addCachedView', view) |     dispatch('addCachedView', view) | ||||||
|   }, |   }, | ||||||
|  |   addIframeView({ commit }, view) { | ||||||
|  |     commit('ADD_IFRAME_VIEW', view) | ||||||
|  |   }, | ||||||
|   addVisitedView({ commit }, view) { |   addVisitedView({ commit }, view) { | ||||||
|     commit('ADD_VISITED_VIEW', view) |     commit('ADD_VISITED_VIEW', view) | ||||||
|   }, |   }, | ||||||
|   addCachedView({ commit }, view) { |   addCachedView({ commit }, view) { | ||||||
|     commit('ADD_CACHED_VIEW', view) |     commit('ADD_CACHED_VIEW', view) | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   delView({ dispatch, state }, view) { |   delView({ dispatch, state }, view) { | ||||||
|     return new Promise(resolve => { |     return new Promise(resolve => { | ||||||
|       dispatch('delVisitedView', view) |       dispatch('delVisitedView', view) | ||||||
| @@ -127,13 +147,18 @@ const actions = { | |||||||
|       resolve([...state.visitedViews]) |       resolve([...state.visitedViews]) | ||||||
|     }) |     }) | ||||||
|   }, |   }, | ||||||
|  |   delIframeView({ commit, state }, view) { | ||||||
|  |     return new Promise(resolve => { | ||||||
|  |       commit('DEL_IFRAME_VIEW', view) | ||||||
|  |       resolve([...state.iframeViews]) | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|   delCachedView({ commit, state }, view) { |   delCachedView({ commit, state }, view) { | ||||||
|     return new Promise(resolve => { |     return new Promise(resolve => { | ||||||
|       commit('DEL_CACHED_VIEW', view) |       commit('DEL_CACHED_VIEW', view) | ||||||
|       resolve([...state.cachedViews]) |       resolve([...state.cachedViews]) | ||||||
|     }) |     }) | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   delOthersViews({ dispatch, state }, view) { |   delOthersViews({ dispatch, state }, view) { | ||||||
|     return new Promise(resolve => { |     return new Promise(resolve => { | ||||||
|       dispatch('delOthersVisitedViews', view) |       dispatch('delOthersVisitedViews', view) | ||||||
| @@ -156,7 +181,6 @@ const actions = { | |||||||
|       resolve([...state.cachedViews]) |       resolve([...state.cachedViews]) | ||||||
|     }) |     }) | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   delAllViews({ dispatch, state }, view) { |   delAllViews({ dispatch, state }, view) { | ||||||
|     return new Promise(resolve => { |     return new Promise(resolve => { | ||||||
|       dispatch('delAllVisitedViews', view) |       dispatch('delAllVisitedViews', view) | ||||||
| @@ -179,18 +203,15 @@ const actions = { | |||||||
|       resolve([...state.cachedViews]) |       resolve([...state.cachedViews]) | ||||||
|     }) |     }) | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   updateVisitedView({ commit }, view) { |   updateVisitedView({ commit }, view) { | ||||||
|     commit('UPDATE_VISITED_VIEW', view) |     commit('UPDATE_VISITED_VIEW', view) | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   delRightTags({ commit }, view) { |   delRightTags({ commit }, view) { | ||||||
|     return new Promise(resolve => { |     return new Promise(resolve => { | ||||||
|       commit('DEL_RIGHT_VIEWS', view) |       commit('DEL_RIGHT_VIEWS', view) | ||||||
|       resolve([...state.visitedViews]) |       resolve([...state.visitedViews]) | ||||||
|     }) |     }) | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|   delLeftTags({ commit }, view) { |   delLeftTags({ commit }, view) { | ||||||
|     return new Promise(resolve => { |     return new Promise(resolve => { | ||||||
|       commit('DEL_LEFT_VIEWS', view) |       commit('DEL_LEFT_VIEWS', view) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV