From fd7b3479b4ec18d307ce5deeb9182a3bfe20eec9 Mon Sep 17 00:00:00 2001 From: Vben Date: Mon, 26 Aug 2024 20:54:20 +0800 Subject: [PATCH] fix: improve the display of modal and drawer on mobile (#4237) --- .vscode/settings.json | 3 +- packages/@core/base/design/src/css/global.css | 2 +- .../shared/src/utils/__tests__/dom.test.ts | 2 +- .../shared/src/utils/__tests__/letter.test.ts | 1 - .../shared/src/utils/__tests__/unique.test.ts | 3 +- packages/@core/composables/src/index.ts | 1 + .../@core/composables/src/use-is-mobile.ts | 7 +++ .../ui-kit/popup-ui/src/drawer/drawer-api.ts | 2 + .../ui-kit/popup-ui/src/drawer/drawer.ts | 11 ++++- .../ui-kit/popup-ui/src/drawer/drawer.vue | 46 +++++++++++++++---- .../@core/ui-kit/popup-ui/src/modal/modal.vue | 40 ++++++++++------ .../ui-kit/popup-ui/src/modal/use-modal.ts | 2 +- .../components/ui/dialog/DialogContent.vue | 1 + .../src/components/ui/sheet/SheetContent.vue | 1 + .../src/widgets/lock-screen/lock-screen.vue | 2 +- .../src/widgets/preferences/preferences.vue | 2 +- .../utils/src/helpers/get-popup-container.ts | 3 ++ packages/utils/src/helpers/index.ts | 1 + vitest.workspace.ts | 3 ++ 19 files changed, 99 insertions(+), 34 deletions(-) create mode 100644 packages/@core/composables/src/use-is-mobile.ts create mode 100644 packages/utils/src/helpers/get-popup-container.ts create mode 100644 vitest.workspace.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 66f3fdaaf..4fb65814a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -194,6 +194,5 @@ "i18n-ally.keystyle": "nested", "commentTranslate.multiLineMerge": true, "vue.server.hybridMode": true, - "typescript.tsdk": "node_modules/typescript/lib", - "vitest.disableWorkspaceWarning": true + "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/packages/@core/base/design/src/css/global.css b/packages/@core/base/design/src/css/global.css index 57ac09f02..aaa52280e 100644 --- a/packages/@core/base/design/src/css/global.css +++ b/packages/@core/base/design/src/css/global.css @@ -28,7 +28,7 @@ #app, body, html { - @apply size-full overscroll-none; + @apply !pointer-events-auto size-full overscroll-none; } body { diff --git a/packages/@core/base/shared/src/utils/__tests__/dom.test.ts b/packages/@core/base/shared/src/utils/__tests__/dom.test.ts index c3c558fc2..df51268a6 100644 --- a/packages/@core/base/shared/src/utils/__tests__/dom.test.ts +++ b/packages/@core/base/shared/src/utils/__tests__/dom.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { getElementVisibleRect } from '../dom'; // 假设函数位于 utils.ts 中 +import { getElementVisibleRect } from '../dom'; describe('getElementVisibleRect', () => { // 设置浏览器视口尺寸的 mock diff --git a/packages/@core/base/shared/src/utils/__tests__/letter.test.ts b/packages/@core/base/shared/src/utils/__tests__/letter.test.ts index 2e4037a21..a4aebaf76 100644 --- a/packages/@core/base/shared/src/utils/__tests__/letter.test.ts +++ b/packages/@core/base/shared/src/utils/__tests__/letter.test.ts @@ -7,7 +7,6 @@ import { toLowerCaseFirstLetter, } from '../letter'; -// 编写测试用例 describe('capitalizeFirstLetter', () => { it('should capitalize the first letter of a string', () => { expect(capitalizeFirstLetter('hello')).toBe('Hello'); diff --git a/packages/@core/base/shared/src/utils/__tests__/unique.test.ts b/packages/@core/base/shared/src/utils/__tests__/unique.test.ts index c5ebcacc3..0aa9d61f0 100644 --- a/packages/@core/base/shared/src/utils/__tests__/unique.test.ts +++ b/packages/@core/base/shared/src/utils/__tests__/unique.test.ts @@ -13,8 +13,7 @@ describe('uniqueByField', () => { const uniqueItems = uniqueByField(items, 'id'); - // Assert expected results - expect(uniqueItems).toHaveLength(3); // After deduplication, there should be three objects left + expect(uniqueItems).toHaveLength(3); expect(uniqueItems).toEqual([ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }, diff --git a/packages/@core/composables/src/index.ts b/packages/@core/composables/src/index.ts index a41b2199e..7ecbd3bec 100644 --- a/packages/@core/composables/src/index.ts +++ b/packages/@core/composables/src/index.ts @@ -1,4 +1,5 @@ export * from './use-content-style'; +export * from './use-is-mobile'; export * from './use-namespace'; export * from './use-priority-value'; export * from './use-sortable'; diff --git a/packages/@core/composables/src/use-is-mobile.ts b/packages/@core/composables/src/use-is-mobile.ts new file mode 100644 index 000000000..e35909f1c --- /dev/null +++ b/packages/@core/composables/src/use-is-mobile.ts @@ -0,0 +1,7 @@ +import { breakpointsTailwind, useBreakpoints } from '@vueuse/core'; + +export function useIsMobile() { + const breakpoints = useBreakpoints(breakpointsTailwind); + const isMobile = breakpoints.smaller('md'); + return { isMobile }; +} diff --git a/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts b/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts index 11fa8369d..b969bdee9 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts +++ b/packages/@core/ui-kit/popup-ui/src/drawer/drawer-api.ts @@ -30,6 +30,8 @@ export class DrawerApi { const defaultState: DrawerState = { cancelText: '取消', closable: true, + closeOnClickModal: true, + closeOnPressEscape: true, confirmLoading: false, confirmText: '确定', footer: true, 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 1d62c5116..85bf0f0d5 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts +++ b/packages/@core/ui-kit/popup-ui/src/drawer/drawer.ts @@ -7,12 +7,21 @@ export interface DrawerProps { * 取消按钮文字 */ cancelText?: string; - /** * 是否显示右上角的关闭按钮 * @default true */ closable?: boolean; + /** + * 点击弹窗遮罩是否关闭弹窗 + * @default true + */ + closeOnClickModal?: boolean; + /** + * 按下 ESC 键是否关闭弹窗 + * @default true + */ + closeOnPressEscape?: boolean; /** * 确定按钮 loading * @default false 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 81f42630f..5d8a904d9 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue +++ b/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue @@ -1,7 +1,7 @@