useMenuSetting.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import type { MenuSetting } from '/#/config';
  2. import { computed, unref, ref } from 'vue';
  3. import { appStore } from '/@/store/modules/app';
  4. import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from '/@/enums/appEnum';
  5. import { MenuModeEnum, MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum';
  6. import { useFullContent } from '/@/hooks/web/useFullContent';
  7. const mixSideHasChildren = ref(false);
  8. // Get menu configuration
  9. const getMenuSetting = computed(() => appStore.getProjectConfig.menuSetting);
  10. const getCollapsed = computed(() => unref(getMenuSetting).collapsed);
  11. const getMenuType = computed(() => unref(getMenuSetting).type);
  12. const getMenuMode = computed(() => unref(getMenuSetting).mode);
  13. const getMenuFixed = computed(() => unref(getMenuSetting).fixed);
  14. const getShowMenu = computed(() => unref(getMenuSetting).show);
  15. const getMenuHidden = computed(() => unref(getMenuSetting).hidden);
  16. const getMenuWidth = computed(() => unref(getMenuSetting).menuWidth);
  17. const getTrigger = computed(() => unref(getMenuSetting).trigger);
  18. const getMenuTheme = computed(() => unref(getMenuSetting).theme);
  19. const getSplit = computed(() => unref(getMenuSetting).split);
  20. const getMenuBgColor = computed(() => unref(getMenuSetting).bgColor);
  21. const getMixSideTrigger = computed(() => unref(getMenuSetting).mixSideTrigger);
  22. const getCanDrag = computed(() => unref(getMenuSetting).canDrag);
  23. const getAccordion = computed(() => unref(getMenuSetting).accordion);
  24. const getMixSideFixed = computed(() => unref(getMenuSetting).mixSideFixed);
  25. const getTopMenuAlign = computed(() => unref(getMenuSetting).topMenuAlign);
  26. const getCloseMixSidebarOnChange = computed(() => unref(getMenuSetting).closeMixSidebarOnChange);
  27. const getIsSidebarType = computed(() => unref(getMenuType) === MenuTypeEnum.SIDEBAR);
  28. const getIsTopMenu = computed(() => unref(getMenuType) === MenuTypeEnum.TOP_MENU);
  29. const getCollapsedShowTitle = computed(() => unref(getMenuSetting).collapsedShowTitle);
  30. const getShowTopMenu = computed(() => {
  31. return unref(getMenuMode) === MenuModeEnum.HORIZONTAL || unref(getSplit);
  32. });
  33. const getShowHeaderTrigger = computed(() => {
  34. if (unref(getMenuType) === MenuTypeEnum.TOP_MENU || !unref(getShowMenu) || unref(getMenuHidden)) {
  35. return false;
  36. }
  37. return unref(getTrigger) === TriggerEnum.HEADER;
  38. });
  39. const getIsHorizontal = computed(() => {
  40. return unref(getMenuMode) === MenuModeEnum.HORIZONTAL;
  41. });
  42. const getIsMixSidebar = computed(() => {
  43. return unref(getMenuType) === MenuTypeEnum.MIX_SIDEBAR;
  44. });
  45. const getIsMixMode = computed(() => {
  46. return unref(getMenuMode) === MenuModeEnum.INLINE && unref(getMenuType) === MenuTypeEnum.MIX;
  47. });
  48. const getRealWidth = computed(() => {
  49. if (unref(getIsMixSidebar)) {
  50. return unref(getCollapsed) && !unref(getMixSideFixed)
  51. ? unref(getMiniWidthNumber)
  52. : unref(getMenuWidth);
  53. }
  54. return unref(getCollapsed) ? unref(getMiniWidthNumber) : unref(getMenuWidth);
  55. });
  56. const getMiniWidthNumber = computed(() => {
  57. const { collapsedShowTitle } = unref(getMenuSetting);
  58. return collapsedShowTitle ? SIDE_BAR_SHOW_TIT_MINI_WIDTH : SIDE_BAR_MINI_WIDTH;
  59. });
  60. const getCalcContentWidth = computed(() => {
  61. const width =
  62. unref(getIsTopMenu) || !unref(getShowMenu) || (unref(getSplit) && unref(getMenuHidden))
  63. ? 0
  64. : unref(getIsMixSidebar)
  65. ? (unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH) +
  66. (unref(getMixSideFixed) && unref(mixSideHasChildren) ? unref(getRealWidth) : 0)
  67. : unref(getRealWidth);
  68. return `calc(100% - ${unref(width)}px)`;
  69. });
  70. const { getFullContent: fullContent } = useFullContent();
  71. const getShowSidebar = computed(() => {
  72. return (
  73. unref(getSplit) ||
  74. (unref(getShowMenu) && unref(getMenuMode) !== MenuModeEnum.HORIZONTAL && !unref(fullContent))
  75. );
  76. });
  77. // Set menu configuration
  78. function setMenuSetting(menuSetting: Partial<MenuSetting>): void {
  79. appStore.commitProjectConfigState({ menuSetting });
  80. }
  81. function toggleCollapsed() {
  82. setMenuSetting({
  83. collapsed: !unref(getCollapsed),
  84. });
  85. }
  86. export function useMenuSetting() {
  87. return {
  88. setMenuSetting,
  89. toggleCollapsed,
  90. getMenuFixed,
  91. getMenuSetting,
  92. getRealWidth,
  93. getMenuType,
  94. getMenuMode,
  95. getShowMenu,
  96. getCollapsed,
  97. getMiniWidthNumber,
  98. getCalcContentWidth,
  99. getMenuWidth,
  100. getTrigger,
  101. getSplit,
  102. getMenuTheme,
  103. getCanDrag,
  104. getCollapsedShowTitle,
  105. getIsHorizontal,
  106. getIsSidebarType,
  107. getAccordion,
  108. getShowTopMenu,
  109. getShowHeaderTrigger,
  110. getTopMenuAlign,
  111. getMenuHidden,
  112. getIsTopMenu,
  113. getMenuBgColor,
  114. getShowSidebar,
  115. getIsMixMode,
  116. getIsMixSidebar,
  117. getCloseMixSidebarOnChange,
  118. getMixSideTrigger,
  119. getMixSideFixed,
  120. mixSideHasChildren,
  121. };
  122. }