vue-vben-admin/src/hooks/setting/useMenuSetting.ts

162 lines
4.6 KiB
TypeScript
Raw Normal View History

2020-11-23 23:24:13 +08:00
import type { MenuSetting } from '/@/types/config';
import { computed, unref, ref } from 'vue';
2020-11-23 23:24:13 +08:00
import { appStore } from '/@/store/modules/app';
import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from '/@/enums/appEnum';
import { MenuModeEnum, MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum';
2020-12-13 22:05:34 +08:00
import { useFullContent } from '/@/hooks/web/useFullContent';
2020-11-23 23:24:13 +08:00
const mixSideHasChildren = ref(false);
2020-12-07 22:18:57 +08:00
// Get menu configuration
const getMenuSetting = computed(() => appStore.getProjectConfig.menuSetting);
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getCollapsed = computed(() => unref(getMenuSetting).collapsed);
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getMenuType = computed(() => unref(getMenuSetting).type);
2020-11-24 22:59:29 +08:00
2020-12-07 22:18:57 +08:00
const getMenuMode = computed(() => unref(getMenuSetting).mode);
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getMenuFixed = computed(() => unref(getMenuSetting).fixed);
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getShowMenu = computed(() => unref(getMenuSetting).show);
2020-11-24 22:59:29 +08:00
2020-12-07 22:18:57 +08:00
const getMenuHidden = computed(() => unref(getMenuSetting).hidden);
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getMenuWidth = computed(() => unref(getMenuSetting).menuWidth);
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getTrigger = computed(() => unref(getMenuSetting).trigger);
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getMenuTheme = computed(() => unref(getMenuSetting).theme);
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getSplit = computed(() => unref(getMenuSetting).split);
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getMenuBgColor = computed(() => unref(getMenuSetting).bgColor);
2020-11-24 22:59:29 +08:00
2021-01-01 23:03:40 +08:00
const getMixSideTrigger = computed(() => unref(getMenuSetting).mixSideTrigger);
2020-12-07 22:18:57 +08:00
const getCanDrag = computed(() => unref(getMenuSetting).canDrag);
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getAccordion = computed(() => unref(getMenuSetting).accordion);
2020-11-23 23:24:13 +08:00
const getMixSideFixed = computed(() => unref(getMenuSetting).mixSideFixed);
2020-12-07 22:18:57 +08:00
const getTopMenuAlign = computed(() => unref(getMenuSetting).topMenuAlign);
2020-11-23 23:24:13 +08:00
2020-12-21 23:38:16 +08:00
const getCloseMixSidebarOnChange = computed(() => unref(getMenuSetting).closeMixSidebarOnChange);
2020-12-07 22:18:57 +08:00
const getIsSidebarType = computed(() => unref(getMenuType) === MenuTypeEnum.SIDEBAR);
2020-11-24 22:59:29 +08:00
2020-12-07 22:18:57 +08:00
const getIsTopMenu = computed(() => unref(getMenuType) === MenuTypeEnum.TOP_MENU);
2020-11-23 23:24:13 +08:00
2020-12-22 23:18:50 +08:00
const getCollapsedShowTitle = computed(() => unref(getMenuSetting).collapsedShowTitle);
2020-12-07 22:18:57 +08:00
const getShowTopMenu = computed(() => {
return unref(getMenuMode) === MenuModeEnum.HORIZONTAL || unref(getSplit);
});
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getShowHeaderTrigger = computed(() => {
2020-12-15 14:59:22 +08:00
if (unref(getMenuType) === MenuTypeEnum.TOP_MENU || !unref(getShowMenu) || unref(getMenuHidden)) {
2020-12-07 22:18:57 +08:00
return false;
}
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
return unref(getTrigger) === TriggerEnum.HEADER;
});
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getIsHorizontal = computed(() => {
return unref(getMenuMode) === MenuModeEnum.HORIZONTAL;
});
2020-11-24 22:59:29 +08:00
2020-12-21 23:38:16 +08:00
const getIsMixSidebar = computed(() => {
return unref(getMenuType) === MenuTypeEnum.MIX_SIDEBAR;
});
2020-12-15 00:13:23 +08:00
const getIsMixMode = computed(() => {
return unref(getMenuMode) === MenuModeEnum.INLINE && unref(getMenuType) === MenuTypeEnum.MIX;
});
2020-12-07 22:18:57 +08:00
const getRealWidth = computed(() => {
2021-01-06 20:10:16 +08:00
return unref(getCollapsed) && !unref(getMixSideFixed)
? unref(getMiniWidthNumber)
: unref(getMenuWidth);
2020-12-07 22:18:57 +08:00
});
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getMiniWidthNumber = computed(() => {
2020-12-22 23:18:50 +08:00
const { collapsedShowTitle } = unref(getMenuSetting);
return collapsedShowTitle ? SIDE_BAR_SHOW_TIT_MINI_WIDTH : SIDE_BAR_MINI_WIDTH;
2020-12-07 22:18:57 +08:00
});
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
const getCalcContentWidth = computed(() => {
2020-12-15 14:59:22 +08:00
const width =
unref(getIsTopMenu) || !unref(getShowMenu) || (unref(getSplit) && unref(getMenuHidden))
? 0
2020-12-21 23:38:16 +08:00
: unref(getIsMixSidebar)
2021-01-07 21:16:30 +08:00
? (unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH) +
(unref(getMixSideFixed) && unref(mixSideHasChildren) ? unref(getRealWidth) : 0)
2020-12-15 14:59:22 +08:00
: unref(getRealWidth);
2021-01-07 21:16:30 +08:00
2020-12-07 22:18:57 +08:00
return `calc(100% - ${unref(width)}px)`;
});
2020-11-23 23:24:13 +08:00
2020-12-13 22:05:34 +08:00
const { getFullContent: fullContent } = useFullContent();
const getShowSidebar = computed(() => {
return (
unref(getSplit) ||
(unref(getShowMenu) && unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && !unref(fullContent))
);
});
2020-12-07 22:18:57 +08:00
// Set menu configuration
function setMenuSetting(menuSetting: Partial<MenuSetting>): void {
appStore.commitProjectConfigState({ menuSetting });
}
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
function toggleCollapsed() {
setMenuSetting({
collapsed: !unref(getCollapsed),
});
}
2020-11-23 23:24:13 +08:00
2020-12-07 22:18:57 +08:00
export function useMenuSetting() {
2020-11-23 23:24:13 +08:00
return {
setMenuSetting,
toggleCollapsed,
2020-11-24 22:59:29 +08:00
getMenuFixed,
2020-11-23 23:24:13 +08:00
getMenuSetting,
2020-11-24 22:59:29 +08:00
getRealWidth,
getMenuType,
getMenuMode,
getShowMenu,
2020-11-23 23:24:13 +08:00
getCollapsed,
getMiniWidthNumber,
getCalcContentWidth,
getMenuWidth,
getTrigger,
getSplit,
2020-11-24 22:59:29 +08:00
getMenuTheme,
2020-11-25 22:28:58 +08:00
getCanDrag,
2020-12-22 23:18:50 +08:00
getCollapsedShowTitle,
2020-11-23 23:24:13 +08:00
getIsHorizontal,
getIsSidebarType,
getAccordion,
getShowTopMenu,
getShowHeaderTrigger,
getTopMenuAlign,
2020-11-24 22:59:29 +08:00
getMenuHidden,
getIsTopMenu,
getMenuBgColor,
2020-12-13 22:05:34 +08:00
getShowSidebar,
2020-12-15 00:13:23 +08:00
getIsMixMode,
2020-12-21 23:38:16 +08:00
getIsMixSidebar,
getCloseMixSidebarOnChange,
2021-01-01 23:03:40 +08:00
getMixSideTrigger,
getMixSideFixed,
mixSideHasChildren,
2020-11-23 23:24:13 +08:00
};
}