LayoutSideBar.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import './index.less';
  2. import { computed, defineComponent, ref, unref } from 'vue';
  3. import { Layout } from 'ant-design-vue';
  4. import LayoutMenu from '/@/layouts/default/menu/LayoutMenu';
  5. import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
  6. import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
  7. import { useTrigger, useDragLine, useSiderEvent } from './useLayoutSider';
  8. export default defineComponent({
  9. name: 'LayoutSideBar',
  10. setup() {
  11. const dragBarRef = ref<Nullable<HTMLDivElement>>(null);
  12. const sideRef = ref<Nullable<HTMLDivElement>>(null);
  13. const { getCollapsed, getMenuWidth, getSplit, getTheme } = useMenuSetting();
  14. const { getTriggerAttr, getTriggerSlot } = useTrigger();
  15. const { renderDragLine } = useDragLine(sideRef, dragBarRef);
  16. const {
  17. getCollapsedWidth,
  18. onBreakpointChange,
  19. onCollapseChange,
  20. onSiderClick,
  21. } = useSiderEvent();
  22. const getMode = computed(() => {
  23. return unref(getSplit) ? MenuModeEnum.INLINE : null;
  24. });
  25. const getSplitType = computed(() => {
  26. return unref(getSplit) ? MenuSplitTyeEnum.LEFT : MenuSplitTyeEnum.NONE;
  27. });
  28. function renderDefault() {
  29. return (
  30. <>
  31. <LayoutMenu
  32. theme={unref(getTheme)}
  33. menuMode={unref(getMode)}
  34. splitType={unref(getSplitType)}
  35. />
  36. {renderDragLine()}
  37. </>
  38. );
  39. }
  40. return () => {
  41. return (
  42. <Layout.Sider
  43. ref={sideRef}
  44. class="layout-sidebar"
  45. breakpoint="md"
  46. collapsible
  47. width={unref(getMenuWidth)}
  48. collapsed={unref(getCollapsed)}
  49. collapsedWidth={unref(getCollapsedWidth)}
  50. theme={unref(getTheme)}
  51. onClick={onSiderClick}
  52. onCollapse={onCollapseChange}
  53. onBreakpoint={onBreakpointChange}
  54. {...unref(getTriggerAttr)}
  55. >
  56. {{
  57. ...unref(getTriggerSlot),
  58. default: () => renderDefault(),
  59. }}
  60. </Layout.Sider>
  61. );
  62. };
  63. },
  64. });