wyh 3 жил өмнө
parent
commit
327522f2b7

+ 2 - 0
src/components/ContextMenu/index.ts

@@ -1,8 +1,10 @@
 import ContextMenu from './src/ContextMenu.vue'
 import { ElDropdown } from 'element-plus'
+import type { RouteLocationNormalizedLoaded } from 'vue-router'
 
 export interface ContextMenuExpose {
   elDropdownMenuRef: ComponentRef<typeof ElDropdown>
+  tagItem: RouteLocationNormalizedLoaded
 }
 
 export { ContextMenu }

+ 10 - 4
src/components/ContextMenu/src/ContextMenu.vue

@@ -1,8 +1,9 @@
 <script setup lang="ts">
 import { ElDropdown, ElDropdownMenu, ElDropdownItem } from 'element-plus'
-import { PropType, ref, unref } from 'vue'
+import { PropType, ref } from 'vue'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useDesign } from '@/hooks/web/useDesign'
+import type { RouteLocationNormalizedLoaded } from 'vue-router'
 
 const { getPrefixCls } = useDesign()
 
@@ -12,7 +13,7 @@ const { t } = useI18n()
 
 const emit = defineEmits(['visibleChange'])
 
-defineProps({
+const props = defineProps({
   schema: {
     type: Array as PropType<contextMenuSchema[]>,
     default: () => []
@@ -20,6 +21,10 @@ defineProps({
   trigger: {
     type: String as PropType<'click' | 'hover' | 'focus' | 'contextmenu'>,
     default: 'contextmenu'
+  },
+  tagItem: {
+    type: Object as PropType<RouteLocationNormalizedLoaded>,
+    default: () => ({})
   }
 })
 
@@ -28,13 +33,14 @@ const command = (item: contextMenuSchema) => {
 }
 
 const visibleChange = (visible: boolean) => {
-  emit('visibleChange', visible, unref(elDropdownMenuRef))
+  emit('visibleChange', visible, props.tagItem)
 }
 
 const elDropdownMenuRef = ref<ComponentRef<typeof ElDropdown>>()
 
 defineExpose({
-  elDropdownMenuRef
+  elDropdownMenuRef,
+  tagItem: props.tagItem
 })
 </script>
 

+ 3 - 6
src/components/TagsView/src/TagsView.vue

@@ -205,15 +205,11 @@ const isActive = (route: RouteLocationNormalizedLoaded): boolean => {
 const itemRefs = useTemplateRefsList<ComponentRef<typeof ContextMenu & ContextMenuExpose>>()
 
 // 右键菜单装填改变的时候
-const visibleChange = (
-  visible: boolean,
-  ref: ComponentRef<typeof ContextMenu & ContextMenuExpose>
-) => {
-  const uid = ref.$el['__vueParentComponent'].uid
+const visibleChange = (visible: boolean, tagItem: RouteLocationNormalizedLoaded) => {
   if (visible) {
     for (const v of unref(itemRefs)) {
       const elDropdownMenuRef = v.elDropdownMenuRef
-      if (uid !== elDropdownMenuRef?.$el['__vueParentComponent'].uid) {
+      if (tagItem.fullPath !== v.tagItem.fullPath) {
         elDropdownMenuRef?.handleClose()
       }
     }
@@ -330,6 +326,7 @@ watch(
             ]"
             v-for="item in visitedViews"
             :key="item.fullPath"
+            :tag-item="item"
             :class="[
               `${prefixCls}__item`,
               item?.meta?.affix ? `${prefixCls}__item--affix` : '',