fix: fix routing switch, tab is not activated

This commit is contained in:
nebv
2020-10-13 01:39:56 +08:00
parent 177010bf8b
commit beb4c3a37f
8 changed files with 42 additions and 26 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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