admin-vben5/packages/effects/layouts/src/basic/tabbar/tabbar.vue

64 lines
1.5 KiB
Vue
Raw Normal View History

2024-05-19 21:20:42 +08:00
<script lang="ts" setup>
import { computed } from 'vue';
2024-07-10 00:50:41 +08:00
import { useRoute } from 'vue-router';
import { useContentMaximize, useTabs } from '@vben/hooks';
import { preferences } from '@vben/preferences';
import { useCoreTabbarStore } from '@vben/stores';
import { TabsToolMore, TabsToolScreen, TabsView } from '@vben-core/tabs-ui';
2024-05-19 21:20:42 +08:00
import { useTabbar } from './use-tabbar';
2024-05-19 21:20:42 +08:00
defineOptions({
2024-06-09 15:39:11 +08:00
name: 'LayoutTabbar',
2024-05-19 21:20:42 +08:00
});
2024-07-16 23:13:03 +08:00
defineProps<{ showIcon?: boolean; theme?: string }>();
2024-05-19 21:20:42 +08:00
const route = useRoute();
const coreTabbarStore = useCoreTabbarStore();
const { toggleMaximize } = useContentMaximize();
const { unpinTab } = useTabs();
2024-05-19 21:20:42 +08:00
const {
createContextMenus,
currentActive,
currentTabs,
handleClick,
handleClose,
} = useTabbar();
2024-07-10 00:50:41 +08:00
const menus = computed(() => {
return createContextMenus(route);
});
2024-07-10 00:50:41 +08:00
// 刷新后如果不保持tab状态关闭其他tab
if (!preferences.tabbar.persist) {
coreTabbarStore.closeOtherTabs(route);
}
2024-05-19 21:20:42 +08:00
</script>
<template>
<TabsView
2024-06-09 13:31:43 +08:00
:active="currentActive"
2024-07-16 23:13:03 +08:00
:class="theme"
:context-menus="createContextMenus"
:dragable="preferences.tabbar.dragable"
2024-05-19 21:20:42 +08:00
:show-icon="showIcon"
:style-type="preferences.tabbar.styleType"
2024-05-19 21:20:42 +08:00
:tabs="currentTabs"
@close="handleClose"
@sort-tabs="coreTabbarStore.sortTabs"
@unpin="unpinTab"
2024-06-09 13:31:43 +08:00
@update:active="handleClick"
2024-05-19 21:20:42 +08:00
/>
<div class="flex-center h-full">
<TabsToolMore :menus="menus" />
<TabsToolScreen
:screen="preferences.sidebar.hidden"
@change="toggleMaximize"
@update:screen="toggleMaximize"
/>
</div>
2024-05-19 21:20:42 +08:00
</template>