diff --git a/packages/devui-vue/devui/drawer/src/components/drawer-body.scss b/packages/devui-vue/devui/drawer/src/components/drawer-body.scss
new file mode 100644
index 0000000000000000000000000000000000000000..707fae38018469c198fbfa5a3d57320700f01b3d
--- /dev/null
+++ b/packages/devui-vue/devui/drawer/src/components/drawer-body.scss
@@ -0,0 +1,43 @@
+@import '../../../style/devui.scss';
+
+.devui-drawer {
+ position: fixed;
+ top: 0;
+ left: 0;
+ height: 100vh;
+}
+
+.devui-overlay-wrapper {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ width: 100vw;
+}
+
+.devui-overlay-backdrop {
+ position: absolute;
+ top: 0;
+ left: 0;
+ background: $devui-shadow;
+ width: 100vw;
+ height: 100vh;
+}
+
+.devui-drawer-nav {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ border-radius: $devui-border-radius;
+ background: $devui-base-bg;
+}
+
+.devui-drawer-content {
+ border-radius: $devui-border-radius;
+ overflow: auto;
+ box-shadow: $devui-shadow-length-fullscreen-overlay $devui-shadow;
+ padding: 20px;
+ height: 100vh;
+}
\ No newline at end of file
diff --git a/packages/devui-vue/devui/drawer/src/components/drawer-body.tsx b/packages/devui-vue/devui/drawer/src/components/drawer-body.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..00d64fee17f480050ef4229820b6373fe31ecdac
--- /dev/null
+++ b/packages/devui-vue/devui/drawer/src/components/drawer-body.tsx
@@ -0,0 +1,53 @@
+import { defineComponent, inject, computed, toRefs, onUnmounted } from 'vue'
+
+import './drawer-body.scss'
+
+export default defineComponent({
+ name: 'DrawerBody',
+ setup(props, { slots }) {
+ const isFullScreen: any = inject('isFullScreen')
+ const closeDrawer: any = inject('closeDrawer')
+ const zindex: number = inject('zindex')
+ const isCover: boolean = inject('isCover')
+ const position: any = inject('position')
+ const width: any = inject('width')
+ const visible: boolean = inject('visible')
+
+ const navRight = computed(() => position.value === 'right' ? { 'right': 0 } : { 'left': 0 })
+ const navWidth = computed(() => isFullScreen.value ? '100vw' : width.value)
+
+ let clickContent = (e) => {
+ e.stopPropagation()
+ }
+
+ return {
+ closeDrawer,
+ zindex,
+ slots,
+ isCover,
+ navRight,
+ navWidth,
+ visible,
+ clickContent,
+ }
+ },
+
+ render() {
+ const { zindex, closeDrawer, slots, isCover, navRight, navWidth, visible } = this
+
+ if (!visible) return null
+
+ return (
+
+ {isCover ?
: null}
+
+
+
+ {slots.default ? slots.default() : null}
+
+
+
+
+ )
+ }
+})
\ No newline at end of file
diff --git a/packages/devui-vue/devui/drawer/src/components/drawer-container.tsx b/packages/devui-vue/devui/drawer/src/components/drawer-container.tsx
index ea3202458bbc6daae7765013db674e41a1478c29..c45f3b25456a9197aa6164b1a6d5735d60cdc3cc 100644
--- a/packages/devui-vue/devui/drawer/src/components/drawer-container.tsx
+++ b/packages/devui-vue/devui/drawer/src/components/drawer-container.tsx
@@ -1,8 +1,14 @@
-import { defineComponent } from 'vue'
+import { defineComponent, inject } from 'vue'
export default defineComponent({
name: 'DrawerContainer',
+ setup() {
+ const visible = inject('visible')
+ return { visible }
+ },
render() {
+ const { visible } = this
+ if (!visible) return null
return 内容区域
}
})
\ No newline at end of file
diff --git a/packages/devui-vue/devui/drawer/src/components/drawer-header-type.ts b/packages/devui-vue/devui/drawer/src/components/drawer-header-type.ts
deleted file mode 100644
index c76ce1c22bb7946ebef2412407165ec70f4006cf..0000000000000000000000000000000000000000
--- a/packages/devui-vue/devui/drawer/src/components/drawer-header-type.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import type { ExtractPropTypes} from 'vue'
-
-export const drawerHeaderType = {
-
-} as const
-
-export type DrawerHeaderType = ExtractPropTypes
diff --git a/packages/devui-vue/devui/drawer/src/components/drawer-header.tsx b/packages/devui-vue/devui/drawer/src/components/drawer-header.tsx
index 6866744bd0ccf0c9176d2745b2f62b23aa5f9342..8db4bec7e95cf1c1dc50db7b833526fa26dbe1e1 100644
--- a/packages/devui-vue/devui/drawer/src/components/drawer-header.tsx
+++ b/packages/devui-vue/devui/drawer/src/components/drawer-header.tsx
@@ -1,30 +1,33 @@
-import { defineComponent, ref } from 'vue'
-import { drawerHeaderType, DrawerHeaderType } from './drawer-header-type';
+import { defineComponent, ref, inject, computed, onUnmounted } from 'vue'
import './drawer-header.scss'
export default defineComponent({
name: 'DrawerHeader', // 头部
- props: drawerHeaderType,
emits: ['toggleFullScreen', 'close'],
- setup(props: DrawerHeaderType, ctx) {
- const isFullScreen = ref(false);
+ setup(props, ctx) {
+ const isFullScreen = ref(false)
+
+ const visible: boolean = inject('visible')
+
+ const fullScreenClassName = computed(() => isFullScreen.value ? 'icon icon-minimize' : 'icon icon-maxmize')
const handleFullScreen = (e) => {
- e.stopPropagation();
- isFullScreen.value = !isFullScreen.value;
- ctx.emit('toggleFullScreen');
+ e.stopPropagation()
+ isFullScreen.value = !isFullScreen.value
+ ctx.emit('toggleFullScreen')
}
const handleDrawerClose = () => {
ctx.emit('close')
}
- return { isFullScreen, handleFullScreen, handleDrawerClose }
+ return { fullScreenClassName, visible, handleFullScreen, handleDrawerClose, }
},
render() {
- const { handleFullScreen, handleDrawerClose } = this
- const isFullScreen: string = this.isFullScreen ? 'icon icon-minimize' : 'icon icon-maxmize'
+ const { handleFullScreen, handleDrawerClose, visible, fullScreenClassName } = this
+
+ if (!visible) return null
return (