优化页面内嵌iframe切换tab不刷新问题

This commit is contained in:
不做码农
2022-11-17 17:49:25 +08:00
parent 2aa029e1af
commit 53acd164aa
6 changed files with 96 additions and 53 deletions
+27 -1
View File
@@ -1,13 +1,22 @@
const useTagsViewStore = defineStore('tagsView', {
state: () => ({
visitedViews: [],
cachedViews: []
cachedViews: [],
iframeViews: []
}),
actions: {
addView(view) {
this.addVisitedView(view)
this.addCachedView(view)
},
addIframeView(view) {
if (this.iframeViews.some((v) => v.path === view.path)) return
this.iframeViews.push(
Object.assign({}, view, {
title: view.meta.title || 'no-name'
})
)
},
addVisitedView(view) {
if (this.visitedViews.some((v) => v.path === view.path)) return
this.visitedViews.push(
@@ -40,9 +49,16 @@ const useTagsViewStore = defineStore('tagsView', {
break
}
}
this.iframeViews = this.iframeViews.filter((item) => item.path !== view.path)
resolve([...this.visitedViews])
})
},
delIframeView(view) {
return new Promise((resolve) => {
this.iframeViews = this.iframeViews.filter((item) => item.path !== view.path)
resolve([...this.iframeViews])
})
},
delCachedView(view) {
return new Promise((resolve) => {
const index = this.cachedViews.indexOf(view.name)
@@ -65,6 +81,7 @@ const useTagsViewStore = defineStore('tagsView', {
this.visitedViews = this.visitedViews.filter((v) => {
return v.meta.affix || v.path === view.path
})
this.iframeViews = this.iframeViews.filter((item) => item.path === view.path)
resolve([...this.visitedViews])
})
},
@@ -93,6 +110,7 @@ const useTagsViewStore = defineStore('tagsView', {
return new Promise((resolve) => {
const affixTags = this.visitedViews.filter((tag) => tag.meta.affix)
this.visitedViews = affixTags
this.iframeViews = []
resolve([...this.visitedViews])
})
},
@@ -124,6 +142,10 @@ const useTagsViewStore = defineStore('tagsView', {
if (i > -1) {
this.cachedViews.splice(i, 1)
}
if (item.meta.link) {
const fi = this.iframeViews.findIndex((v) => v.path === item.path)
this.iframeViews.splice(fi, 1)
}
return false
})
resolve([...this.visitedViews])
@@ -143,6 +165,10 @@ const useTagsViewStore = defineStore('tagsView', {
if (i > -1) {
this.cachedViews.splice(i, 1)
}
if (item.meta.link) {
const fi = this.iframeViews.findIndex((v) => v.path === item.path)
this.iframeViews.splice(fi, 1)
}
return false
})
resolve([...this.visitedViews])