zhangxiao
2024-08-26 a4ca216c5b215f323b3c439b2f445dad72bbfce1
src/components/menu/index.vue
@@ -2,7 +2,7 @@
  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';
@@ -28,9 +28,11 @@
      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];
@@ -38,25 +40,28 @@
        }
        // 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,
          });
        }
        // 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({
        router.push({
          name: item.name,
        });*/
        });
      };
      const findMenuOpenKeys = (target: string) => {
        const result: string[] = [];
@@ -81,7 +86,8 @@
      };
      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
          );
@@ -93,6 +99,7 @@
            activeMenu || menuOpenKeys[menuOpenKeys.length - 1],
          ];
        }
        console.log(selectedKey.value, 48877);
      }, true);
      const setCollapse = (val: boolean) => {
        if (appStore.device === 'desktop')
@@ -121,6 +128,12 @@
                ) : (
                  <a-menu-item
                    key={element?.name}
                    class={
                      menuTree.value.length == 1 &&
                      menuTree.value[0].name == 'sessionManager'
                        ? 'session-manager'
                        : ''
                    }
                    v-slots={{ icon }}
                    onClick={() => goto(element)}
                  >
@@ -135,6 +148,13 @@
        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'}
@@ -142,8 +162,8 @@
          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}
@@ -167,4 +187,7 @@
      }
    }
  }
  .session-manager {
    display: none;
  }
</style>