浏览代码

fix: fix routing switch, tab is not activated

nebv 4 年之前
父节点
当前提交
beb4c3a37f

+ 7 - 8
src/components/Menu/src/BasicMenu.tsx

@@ -239,14 +239,13 @@ export default defineComponent({
       ) : (
         <section class={`basic-menu-wrap`}>
           {getSlot(slots, 'header')}
-          {props.search && (
-            <SearchInput
-              theme={props.theme}
-              onChange={handleInputChange}
-              onClick={handleInputClick}
-              collapsed={getCollapsedState}
-            />
-          )}
+          <SearchInput
+            class={!props.search ? 'hidden' : ''}
+            theme={props.theme}
+            onChange={handleInputChange}
+            onClick={handleInputClick}
+            collapsed={getCollapsedState}
+          />
           <section style={unref(getMenuWrapStyle)}>
             <ScrollContainer>{() => renderMenu()}</ScrollContainer>
           </section>

+ 1 - 0
src/hooks/web/usePage.ts

@@ -10,6 +10,7 @@ export type RouteLocationRawEx = Omit<RouteLocationRaw, 'path'> & { path: PageEn
 
 function handleError(e: Error) {
   console.error(e);
+  // 101是为了 大于 打开时候设置的100延时防止闪动
   setTimeout(() => {
     appStore.commitPageLoadingState(false);
   }, 101);

+ 7 - 3
src/hooks/web/useTabs.ts

@@ -3,6 +3,9 @@ import { PageEnum } from '/@/enums/pageEnum';
 import { TabItem, tabStore } from '/@/store/modules/tab';
 import { appStore } from '/@/store/modules/app';
 import router from '/@/router';
+import { ref } from 'vue';
+
+const activeKeyRef = ref<string>('');
 
 type Fn = () => void;
 type RouteFn = (tabItem: TabItem) => void;
@@ -70,12 +73,13 @@ export function useTabs() {
     closeOther: () => canIUseFn() && closeOther(tabStore.getCurrentTab),
     closeCurrent: () => canIUseFn() && closeCurrent(tabStore.getCurrentTab),
     resetCache: () => canIUseFn() && resetCache(),
-    addTab: (path: PageEnum, goTo = false) => {
+    addTab: (path: PageEnum, goTo = false, replace = false) => {
       useTimeout(() => {
         tabStore.addTabByPathAction(path);
       }, 0);
-
-      goTo && router.push(path);
+      activeKeyRef.value = path;
+      goTo && replace ? router.replace : router.push(path);
     },
+    activeKeyRef,
   };
 }

+ 2 - 2
src/layouts/Logo.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-logo" @click="handleGoHome">
     <img :src="logo" />
-    <div v-if="show" class="logo-title ml-2 ellipsis">{{ globSetting.title }}</div>
+    <div v-if="show" class="logo-title ml-1 ellipsis">{{ globSetting.title }}</div>
   </div>
 </template>
 <script lang="ts">
@@ -62,7 +62,7 @@
     .logo-title {
       display: none;
       font-family: Georgia, serif;
-      font-size: 18px;
+      font-size: 16px;
       .respond-to(medium,{
        display: block;
      });

+ 1 - 1
src/layouts/default/LayoutMenu.tsx

@@ -193,7 +193,7 @@ export default defineComponent({
           class="layout-menu"
           theme={themeData}
           showLogo={isShowLogo}
-          search={unref(showSearchRef)}
+          search={unref(showSearchRef) && !collapsed}
           items={unref(menusRef)}
           flatItems={unref(flatMenusRef)}
           onClickSearchInput={handleClickSearchInput}

+ 1 - 1
src/layouts/default/index.less

@@ -48,7 +48,7 @@
   .layout-menu {
     &__logo {
       height: @header-height;
-      padding: 10px;
+      padding: 10px 4px;
 
       img {
         width: @logo-width;

+ 22 - 10
src/layouts/default/multitabs/index.tsx

@@ -2,7 +2,14 @@ import type { TabContentProps } from './tab.data';
 import type { TabItem } from '/@/store/modules/tab';
 import type { AppRouteRecordRaw } from '/@/router/types';
 
-import { defineComponent, watch, computed, ref, unref, onMounted } from 'vue';
+import {
+  defineComponent,
+  watch,
+  computed,
+  // ref,
+  unref,
+  onMounted,
+} from 'vue';
 import { Tabs } from 'ant-design-vue';
 import TabContent from './TabContent';
 
@@ -12,41 +19,43 @@ import { TabContentEnum } from './tab.data';
 
 import { useRouter } from 'vue-router';
 
-import './index.less';
 import { tabStore } from '/@/store/modules/tab';
 import { closeTab } from './useTabDropdown';
 import router from '/@/router';
 import { useTabs } from '/@/hooks/web/useTabs';
 import { PageEnum } from '/@/enums/pageEnum';
 
+import './index.less';
 export default defineComponent({
   name: 'MultiTabs',
   setup() {
     let isAddAffix = false;
     const go = useGo();
     const { currentRoute } = useRouter();
-
+    const { addTab, activeKeyRef } = useTabs();
     onMounted(() => {
-      const { addTab } = useTabs();
       addTab(unref(currentRoute).path as PageEnum);
     });
 
     // 当前激活tab
-    const activeKeyRef = ref<string>('');
+    // const activeKeyRef = ref<string>('');
+
     // 当前tab列表
     const getTabsState = computed(() => {
       return tabStore.getTabsState;
     });
 
+    if (!isAddAffix) {
+      addAffixTabs();
+      isAddAffix = true;
+    }
+
     watch(
       () => unref(currentRoute).path,
       (path) => {
-        if (!isAddAffix) {
-          addAffixTabs();
-          isAddAffix = true;
+        if (activeKeyRef.value !== path) {
+          activeKeyRef.value = path;
         }
-        activeKeyRef.value = path;
-
         // 监听路由的话虽然可以,但是路由切换的时间会造成卡顿现象?
         // 使用useTab的addTab的话,当用户手动调转,需要自行调用addTab
         // tabStore.commitAddTab((unref(currentRoute) as unknown) as AppRouteRecordRaw);
@@ -55,6 +64,7 @@ export default defineComponent({
         immediate: true,
       }
     );
+
     /**
      * @description: 过滤所有固定路由
      */
@@ -72,6 +82,7 @@ export default defineComponent({
         });
       return tabs;
     }
+
     /**
      * @description: 设置固定tabs
      */
@@ -87,6 +98,7 @@ export default defineComponent({
       activeKeyRef.value = activeKey;
       go(activeKey, false);
     }
+
     // 关闭当前ab
     function handleEdit(targetKey: string) {
       // 新增操作隐藏,目前只使用删除操作

+ 1 - 1
src/settings/projectSetting.ts

@@ -51,7 +51,7 @@ const setting: ProjectConfig = {
     // 是否显示搜索框
     showSearch: true,
     // 菜单宽度
-    menuWidth: 200,
+    menuWidth: 180,
     // 菜单模式
     mode: MenuModeEnum.INLINE,
     // 菜单类型