123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import { type RouteLocationNormalized, useRoute, useRouter } from 'vue-router';
- import { useTabbarStore } from '@vben/stores';
- export function useTabs() {
- const router = useRouter();
- const route = useRoute();
- const tabbarStore = useTabbarStore();
- async function closeLeftTabs(tab?: RouteLocationNormalized) {
- await tabbarStore.closeLeftTabs(tab || route);
- }
- async function closeAllTabs() {
- await tabbarStore.closeAllTabs(router);
- }
- async function closeRightTabs(tab?: RouteLocationNormalized) {
- await tabbarStore.closeRightTabs(tab || route);
- }
- async function closeOtherTabs(tab?: RouteLocationNormalized) {
- await tabbarStore.closeOtherTabs(tab || route);
- }
- async function closeCurrentTab(tab?: RouteLocationNormalized) {
- await tabbarStore.closeTab(tab || route, router);
- }
- async function pinTab(tab?: RouteLocationNormalized) {
- await tabbarStore.pinTab(tab || route);
- }
- async function unpinTab(tab?: RouteLocationNormalized) {
- await tabbarStore.unpinTab(tab || route);
- }
- async function toggleTabPin(tab?: RouteLocationNormalized) {
- await tabbarStore.toggleTabPin(tab || route);
- }
- async function refreshTab() {
- await tabbarStore.refresh(router);
- }
- async function openTabInNewWindow(tab?: RouteLocationNormalized) {
- await tabbarStore.openTabInNewWindow(tab || route);
- }
- async function closeTabByKey(key: string) {
- await tabbarStore.closeTabByKey(key, router);
- }
- async function setTabTitle(title: string) {
- tabbarStore.setUpdateTime();
- await tabbarStore.setTabTitle(route, title);
- }
- async function resetTabTitle() {
- tabbarStore.setUpdateTime();
- await tabbarStore.resetTabTitle(route);
- }
- /**
- * 获取操作是否禁用
- * @param tab
- */
- function getTabDisableState(tab: RouteLocationNormalized = route) {
- const tabs = tabbarStore.getTabs;
- const affixTabs = tabbarStore.affixTabs;
- const index = tabs.findIndex((item) => item.path === tab.path);
- const disabled = tabs.length <= 1;
- const { meta } = tab;
- const affixTab = meta?.affixTab ?? false;
- const isCurrentTab = route.path === tab.path;
- // 当前处于最左侧或者减去固定标签页的数量等于0
- const disabledCloseLeft =
- index === 0 || index - affixTabs.length <= 0 || !isCurrentTab;
- const disabledCloseRight = !isCurrentTab || index === tabs.length - 1;
- const disabledCloseOther =
- disabled || !isCurrentTab || tabs.length - affixTabs.length <= 1;
- return {
- disabledCloseAll: disabled,
- disabledCloseCurrent: !!affixTab || disabled,
- disabledCloseLeft,
- disabledCloseOther,
- disabledCloseRight,
- disabledRefresh: !isCurrentTab,
- };
- }
- return {
- closeAllTabs,
- closeCurrentTab,
- closeLeftTabs,
- closeOtherTabs,
- closeRightTabs,
- closeTabByKey,
- getTabDisableState,
- openTabInNewWindow,
- pinTab,
- refreshTab,
- resetTabTitle,
- setTabTitle,
- toggleTabPin,
- unpinTab,
- };
- }
|