From 77c798eaedab571990930ecf14f8cead43c13640 Mon Sep 17 00:00:00 2001 From: lrl <742798240@qq.com> Date: Tue, 14 Dec 2021 21:59:54 +0800 Subject: [PATCH] fix: menuModel --- src/layout/components/tag/index.vue | 82 ++++++++++++++--------------- 1 file changed, 39 insertions(+), 43 deletions(-) diff --git a/src/layout/components/tag/index.vue b/src/layout/components/tag/index.vue index 452edbfa6..12c591185 100644 --- a/src/layout/components/tag/index.vue +++ b/src/layout/components/tag/index.vue @@ -17,8 +17,8 @@ import closeLeft from "/@/assets/svg/close_left.svg"; import closeOther from "/@/assets/svg/close_other.svg"; import closeRight from "/@/assets/svg/close_right.svg"; -import { isEqual } from "lodash-es"; import { emitter } from "/@/utils/mitt"; +import { isEqual, isEmpty } from "lodash-es"; import { transformI18n } from "/@/plugins/i18n"; import { storageLocal } from "/@/utils/storage"; import { useRoute, useRouter } from "vue-router"; @@ -367,6 +367,19 @@ function deleteMenu(item, tag?: string) { function onClickDrop(key, item, selectRoute?: RouteConfigs) { if (item && item.disabled) return; + + let selectTagRoute; + if (selectRoute) { + selectTagRoute = { + path: selectRoute.path, + meta: selectRoute.meta, + name: selectRoute.name, + query: selectRoute.query + }; + } else { + selectTagRoute = { path: route.path, meta: route.meta }; + } + // 当前路由信息 switch (key) { case 0: @@ -375,49 +388,19 @@ function onClickDrop(key, item, selectRoute?: RouteConfigs) { break; case 1: // 关闭当前标签页 - selectRoute - ? deleteMenu({ - path: selectRoute.path, - meta: selectRoute.meta, - name: selectRoute.name - }) - : deleteMenu({ path: route.path, meta: route.meta }); + deleteMenu(selectTagRoute); break; case 2: // 关闭左侧标签页 - selectRoute - ? deleteMenu( - { - path: selectRoute.path, - meta: selectRoute.meta - }, - "left" - ) - : deleteMenu({ path: route.path, meta: route.meta }, "left"); + deleteMenu(selectTagRoute, "left"); break; case 3: // 关闭右侧标签页 - selectRoute - ? deleteMenu( - { - path: selectRoute.path, - meta: selectRoute.meta - }, - "right" - ) - : deleteMenu({ path: route.path, meta: route.meta }, "right"); + deleteMenu(selectTagRoute, "right"); break; case 4: // 关闭其他标签页 - selectRoute - ? deleteMenu( - { - path: selectRoute.path, - meta: selectRoute.meta - }, - "other" - ) - : deleteMenu({ path: route.path, meta: route.meta }, "other"); + deleteMenu(selectTagRoute, "other"); break; case 5: // 关闭全部标签页 @@ -430,7 +413,7 @@ function onClickDrop(key, item, selectRoute?: RouteConfigs) { break; } setTimeout(() => { - showMenuModel(route.fullPath); + showMenuModel(route.fullPath, route.query); }); } @@ -456,18 +439,31 @@ function disabledMenus(value: boolean) { } // 检查当前右键的菜单两边是否存在别的菜单,如果左侧的菜单是首页,则不显示关闭左侧标签页,如果右侧没有菜单,则不显示关闭右侧标签页 -function showMenuModel(currentPath: string, refresh = false) { +function showMenuModel( + currentPath: string, + query: object = {}, + refresh = false +) { let allRoute = multiTags.value; let routeLength = multiTags.value.length; - // currentIndex为1时,左侧的菜单是首页,则不显示关闭左侧标签页 - let currentIndex = allRoute.findIndex(v => v.path === currentPath); - // 如果currentIndex等于routeLength-1,右侧没有菜单,则不显示关闭右侧标签页 + let currentIndex = -1; + if (isEmpty(query)) { + currentIndex = allRoute.findIndex(v => v.path === currentPath); + } else { + currentIndex = allRoute.findIndex(v => isEqual(v.query, query)); + } + showMenus(true); if (refresh) { tagsViews.value[0].show = true; } + /** + * currentIndex为1时,左侧的菜单是首页,则不显示关闭左侧标签页 + * 如果currentIndex等于routeLength-1,右侧没有菜单,则不显示关闭右侧标签页 + */ + if (currentIndex === 1 && routeLength !== 2) { // 左侧的菜单是首页,右侧存在别的菜单 tagsViews.value[2].show = false; @@ -506,7 +502,7 @@ function openMenu(tag, e) { } else if (route.path !== tag.path) { // 右键菜单不匹配当前路由,隐藏刷新 tagsViews.value[0].show = false; - showMenuModel(tag.path); + showMenuModel(tag.path, tag.query); } else if ( // eslint-disable-next-line no-dupe-else-if multiTags.value.length === 2 && @@ -517,7 +513,7 @@ function openMenu(tag, e) { tagsViews.value[4].show = false; } else if (route.path === tag.path) { // 右键当前激活的菜单 - showMenuModel(tag.path, true); + showMenuModel(tag.path, tag.query, true); } currentSelect.value = tag; @@ -545,7 +541,7 @@ function tagOnClick(item) { path: item?.path, query: item?.query }); - showMenuModel(item?.path); + showMenuModel(item?.path, item?.query); } // 鼠标移入