1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import './index.less';
- import { computed, defineComponent, ref, unref } from 'vue';
- import { Layout } from 'ant-design-vue';
- import LayoutMenu from '/@/layouts/default/menu/LayoutMenu';
- import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
- import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
- import { useTrigger, useDragLine, useSiderEvent } from './useLayoutSider';
- export default defineComponent({
- name: 'LayoutSideBar',
- setup() {
- const dragBarRef = ref<Nullable<HTMLDivElement>>(null);
- const sideRef = ref<Nullable<HTMLDivElement>>(null);
- const { getCollapsed, getMenuWidth, getSplit, getTheme } = useMenuSetting();
- const { getTriggerAttr, getTriggerSlot } = useTrigger();
- const { renderDragLine } = useDragLine(sideRef, dragBarRef);
- const {
- getCollapsedWidth,
- onBreakpointChange,
- onCollapseChange,
- onSiderClick,
- } = useSiderEvent();
- const getMode = computed(() => {
- return unref(getSplit) ? MenuModeEnum.INLINE : null;
- });
- const getSplitType = computed(() => {
- return unref(getSplit) ? MenuSplitTyeEnum.LEFT : MenuSplitTyeEnum.NONE;
- });
- function renderDefault() {
- return (
- <>
- <LayoutMenu
- theme={unref(getTheme)}
- menuMode={unref(getMode)}
- splitType={unref(getSplitType)}
- />
- {renderDragLine()}
- </>
- );
- }
- return () => {
- return (
- <Layout.Sider
- ref={sideRef}
- class="layout-sidebar"
- breakpoint="md"
- collapsible
- width={unref(getMenuWidth)}
- collapsed={unref(getCollapsed)}
- collapsedWidth={unref(getCollapsedWidth)}
- theme={unref(getTheme)}
- onClick={onSiderClick}
- onCollapse={onCollapseChange}
- onBreakpoint={onBreakpointChange}
- {...unref(getTriggerAttr)}
- >
- {{
- ...unref(getTriggerSlot),
- default: () => renderDefault(),
- }}
- </Layout.Sider>
- );
- };
- },
- });
|