From 9799d3e570c5dab426be8e3f53e6e6d14bc7e35d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=89=E6=9D=A5=E6=8A=80=E6=9C=AF?= <1490493387@qq.com> Date: Sat, 1 Jan 2022 09:24:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(TagsView):=20=E5=BF=AB=E6=8D=B7=E5=AF=BC?= =?UTF-8?q?=E8=88=AA=E6=A0=8F=E6=B7=BB=E5=8A=A0=E5=85=B3=E9=97=AD=E5=B7=A6?= =?UTF-8?q?=E4=BE=A7=E5=92=8C=E5=8F=B3=E4=BE=A7=E7=9A=84=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/layout/components/TagsView/index.vue | 4 +- src/store/modules/tagsView.ts | 49 ++++++++++++++++++++---- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue index ae589c04..ca1bad3c 100644 --- a/src/layout/components/TagsView/index.vue +++ b/src/layout/components/TagsView/index.vue @@ -210,7 +210,7 @@ function closeSelectedTag(view: TagView) { } function closeLeftTags() { - ctx.$tab.closeLeftPage(selectedTag.value).then(visitedViews => { + tagsViewStoreHook().delLeftViews(selectedTag.value).then(({visitedViews}) => { if (!visitedViews.find(i => i.fullPath === route.fullPath)) { toLastView(visitedViews) } @@ -218,7 +218,7 @@ function closeLeftTags() { } function closeRightTags() { - ctx.$tab.closeRightPage(selectedTag.value).then(visitedViews => { + tagsViewStoreHook().delRightViews(selectedTag.value).then(({visitedViews}) => { if (!visitedViews.find(i => i.fullPath === route.fullPath)) { toLastView(visitedViews) } diff --git a/src/store/modules/tagsView.ts b/src/store/modules/tagsView.ts index d6abd6ff..9a51d1d1 100644 --- a/src/store/modules/tagsView.ts +++ b/src/store/modules/tagsView.ts @@ -101,14 +101,49 @@ const tagsViewStore = defineStore({ }) }, delLeftViews(view: any) { - const currIndex = this.visitedViews.findIndex(v => v.path === view.path) - if (currIndex === -1) { - return - } - this.visitedViews = this.visitedViews.filter((item, index) => { - if(index>=currIndex||(item.meta&&item.meta.affix)){ - return true + return new Promise(resolve => { + const currIndex = this.visitedViews.findIndex(v => v.path === view.path) + if (currIndex === -1) { + return } + this.visitedViews = this.visitedViews.filter((item, index) => { + // affix:true 固定tag,例如“首页” + if (index >= currIndex || (item.meta && item.meta.affix)) { + return true + } + + const cacheIndex = this.cachedViews.indexOf(item.name) + if (cacheIndex > -1) { + this.cachedViews.splice(cacheIndex, 1) + } + return false + }) + resolve({ + visitedViews: [...this.visitedViews] + }) + }) + }, + delRightViews(view: any) { + return new Promise(resolve => { + const currIndex = this.visitedViews.findIndex(v => v.path === view.path) + if (currIndex === -1) { + return + } + this.visitedViews = this.visitedViews.filter((item, index) => { + // affix:true 固定tag,例如“首页” + if (index <= currIndex || (item.meta && item.meta.affix)) { + return true + } + + const cacheIndex = this.cachedViews.indexOf(item.name) + if (cacheIndex > -1) { + this.cachedViews.splice(cacheIndex, 1) + } + return false + }) + resolve({ + visitedViews: [...this.visitedViews] + }) }) }, delAllViews(view: any) {