|
|
|
@ -5,6 +5,7 @@ import type { |
|
|
|
RouteLocationNormalizedLoadedGeneric, |
|
|
|
} from 'vue-router'; |
|
|
|
|
|
|
|
import { computed } from 'vue'; |
|
|
|
import { RouterView } from 'vue-router'; |
|
|
|
|
|
|
|
import { preferences, usePreferences } from '@vben/preferences'; |
|
|
|
@ -20,6 +21,15 @@ const { keepAlive } = usePreferences(); |
|
|
|
const { getCachedTabs, getExcludeCachedTabs, renderRouteView } = |
|
|
|
storeToRefs(tabbarStore); |
|
|
|
|
|
|
|
/** |
|
|
|
* 是否使用动画 |
|
|
|
*/ |
|
|
|
const getEnabledTransition = computed(() => { |
|
|
|
const { transition } = preferences; |
|
|
|
const transitionName = transition.name; |
|
|
|
return transitionName && transition.enable; |
|
|
|
}); |
|
|
|
|
|
|
|
// 页面切换动画 |
|
|
|
function getTransitionName(_route: RouteLocationNormalizedLoaded) { |
|
|
|
// 如果偏好设置未设置,则不使用动画 |
|
|
|
@ -90,7 +100,12 @@ function transformComponent( |
|
|
|
<div class="relative h-full"> |
|
|
|
<IFrameRouterView /> |
|
|
|
<RouterView v-slot="{ Component, route }"> |
|
|
|
<Transition :name="getTransitionName(route)" appear mode="out-in"> |
|
|
|
<Transition |
|
|
|
v-if="getEnabledTransition" |
|
|
|
:name="getTransitionName(route)" |
|
|
|
appear |
|
|
|
mode="out-in" |
|
|
|
> |
|
|
|
<KeepAlive |
|
|
|
v-if="keepAlive" |
|
|
|
:exclude="getExcludeCachedTabs" |
|
|
|
@ -109,6 +124,25 @@ function transformComponent( |
|
|
|
:key="route.fullPath" |
|
|
|
/> |
|
|
|
</Transition> |
|
|
|
<template v-else> |
|
|
|
<KeepAlive |
|
|
|
v-if="keepAlive" |
|
|
|
:exclude="getExcludeCachedTabs" |
|
|
|
:include="getCachedTabs" |
|
|
|
> |
|
|
|
<component |
|
|
|
:is="transformComponent(Component, route)" |
|
|
|
v-if="renderRouteView" |
|
|
|
v-show="!route.meta.iframeSrc" |
|
|
|
:key="route.fullPath" |
|
|
|
/> |
|
|
|
</KeepAlive> |
|
|
|
<component |
|
|
|
:is="Component" |
|
|
|
v-else-if="renderRouteView" |
|
|
|
:key="route.fullPath" |
|
|
|
/> |
|
|
|
</template> |
|
|
|
</RouterView> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
|