FIX iframe标签切换后刷新
This commit is contained in:
parent
16ded44932
commit
f701791805
|
@ -0,0 +1,66 @@
|
||||||
|
<!--
|
||||||
|
* @Descripttion: 处理iframe持久化,涉及store(VUEX)
|
||||||
|
* @version: 1.0
|
||||||
|
* @Author: sakuya
|
||||||
|
* @Date: 2021年6月30日13:20:41
|
||||||
|
* @LastEditors:
|
||||||
|
* @LastEditTime:
|
||||||
|
-->
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div v-show="$route.meta.type=='iframe'" class="iframe-pages">
|
||||||
|
<iframe v-for="item in iframeList" :key="item.meta.url" v-show="$route.meta.url==item.meta.url" :src="item.meta.url" frameborder='0'></iframe>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
$route(e) {
|
||||||
|
this.push(e)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.push(this.$route);
|
||||||
|
},
|
||||||
|
computed:{
|
||||||
|
iframeList(){
|
||||||
|
return this.$store.state.iframe.iframeList
|
||||||
|
},
|
||||||
|
ismobile(){
|
||||||
|
return this.$store.state.global.ismobile
|
||||||
|
},
|
||||||
|
layoutTags(){
|
||||||
|
return this.$store.state.global.layoutTags
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
push(route){
|
||||||
|
if(route.meta.type == 'iframe'){
|
||||||
|
if(this.ismobile || !this.layoutTags){
|
||||||
|
this.$store.commit("setIframeList", route)
|
||||||
|
}else{
|
||||||
|
this.$store.commit("pushIframeList", route)
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(this.ismobile || !this.layoutTags){
|
||||||
|
this.$store.commit("clearIframeList")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.iframe-pages {width:100%;height:100%;background: #fff;}
|
||||||
|
iframe {border:0;width:100%;height:100%;display: block;}
|
||||||
|
</style>
|
|
@ -119,6 +119,7 @@
|
||||||
//关闭tag
|
//关闭tag
|
||||||
closeSelectedTag(tag) {
|
closeSelectedTag(tag) {
|
||||||
this.$store.commit("removeViewTags", tag)
|
this.$store.commit("removeViewTags", tag)
|
||||||
|
this.$store.commit("removeIframeList", tag)
|
||||||
this.$store.commit("removeKeepLive", tag.name)
|
this.$store.commit("removeKeepLive", tag.name)
|
||||||
if (this.isActive(tag)) {
|
if (this.isActive(tag)) {
|
||||||
const latestView = this.tagList.slice(-1)[0]
|
const latestView = this.tagList.slice(-1)[0]
|
||||||
|
@ -151,6 +152,7 @@
|
||||||
path: nowTag.path
|
path: nowTag.path
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
this.$store.commit("refreshIframe", nowTag)
|
||||||
var _this = this;
|
var _this = this;
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
_this.$store.commit("removeKeepLive", nowTag.name)
|
_this.$store.commit("removeKeepLive", nowTag.name)
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
<Tags v-if="!ismobile && layoutTags"></Tags>
|
<Tags v-if="!ismobile && layoutTags"></Tags>
|
||||||
<div class="adminui-main" id="adminui-main">
|
<div class="adminui-main" id="adminui-main">
|
||||||
<router-view></router-view>
|
<router-view></router-view>
|
||||||
|
<iframe-view></iframe-view>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
@ -72,6 +73,7 @@
|
||||||
<Tags v-if="!ismobile && layoutTags"></Tags>
|
<Tags v-if="!ismobile && layoutTags"></Tags>
|
||||||
<div class="adminui-main" id="adminui-main">
|
<div class="adminui-main" id="adminui-main">
|
||||||
<router-view></router-view>
|
<router-view></router-view>
|
||||||
|
<iframe-view></iframe-view>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
@ -91,6 +93,7 @@
|
||||||
import NavMenu from './components/NavMenu.vue';
|
import NavMenu from './components/NavMenu.vue';
|
||||||
import userbar from './components/userbar.vue';
|
import userbar from './components/userbar.vue';
|
||||||
import setting from './components/setting.vue';
|
import setting from './components/setting.vue';
|
||||||
|
import iframeView from './components/iframeView.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'index',
|
name: 'index',
|
||||||
|
@ -100,7 +103,8 @@
|
||||||
Tags,
|
Tags,
|
||||||
NavMenu,
|
NavMenu,
|
||||||
userbar,
|
userbar,
|
||||||
setting
|
setting,
|
||||||
|
iframeView
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -82,7 +82,6 @@ function filterAsyncRouter(routerMap) {
|
||||||
if(item.meta.type=='iframe'){
|
if(item.meta.type=='iframe'){
|
||||||
item.meta.url = item.path;
|
item.meta.url = item.path;
|
||||||
item.path = `/i/${item.name}`;
|
item.path = `/i/${item.name}`;
|
||||||
item.component = 'other/iframe';
|
|
||||||
}
|
}
|
||||||
//MAP转路由对象
|
//MAP转路由对象
|
||||||
var route = {
|
var route = {
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
export default {
|
||||||
|
state: {
|
||||||
|
iframeList: []
|
||||||
|
},
|
||||||
|
mutations: {
|
||||||
|
setIframeList(state, route){
|
||||||
|
state.iframeList = []
|
||||||
|
state.iframeList.push(route)
|
||||||
|
},
|
||||||
|
pushIframeList(state, route){
|
||||||
|
let target = state.iframeList.find((item) => item.path === route.path)
|
||||||
|
if(!target){
|
||||||
|
state.iframeList.push(route)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
removeIframeList(state, route){
|
||||||
|
state.iframeList.forEach((item, index) => {
|
||||||
|
if (item.path === route.path){
|
||||||
|
state.iframeList.splice(index, 1)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
refreshIframe(state, route){
|
||||||
|
state.iframeList.forEach((item) => {
|
||||||
|
if (item.path == route.path){
|
||||||
|
var url = route.meta.url;
|
||||||
|
item.meta.url = '';
|
||||||
|
setTimeout(function() {
|
||||||
|
item.meta.url = url
|
||||||
|
}, 200);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
clearIframeList(state){
|
||||||
|
state.iframeList = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue