import Child from './DrawerChild'; import { initDefaultProps } from '../../_util/props-util'; import { defineComponent, ref } from 'vue'; import { drawerProps } from './IDrawerPropTypes'; import PortalWrapper from '../../_util/PortalWrapper'; const DrawerWrapper = defineComponent({ compatConfig: { MODE: 3 }, inheritAttrs: false, props: initDefaultProps(drawerProps(), { prefixCls: 'drawer', placement: 'left', getContainer: 'body', level: 'all', duration: '.3s', ease: 'cubic-bezier(0.78, 0.14, 0.15, 0.86)', afterVisibleChange: () => {}, showMask: true, maskClosable: true, maskStyle: {}, wrapperClassName: '', keyboard: true, forceRender: false, autofocus: true, }), emits: ['handleClick', 'close'], setup(props, { emit, slots }) { const dom = ref(null); const onHandleClick = (e: MouseEvent | KeyboardEvent) => { emit('handleClick', e); }; const onClose = (e: MouseEvent | KeyboardEvent) => { emit('close', e); }; return () => { const { getContainer, wrapperClassName, rootClassName, rootStyle, forceRender, ...otherProps } = props; let portal = null; if (!getContainer) { return ( ); } // 如果有 handler 为内置强制渲染; const $forceRender = !!slots.handler || forceRender; if ($forceRender || props.open || dom.value) { portal = ( ( ), }} > ); } return portal; }; }, }); export default DrawerWrapper;