提交 beb4c3a3 编写于 作者: N nebv

fix: fix routing switch, tab is not activated

上级 177010bf
...@@ -239,14 +239,13 @@ export default defineComponent({ ...@@ -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>
......
...@@ -10,6 +10,7 @@ export type RouteLocationRawEx = Omit<RouteLocationRaw, 'path'> & { path: PageEn ...@@ -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);
......
...@@ -3,6 +3,9 @@ import { PageEnum } from '/@/enums/pageEnum'; ...@@ -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() { ...@@ -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,
}; };
} }
<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 @@ ...@@ -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;
}); });
......
...@@ -193,7 +193,7 @@ export default defineComponent({ ...@@ -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}
......
...@@ -48,7 +48,7 @@ ...@@ -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;
......
...@@ -2,7 +2,14 @@ import type { TabContentProps } from './tab.data'; ...@@ -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'; ...@@ -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({ ...@@ -55,6 +64,7 @@ export default defineComponent({
immediate: true, immediate: true,
} }
); );
/** /**
* @description: 过滤所有固定路由 * @description: 过滤所有固定路由
*/ */
...@@ -72,6 +82,7 @@ export default defineComponent({ ...@@ -72,6 +82,7 @@ export default defineComponent({
}); });
return tabs; return tabs;
} }
/** /**
* @description: 设置固定tabs * @description: 设置固定tabs
*/ */
...@@ -87,6 +98,7 @@ export default defineComponent({ ...@@ -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) {
// 新增操作隐藏,目前只使用删除操作 // 新增操作隐藏,目前只使用删除操作
......
...@@ -51,7 +51,7 @@ const setting: ProjectConfig = { ...@@ -51,7 +51,7 @@ const setting: ProjectConfig = {
// 是否显示搜索框 // 是否显示搜索框
showSearch: true, showSearch: true,
// 菜单宽度 // 菜单宽度
menuWidth: 200, menuWidth: 180,
// 菜单模式 // 菜单模式
mode: MenuModeEnum.INLINE, mode: MenuModeEnum.INLINE,
// 菜单类型 // 菜单类型
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册