Skip to content

Commit c0962fe

Browse files
authored
fix: auto close popup on deactivated (#6368)
* 修复挂载到内容区域的弹窗和抽屉被意外关闭的问题
1 parent 8ba7bdf commit c0962fe

File tree

4 files changed

+40
-18
lines changed

4 files changed

+40
-18
lines changed

packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
<script lang="ts" setup>
22
import type { DrawerProps, ExtendedDrawerApi } from './drawer';
33
4-
import { computed, provide, ref, unref, useId, watch } from 'vue';
4+
import {
5+
computed,
6+
onDeactivated,
7+
provide,
8+
ref,
9+
unref,
10+
useId,
11+
watch,
12+
} from 'vue';
513
614
import {
715
useIsMobile,
@@ -94,6 +102,16 @@ const {
94102
// },
95103
// );
96104
105+
/**
106+
* 在开启keepAlive情况下 直接通过浏览器按钮/手势等返回 不会关闭弹窗
107+
*/
108+
onDeactivated(() => {
109+
// 如果弹窗没有被挂载到内容区域,则关闭弹窗
110+
if (!appendToMain.value) {
111+
props.drawerApi?.close();
112+
}
113+
});
114+
97115
function interactOutside(e: Event) {
98116
if (!closeOnClickModal.value || submitting.value) {
99117
e.preventDefault();

packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
h,
1010
inject,
1111
nextTick,
12-
onDeactivated,
1312
provide,
1413
reactive,
1514
ref,
@@ -72,13 +71,6 @@ export function useVbenDrawer<
7271
},
7372
);
7473

75-
/**
76-
* 在开启keepAlive情况下 直接通过浏览器按钮/手势等返回 不会关闭弹窗
77-
*/
78-
onDeactivated(() => {
79-
(extendedApi as ExtendedDrawerApi)?.close?.();
80-
});
81-
8274
return [Drawer, extendedApi as ExtendedDrawerApi] as const;
8375
}
8476

packages/@core/ui-kit/popup-ui/src/modal/modal.vue

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
11
<script lang="ts" setup>
22
import type { ExtendedModalApi, ModalProps } from './modal';
33
4-
import { computed, nextTick, provide, ref, unref, useId, watch } from 'vue';
4+
import {
5+
computed,
6+
nextTick,
7+
onDeactivated,
8+
provide,
9+
ref,
10+
unref,
11+
useId,
12+
watch,
13+
} from 'vue';
514
615
import {
716
useIsMobile,
@@ -135,6 +144,16 @@ watch(
135144
// },
136145
// );
137146
147+
/**
148+
* 在开启keepAlive情况下 直接通过浏览器按钮/手势等返回 不会关闭弹窗
149+
*/
150+
onDeactivated(() => {
151+
// 如果弹窗没有被挂载到内容区域,则关闭弹窗
152+
if (!appendToMain.value) {
153+
props.modalApi?.close();
154+
}
155+
});
156+
138157
function handleFullscreen() {
139158
props.modalApi?.setState((prev) => {
140159
// if (prev.fullscreen) {

packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {
55
h,
66
inject,
77
nextTick,
8-
onDeactivated,
98
provide,
109
reactive,
1110
ref,
@@ -71,13 +70,6 @@ export function useVbenModal<TParentModalProps extends ModalProps = ModalProps>(
7170
},
7271
);
7372

74-
/**
75-
* 在开启keepAlive情况下 直接通过浏览器按钮/手势等返回 不会关闭弹窗
76-
*/
77-
onDeactivated(() => {
78-
(extendedApi as ExtendedModalApi)?.close?.();
79-
});
80-
8173
return [Modal, extendedApi as ExtendedModalApi] as const;
8274
}
8375

@@ -130,6 +122,7 @@ export function useVbenModal<TParentModalProps extends ModalProps = ModalProps>(
130122
},
131123
);
132124
injectData.extendApi?.(extendedApi);
125+
133126
return [Modal, extendedApi] as const;
134127
}
135128

0 commit comments

Comments
 (0)