Commit 0419a070413be34ea5455ed955fa51d8c522da86
1 parent
799a694b
feat(menu): add mixSideTrigger setting
Showing
5 changed files
with
42 additions
and
3 deletions
CHANGELOG.zh_CN.md
src/hooks/setting/useMenuSetting.ts
... | ... | @@ -33,6 +33,8 @@ const getSplit = computed(() => unref(getMenuSetting).split); |
33 | 33 | |
34 | 34 | const getMenuBgColor = computed(() => unref(getMenuSetting).bgColor); |
35 | 35 | |
36 | +const getMixSideTrigger = computed(() => unref(getMenuSetting).mixSideTrigger); | |
37 | + | |
36 | 38 | const getCanDrag = computed(() => unref(getMenuSetting).canDrag); |
37 | 39 | |
38 | 40 | const getAccordion = computed(() => unref(getMenuSetting).accordion); |
... | ... | @@ -145,5 +147,6 @@ export function useMenuSetting() { |
145 | 147 | getIsMixMode, |
146 | 148 | getIsMixSidebar, |
147 | 149 | getCloseMixSidebarOnChange, |
150 | + getMixSideTrigger, | |
148 | 151 | }; |
149 | 152 | } | ... | ... |
src/layouts/default/sider/MixSider.vue
... | ... | @@ -10,6 +10,7 @@ |
10 | 10 | open: openMenu, |
11 | 11 | }, |
12 | 12 | ]" |
13 | + v-bind="getMenuEvents" | |
13 | 14 | > |
14 | 15 | <AppLogo :showTitle="false" :class="`${prefixCls}-logo`" /> |
15 | 16 | <ScrollContainer> |
... | ... | @@ -23,7 +24,7 @@ |
23 | 24 | ]" |
24 | 25 | v-for="item in menuModules" |
25 | 26 | :key="item.path" |
26 | - @click="hanldeModuleClick(item.path)" | |
27 | + v-bind="getItemEvents(item)" | |
27 | 28 | > |
28 | 29 | <MenuTag :item="item" :showTitle="false" :isHorizontal="false" /> |
29 | 30 | <g-icon |
... | ... | @@ -112,6 +113,7 @@ |
112 | 113 | getCanDrag, |
113 | 114 | getCloseMixSidebarOnChange, |
114 | 115 | getMenuTheme, |
116 | + getMixSideTrigger, | |
115 | 117 | } = useMenuSetting(); |
116 | 118 | const { title } = useGlobSetting(); |
117 | 119 | |
... | ... | @@ -125,6 +127,16 @@ |
125 | 127 | } |
126 | 128 | ); |
127 | 129 | |
130 | + const getMenuEvents = computed(() => { | |
131 | + return unref(getMixSideTrigger) === 'hover' | |
132 | + ? { | |
133 | + onMouseleave: () => { | |
134 | + openMenu.value = false; | |
135 | + }, | |
136 | + } | |
137 | + : {}; | |
138 | + }); | |
139 | + | |
128 | 140 | const getShowDragBar = computed(() => unref(getCanDrag)); |
129 | 141 | |
130 | 142 | onMounted(async () => { |
... | ... | @@ -139,11 +151,13 @@ |
139 | 151 | } |
140 | 152 | }); |
141 | 153 | |
142 | - async function hanldeModuleClick(path: string) { | |
154 | + async function hanldeModuleClick(path: string, hover = false) { | |
143 | 155 | const children = await getChildrenMenus(path); |
144 | 156 | |
145 | 157 | if (unref(activePath) === path) { |
146 | - openMenu.value = !unref(openMenu); | |
158 | + if (!hover) { | |
159 | + openMenu.value = !unref(openMenu); | |
160 | + } | |
147 | 161 | if (!unref(openMenu)) { |
148 | 162 | setActive(); |
149 | 163 | } |
... | ... | @@ -178,6 +192,17 @@ |
178 | 192 | setActive(); |
179 | 193 | } |
180 | 194 | |
195 | + function getItemEvents(item: Menu) { | |
196 | + if (unref(getMixSideTrigger) === 'hover') { | |
197 | + return { | |
198 | + onMouseenter: () => hanldeModuleClick(item.path, true), | |
199 | + }; | |
200 | + } | |
201 | + return { | |
202 | + onClick: () => hanldeModuleClick(item.path), | |
203 | + }; | |
204 | + } | |
205 | + | |
181 | 206 | return { |
182 | 207 | t, |
183 | 208 | prefixCls, |
... | ... | @@ -194,6 +219,8 @@ |
194 | 219 | title, |
195 | 220 | openMenu, |
196 | 221 | getMenuTheme, |
222 | + getItemEvents, | |
223 | + getMenuEvents, | |
197 | 224 | }; |
198 | 225 | }, |
199 | 226 | }); | ... | ... |
src/settings/projectSetting.ts
src/types/config.d.ts