From 5f2350569a0250c7a3882900147595736bb91adc Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 10 Apr 2021 21:15:45 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E7=AD=BE=E6=96=B0=E5=A2=9E=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E5=8F=B3=E4=BE=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/layout/components/TagsView/index.vue | 15 ++++++++++++ ruoyi-ui/src/store/modules/tagsView.js | 24 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/ruoyi-ui/src/layout/components/TagsView/index.vue b/ruoyi-ui/src/layout/components/TagsView/index.vue index c16a4c24..d4709f8e 100644 --- a/ruoyi-ui/src/layout/components/TagsView/index.vue +++ b/ruoyi-ui/src/layout/components/TagsView/index.vue @@ -21,6 +21,7 @@
  • 刷新页面
  • 关闭当前
  • 关闭其他
  • +
  • 关闭右侧
  • 关闭所有
  • @@ -83,6 +84,13 @@ export default { isAffix(tag) { return tag.meta && tag.meta.affix }, + isLastView() { + try { + return this.selectedTag.fullPath === this.visitedViews[this.visitedViews.length - 1].fullPath + } catch (err) { + return false + } + }, filterAffixTags(routes, basePath = '/') { let tags = [] routes.forEach(route => { @@ -152,6 +160,13 @@ export default { } }) }, + closeRightTags() { + this.$store.dispatch('tagsView/delRightTags', this.selectedTag).then(visitedViews => { + if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) { + this.toLastView(visitedViews) + } + }) + }, closeOthersTags() { this.$router.push(this.selectedTag).catch(()=>{}); this.$store.dispatch('tagsView/delOthersViews', this.selectedTag).then(() => { diff --git a/ruoyi-ui/src/store/modules/tagsView.js b/ruoyi-ui/src/store/modules/tagsView.js index abec6228..a1873e4a 100644 --- a/ruoyi-ui/src/store/modules/tagsView.js +++ b/ruoyi-ui/src/store/modules/tagsView.js @@ -62,6 +62,23 @@ const mutations = { break } } + }, + + DEL_RIGHT_VIEWS: (state, view) => { + const index = state.visitedViews.findIndex(v => v.path === view.path) + if (index === -1) { + return + } + state.visitedViews = state.visitedViews.filter((item, idx) => { + if (idx <= index || (item.meta && item.meta.affix)) { + return true + } + const i = state.cachedViews.indexOf(item.name) + if (i > -1) { + state.cachedViews.splice(i, 1) + } + return false + }) } } @@ -148,6 +165,13 @@ const actions = { updateVisitedView({ commit }, view) { commit('UPDATE_VISITED_VIEW', view) + }, + + delRightTags({ commit }, view) { + return new Promise(resolve => { + commit('DEL_RIGHT_VIEWS', view) + resolve([...state.visitedViews]) + }) } }