UNPKG

create-iking-admin

Version:

金合技术中台脚手架

187 lines (141 loc) 5.77 kB
import type { MenuSetting } from '@t/config'; import { computed, ref, unref } from 'vue'; import { useAppStore } from '@/global/store/modules/app'; import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from '@/global/enums/appEnum'; import { MenuModeEnum, MenuTypeEnum, TriggerEnum } from '@/global/enums/menuEnum'; import { useFullContent } from '@/global/hooks/web/useFullContent'; const mixSideHasChildren = ref(false); export function useMenuSetting() { const { getFullContent: fullContent } = useFullContent(); const appStore = useAppStore(); const getShowSidebar = computed(() => { return ( unref(getSplit) || (unref(getShowMenu) && unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && !unref(fullContent)) ); }); const getMenuModeLevelTop = computed(() => MenuModeEnum.LEAVE_ONE_TOP === unref(getMenuMode)); const getCollapsed = computed(() => appStore.getMenuSetting.collapsed); const getMenuType = computed(() => appStore.getMenuSetting.type); const getMenuMode = computed(() => appStore.getMenuSetting.mode); const getMenuFixed = computed(() => appStore.getMenuSetting.fixed); const getShowMenu = computed(() => appStore.getMenuSetting.show); const getMenuHidden = computed(() => appStore.getMenuSetting.hidden); const getMenuWidth = computed(() => appStore.getMenuSetting.menuWidth); const getContentPadding = computed(() => appStore.getMenuSetting.contentPadding); const getContentMargin = computed(() => appStore.getMenuSetting.contentMargin); const getContentRadius = computed(() => appStore.getMenuSetting.contentRadius); const getTrigger = computed(() => appStore.getMenuSetting.trigger); const getMenuTheme = computed(() => appStore.getMenuSetting.theme); const getSplit = computed(() => appStore.getMenuSetting.split); const getMenuBgColor = computed(() => appStore.getMenuSetting.bgColor); const getMixSideTrigger = computed(() => appStore.getMenuSetting.mixSideTrigger); const getCanDrag = computed(() => appStore.getMenuSetting.canDrag); const getAccordion = computed(() => appStore.getMenuSetting.accordion); const getMixSideFixed = computed(() => appStore.getMenuSetting.mixSideFixed); const getTopMenuAlign = computed(() => appStore.getMenuSetting.topMenuAlign); const getTagStyle = computed(() => appStore.getMultiTabsSetting.tagStyle); const getCloseMixSidebarOnChange = computed( () => appStore.getMenuSetting.closeMixSidebarOnChange, ); const getIsSidebarType = computed(() => [MenuTypeEnum.SIDEBAR, MenuTypeEnum.LEAVE_ONE_TOP].includes(unref(getMenuType)), ); const getIsTopMenu = computed(() => unref(getMenuType) === MenuTypeEnum.TOP_MENU); const getCollapsedShowTitle = computed(() => appStore.getMenuSetting.collapsedShowTitle); const getShowTopMenu = computed(() => { return ( [MenuModeEnum.HORIZONTAL, MenuModeEnum.LEAVE_ONE_TOP].includes(unref(getMenuMode)) || unref(getSplit) ); }); const getShowHeaderTrigger = computed(() => { if ( unref(getMenuType) === MenuTypeEnum.TOP_MENU || !unref(getShowMenu) || unref(getMenuHidden) ) { return false; } return unref(getTrigger) === TriggerEnum.HEADER; }); const getIsHorizontal = computed(() => { return unref(getMenuMode) === MenuModeEnum.HORIZONTAL; }); const getIsMixSidebar = computed(() => { return unref(getMenuType) === MenuTypeEnum.MIX_SIDEBAR; }); const getIsMixMode = computed(() => { return unref(getMenuMode) === MenuModeEnum.INLINE && unref(getMenuType) === MenuTypeEnum.MIX; }); const getRealWidth = computed(() => { if (unref(getIsMixSidebar)) { return unref(getCollapsed) && !unref(getMixSideFixed) ? unref(getMiniWidthNumber) : unref(getMenuWidth); } return unref(getCollapsed) ? unref(getMiniWidthNumber) : unref(getMenuWidth); }); const getMiniWidthNumber = computed(() => { const { collapsedShowTitle } = appStore.getMenuSetting; return collapsedShowTitle ? SIDE_BAR_SHOW_TIT_MINI_WIDTH : SIDE_BAR_MINI_WIDTH; }); const getCalcContentWidth = computed(() => { const width = unref(getIsTopMenu) || !unref(getShowMenu) || (unref(getSplit) && unref(getMenuHidden)) ? 0 : unref(getIsMixSidebar) ? (unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH) + (unref(getMixSideFixed) && unref(mixSideHasChildren) ? unref(getRealWidth) : 0) : unref(getRealWidth); return `calc(100% - ${unref(width)}px)`; }); // Set menu configuration function setMenuSetting(menuSetting: Partial<MenuSetting>): void { appStore.setProjectConfig({ menuSetting }); } function toggleCollapsed() { setMenuSetting({ collapsed: !unref(getCollapsed), }); } return { setMenuSetting, toggleCollapsed, getContentRadius, getContentMargin, getMenuFixed, getRealWidth, getMenuType, getMenuMode, getShowMenu, getCollapsed, getMiniWidthNumber, getCalcContentWidth, getMenuWidth, getContentPadding, getTrigger, getSplit, getMenuTheme, getCanDrag, getCollapsedShowTitle, getIsHorizontal, getIsSidebarType, getAccordion, getShowTopMenu, getMenuModeLevelTop, getShowHeaderTrigger, getTopMenuAlign, getMenuHidden, getIsTopMenu, getMenuBgColor, getShowSidebar, getIsMixMode, getIsMixSidebar, getCloseMixSidebarOnChange, getMixSideTrigger, getMixSideFixed, mixSideHasChildren, getTagStyle, }; }