|
@@ -1,6 +1,7 @@
|
|
|
<template>
|
|
|
<div class="left-menu">
|
|
|
<t-menu
|
|
|
+ :key="key"
|
|
|
theme="dark"
|
|
|
v-model:expanded="openKeys"
|
|
|
:default-value="activeKey"
|
|
@@ -35,7 +36,7 @@
|
|
|
|
|
|
<script setup name="LeftMenu">
|
|
|
import { ref, watch, onBeforeMount } from 'vue';
|
|
|
-import { useRoute, useRouter } from 'vue-router';
|
|
|
+import { useRoute, useRouter, onBeforeRouteUpdate } from 'vue-router';
|
|
|
import { useAppStore, useUserStore } from '@/store';
|
|
|
import childrenMenu from './children-menu.vue';
|
|
|
|
|
@@ -46,32 +47,43 @@ const activeKey = ref('');
|
|
|
const openKeys = ref([]);
|
|
|
const appStore = useAppStore();
|
|
|
const userStore = useUserStore();
|
|
|
-
|
|
|
-const title = ref('');
|
|
|
+const key = ref(new Date().getTime() + '');
|
|
|
|
|
|
onBeforeMount(() => {
|
|
|
activeKey.value = route.name;
|
|
|
setOpenMenu();
|
|
|
});
|
|
|
+onBeforeRouteUpdate((to) => {
|
|
|
+ activeKey.value = to.name;
|
|
|
+});
|
|
|
+watch(
|
|
|
+ () => userStore.moduleMenus,
|
|
|
+ () => {
|
|
|
+ setOpenMenu();
|
|
|
+ setTimeout(() => {
|
|
|
+ key.value = new Date().getTime() + '';
|
|
|
+ }, 0);
|
|
|
+ }
|
|
|
+);
|
|
|
const onCollapse = () => {
|
|
|
appStore.toggleMenu();
|
|
|
};
|
|
|
-// watch(
|
|
|
-// () => route,
|
|
|
-// (v) => {
|
|
|
-// initMenu();
|
|
|
-// },
|
|
|
-// { deep: true }
|
|
|
-// );
|
|
|
const setOpenMenu = () => {
|
|
|
openKeys.value = [];
|
|
|
- if (route.matched.length && route.matched.length > 1) {
|
|
|
- const last = route.matched[route.matched.length - 1];
|
|
|
- if (last.meta && Array.isArray(last.meta.breadcrumb))
|
|
|
- last.meta.breadcrumb.map((item) => {
|
|
|
- openKeys.value.push(item.name);
|
|
|
- });
|
|
|
+ //如果初始化的时候左侧全部展开
|
|
|
+ const moduleMenus = userStore.moduleMenus;
|
|
|
+ for (const item of moduleMenus) {
|
|
|
+ openKeys.value.push(item.name);
|
|
|
}
|
|
|
+
|
|
|
+ //如果只展开当前页面所在的父菜单
|
|
|
+ // if (route.matched.length && route.matched.length > 1) {
|
|
|
+ // const last = route.matched[route.matched.length - 1];
|
|
|
+ // if (last.meta && Array.isArray(last.meta.breadcrumb))
|
|
|
+ // last.meta.breadcrumb.map((item) => {
|
|
|
+ // openKeys.value.push(item.name);
|
|
|
+ // });
|
|
|
+ // }
|
|
|
};
|
|
|
</script>
|
|
|
|