Commit 20d7a25eb898a5c28351ff269b93bf104b8ac10e
1 parent
59d3e8c8
fix: user drop-down event key loss
修复顶部的用户操作下拉菜单点击事件丢失key参数的问题
Showing
2 changed files
with
23 additions
and
24 deletions
src/layouts/default/header/components/user-dropdown/DropMenuItem.vue
1 | <template> | 1 | <template> |
2 | - <MenuItem :key="key"> | 2 | + <MenuItem :key="itemKey"> |
3 | <span class="flex items-center"> | 3 | <span class="flex items-center"> |
4 | <Icon :icon="icon" class="mr-1" /> | 4 | <Icon :icon="icon" class="mr-1" /> |
5 | <span>{{ text }}</span> | 5 | <span>{{ text }}</span> |
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | <script lang="ts"> | 9 | <script lang="ts"> |
10 | import { Menu } from 'ant-design-vue'; | 10 | import { Menu } from 'ant-design-vue'; |
11 | 11 | ||
12 | - import { defineComponent } from 'vue'; | 12 | + import { computed, defineComponent, getCurrentInstance } from 'vue'; |
13 | 13 | ||
14 | import Icon from '/@/components/Icon/index'; | 14 | import Icon from '/@/components/Icon/index'; |
15 | import { propTypes } from '/@/utils/propTypes'; | 15 | import { propTypes } from '/@/utils/propTypes'; |
@@ -22,5 +22,10 @@ | @@ -22,5 +22,10 @@ | ||
22 | text: propTypes.string, | 22 | text: propTypes.string, |
23 | icon: propTypes.string, | 23 | icon: propTypes.string, |
24 | }, | 24 | }, |
25 | + setup(props) { | ||
26 | + const instance = getCurrentInstance(); | ||
27 | + const itemKey = computed(() => props.key || instance?.vnode?.props?.key); | ||
28 | + return { itemKey }; | ||
29 | + }, | ||
25 | }); | 30 | }); |
26 | </script> | 31 | </script> |
src/layouts/default/header/components/user-dropdown/index.vue
@@ -10,11 +10,10 @@ | @@ -10,11 +10,10 @@ | ||
10 | </span> | 10 | </span> |
11 | 11 | ||
12 | <template #overlay> | 12 | <template #overlay> |
13 | - <Menu> | 13 | + <Menu @click="handleMenuClick"> |
14 | <MenuItem | 14 | <MenuItem |
15 | key="doc" | 15 | key="doc" |
16 | :text="t('layout.header.dropdownItemDoc')" | 16 | :text="t('layout.header.dropdownItemDoc')" |
17 | - @click="openDoc" | ||
18 | icon="ion:document-text-outline" | 17 | icon="ion:document-text-outline" |
19 | v-if="getShowDoc" | 18 | v-if="getShowDoc" |
20 | /> | 19 | /> |
@@ -22,13 +21,11 @@ | @@ -22,13 +21,11 @@ | ||
22 | <MenuItem | 21 | <MenuItem |
23 | v-if="getUseLockPage" | 22 | v-if="getUseLockPage" |
24 | key="lock" | 23 | key="lock" |
25 | - @click="handleLock" | ||
26 | :text="t('layout.header.tooltipLock')" | 24 | :text="t('layout.header.tooltipLock')" |
27 | icon="ion:lock-closed-outline" | 25 | icon="ion:lock-closed-outline" |
28 | /> | 26 | /> |
29 | <MenuItem | 27 | <MenuItem |
30 | key="logout" | 28 | key="logout" |
31 | - @click="handleLoginOut" | ||
32 | :text="t('layout.header.dropdownItemLoginOut')" | 29 | :text="t('layout.header.dropdownItemLoginOut')" |
33 | icon="ion:power-outline" | 30 | icon="ion:power-outline" |
34 | /> | 31 | /> |
@@ -57,7 +54,7 @@ | @@ -57,7 +54,7 @@ | ||
57 | 54 | ||
58 | import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; | 55 | import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent'; |
59 | 56 | ||
60 | - //type MenuEvent = 'logout' | 'doc' | 'lock'; | 57 | + type MenuEvent = 'logout' | 'doc' | 'lock'; |
61 | 58 | ||
62 | export default defineComponent({ | 59 | export default defineComponent({ |
63 | name: 'UserDropdown', | 60 | name: 'UserDropdown', |
@@ -98,31 +95,28 @@ | @@ -98,31 +95,28 @@ | ||
98 | openWindow(DOC_URL); | 95 | openWindow(DOC_URL); |
99 | } | 96 | } |
100 | 97 | ||
101 | - // function handleMenuClick(e: { key: MenuEvent }) { | ||
102 | - // switch (e.key) { | ||
103 | - // case 'logout': | ||
104 | - // handleLoginOut(); | ||
105 | - // break; | ||
106 | - // case 'doc': | ||
107 | - // openDoc(); | ||
108 | - // break; | ||
109 | - // case 'lock': | ||
110 | - // handleLock(); | ||
111 | - // break; | ||
112 | - // } | ||
113 | - // } | 98 | + function handleMenuClick(e: { key: MenuEvent }) { |
99 | + switch (e.key) { | ||
100 | + case 'logout': | ||
101 | + handleLoginOut(); | ||
102 | + break; | ||
103 | + case 'doc': | ||
104 | + openDoc(); | ||
105 | + break; | ||
106 | + case 'lock': | ||
107 | + handleLock(); | ||
108 | + break; | ||
109 | + } | ||
110 | + } | ||
114 | 111 | ||
115 | return { | 112 | return { |
116 | prefixCls, | 113 | prefixCls, |
117 | t, | 114 | t, |
118 | getUserInfo, | 115 | getUserInfo, |
119 | - // handleMenuClick, | 116 | + handleMenuClick, |
120 | getShowDoc, | 117 | getShowDoc, |
121 | register, | 118 | register, |
122 | getUseLockPage, | 119 | getUseLockPage, |
123 | - handleLoginOut, | ||
124 | - openDoc, | ||
125 | - handleLock, | ||
126 | }; | 120 | }; |
127 | }, | 121 | }, |
128 | }); | 122 | }); |