| | |
| | | import { defineComponent, ref, h, compile, computed } from 'vue'; |
| | | import { useI18n } from 'vue-i18n'; |
| | | import { useRoute, useRouter, RouteRecordRaw } from 'vue-router'; |
| | | import type { RouteMeta } from 'vue-router'; |
| | | import type, { RouteMeta } from 'vue-router'; |
| | | import { useAppStore } from '@/store'; |
| | | import { listenerRouteChange } from '@/utils/route-listener'; |
| | | import { openWindow, regexUrl } from '@/utils'; |
| | | import useMenuTree from './use-menu-tree'; |
| | | |
| | | export default defineComponent({ |
| | | emit: ['collapse'], |
| | | setup() { |
| | |
| | | const topMenu = computed(() => appStore.topMenu); |
| | | const openKeys = ref<string[]>([]); |
| | | const selectedKey = ref<string[]>([]); |
| | | const flog = ref(false); |
| | | |
| | | const goto = (item: RouteRecordRaw) => { |
| | | // Open external link |
| | | |
| | | if (regexUrl.test(item.path)) { |
| | | openWindow(item.path); |
| | | selectedKey.value = [item.name as string]; |
| | |
| | | } |
| | | // Eliminate external link side effects |
| | | const { hideInMenu, activeMenu } = item.meta as RouteMeta; |
| | | |
| | | if (route.name === item.name && !hideInMenu && !activeMenu) { |
| | | selectedKey.value = [item.name as string]; |
| | | return; |
| | | } |
| | | |
| | | // const firstMenuNameArr=['model','knowledge','session','sessionRecords']; |
| | | // const suffix='Manager'; |
| | | // if(firstMenuNameArr.indexOf(item.name)!=-1){ |
| | | // router.push({ |
| | | // name: `${item.name}${suffix}`, |
| | | // }); |
| | | // } else{ |
| | | // router.push({ |
| | | // name: item.name, |
| | | // }); |
| | | // } |
| | | // Trigger router change |
| | | |
| | | router.push({ |
| | | name: item.name, |
| | | }); |
| | |
| | | }; |
| | | listenerRouteChange((newRoute) => { |
| | | const { requiresAuth, activeMenu, hideInMenu } = newRoute.meta; |
| | | if (requiresAuth && (!hideInMenu || activeMenu)) { |
| | | // if (requiresAuth && (!hideInMenu || activeMenu)) {//除去这两个判断后,可以正常展开菜单 |
| | | if (requiresAuth) { |
| | | const menuOpenKeys = findMenuOpenKeys( |
| | | (activeMenu || newRoute.name) as string |
| | | ); |
| | |
| | | activeMenu || menuOpenKeys[menuOpenKeys.length - 1], |
| | | ]; |
| | | } |
| | | console.log(selectedKey.value, 48877); |
| | | }, true); |
| | | const setCollapse = (val: boolean) => { |
| | | if (appStore.device === 'desktop') |
| | |
| | | ) : ( |
| | | <a-menu-item |
| | | key={element?.name} |
| | | class={ |
| | | menuTree.value.length == 1 && |
| | | menuTree.value[0].name == 'sessionManager' |
| | | ? 'session-manager' |
| | | : '' |
| | | } |
| | | v-slots={{ icon }} |
| | | onClick={() => goto(element)} |
| | | > |
| | |
| | | return travel(menuTree.value); |
| | | }; |
| | | |
| | | // selected-keys={selectedKey.value} |
| | | // v-if={ |
| | | // menuTree.value.length == 1 && |
| | | // menuTree.value[0].name != 'sessionManager' |
| | | // } |
| | | console.log(menuTree.value, 68877); |
| | | |
| | | return () => ( |
| | | <a-menu |
| | | mode={topMenu.value ? 'horizontal' : 'vertical'} |
| | |
| | | v-model:open-keys={openKeys.value} |
| | | show-collapse-button={appStore.device !== 'mobile'} |
| | | auto-open={false} |
| | | selected-keys={selectedKey.value} |
| | | auto-open-selected={true} |
| | | selected-keys={selectedKey.value} |
| | | level-indent={34} |
| | | style="height: 100%;width:100%;" |
| | | onCollapse={setCollapse} |
| | |
| | | } |
| | | } |
| | | } |
| | | .session-manager { |
| | | display: none; |
| | | } |
| | | </style> |