tabbar.vue 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <script lang="ts" setup>
  2. import { computed } from 'vue';
  3. import { useRoute } from 'vue-router';
  4. import { preferences } from '@vben-core/preferences';
  5. import { useCoreTabbarStore } from '@vben-core/stores';
  6. import { TabsToolMore, TabsToolScreen, TabsView } from '@vben-core/tabs-ui';
  7. import { updateContentScreen, useTabs } from './use-tabs';
  8. defineOptions({
  9. name: 'LayoutTabbar',
  10. });
  11. defineProps<{ showIcon?: boolean }>();
  12. const coreTabbarStore = useCoreTabbarStore();
  13. const route = useRoute();
  14. const {
  15. createContextMenus,
  16. currentActive,
  17. currentTabs,
  18. handleClick,
  19. handleClose,
  20. handleUnpinTab,
  21. } = useTabs();
  22. const menus = computed(() => {
  23. return createContextMenus(route);
  24. });
  25. // 刷新后如果不保持tab状态,关闭其他tab
  26. if (!preferences.tabbar.persist) {
  27. coreTabbarStore.closeOtherTabs(route);
  28. }
  29. </script>
  30. <template>
  31. <TabsView
  32. :active="currentActive"
  33. :context-menus="createContextMenus"
  34. :show-icon="showIcon"
  35. :tabs="currentTabs"
  36. @close="handleClose"
  37. @sort-tabs="coreTabbarStore.sortTabs"
  38. @unpin="handleUnpinTab"
  39. @update:active="handleClick"
  40. />
  41. <div class="flex-center h-full">
  42. <TabsToolMore :menus="menus" />
  43. <TabsToolScreen
  44. :screen="preferences.sidebar.hidden"
  45. @change="updateContentScreen"
  46. @update:screen="updateContentScreen"
  47. />
  48. </div>
  49. </template>