From 6719e2679f2f3a40222f5eda6a2b14fe0fb3d64f Mon Sep 17 00:00:00 2001 From: Netfan Date: Sat, 11 Jan 2025 23:37:17 +0800 Subject: [PATCH] feat: popup component support overlay blur effect (#5359) --- docs/src/components/common-ui/vben-drawer.md | 1 + docs/src/components/common-ui/vben-modal.md | 1 + .../ui-kit/popup-ui/src/drawer/drawer.ts | 6 ++++- .../ui-kit/popup-ui/src/drawer/drawer.vue | 2 ++ .../@core/ui-kit/popup-ui/src/modal/modal.ts | 4 ++++ .../@core/ui-kit/popup-ui/src/modal/modal.vue | 2 ++ .../shadcn-ui/src/ui/dialog/DialogContent.vue | 8 ++++++- .../shadcn-ui/src/ui/sheet/SheetContent.vue | 16 +++++++++++-- .../src/views/examples/drawer/base-demo.vue | 3 +++ .../src/views/examples/drawer/index.vue | 7 ++++++ .../src/views/examples/modal/blur-demo.vue | 23 +++++++++++++++++++ playground/src/views/examples/modal/index.vue | 17 ++++++++++++++ 12 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 playground/src/views/examples/modal/blur-demo.vue diff --git a/docs/src/components/common-ui/vben-drawer.md b/docs/src/components/common-ui/vben-drawer.md index 43cb9889c..044208555 100644 --- a/docs/src/components/common-ui/vben-drawer.md +++ b/docs/src/components/common-ui/vben-drawer.md @@ -101,6 +101,7 @@ const [Drawer, drawerApi] = useVbenDrawer({ | footerClass | modal底部区域的class | `string` | - | | headerClass | modal顶部区域的class | `string` | - | | zIndex | 抽屉的ZIndex层级 | `number` | `1000` | +| overlayBlur | 遮罩模糊度 | `number` | - | ::: info appendToMain diff --git a/docs/src/components/common-ui/vben-modal.md b/docs/src/components/common-ui/vben-modal.md index 45204bffa..f3e2a17bb 100644 --- a/docs/src/components/common-ui/vben-modal.md +++ b/docs/src/components/common-ui/vben-modal.md @@ -111,6 +111,7 @@ const [Modal, modalApi] = useVbenModal({ | headerClass | modal顶部区域的class | `string` | - | | bordered | 是否显示border | `boolean` | `false` | | zIndex | 弹窗的ZIndex层级 | `number` | `1000` | +| overlayBlur | 遮罩模糊度 | `number` | - | ::: info appendToMain diff --git a/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts b/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts index d2825bd61..c43677d3e 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts +++ b/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts @@ -85,12 +85,16 @@ export interface DrawerProps { * 是否自动聚焦 */ openAutoFocus?: boolean; + /** + * 弹窗遮罩模糊效果 + */ + overlayBlur?: number; + /** * 抽屉位置 * @default right */ placement?: DrawerPlacement; - /** * 是否显示取消按钮 * @default true diff --git a/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue b/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue index 30687bd34..1b1a4a509 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue +++ b/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue @@ -68,6 +68,7 @@ const { loading: showLoading, modal, openAutoFocus, + overlayBlur, placement, showCancelButton, showConfirmButton, @@ -140,6 +141,7 @@ const getAppendTo = computed(() => { :open="state?.isOpen" :side="placement" :z-index="zIndex" + :overlay-blur="overlayBlur" @close-auto-focus="handleFocusOutside" @closed="() => drawerApi?.onClosed()" @escape-key-down="escapeKeyDown" diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal.ts b/packages/@core/ui-kit/popup-ui/src/modal/modal.ts index e69019fb4..14225e8c7 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal.ts @@ -99,6 +99,10 @@ export interface ModalProps { * 是否自动聚焦 */ openAutoFocus?: boolean; + /** + * 弹窗遮罩模糊效果 + */ + overlayBlur?: number; /** * 是否显示取消按钮 * @default true diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue index 4e7d7ca78..ae02a245a 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue @@ -77,6 +77,7 @@ const { loading: showLoading, modal, openAutoFocus, + overlayBlur, showCancelButton, showConfirmButton, title, @@ -196,6 +197,7 @@ const getAppendTo = computed(() => { :open="state?.isOpen" :show-close="closable" :z-index="zIndex" + :overlay-blur="overlayBlur" close-class="top-3" @close-auto-focus="handleFocusOutside" @closed="() => modalApi?.onClosed()" diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue index 67bf64a68..bf91f7e92 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue @@ -25,6 +25,7 @@ const props = withDefaults( closeClass?: ClassType; modal?: boolean; open?: boolean; + overlayBlur?: number; showClose?: boolean; zIndex?: number; } @@ -82,7 +83,12 @@ defineExpose({ diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue index f8e22168c..4ab6231ce 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue @@ -17,6 +17,7 @@ interface SheetContentProps extends DialogContentProps { class?: any; modal?: boolean; open?: boolean; + overlayBlur?: number; side?: SheetVariants['side']; zIndex?: number; } @@ -75,12 +76,23 @@ function onAnimationEnd(event: AnimationEvent) { + + +

遮罩层应用类似毛玻璃的模糊效果

+ +