From 24b6e7a83533f39240f55c8f4cba238d9957e27d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=B1=B3=E5=B1=B1?= <17726957223@189.cn> Date: Wed, 12 Nov 2025 17:38:41 +0800 Subject: [PATCH 01/13] feat: add global font size adjustment --- package.json | 2 +- packages/@core/base/design/src/css/global.css | 3 ++- packages/@core/preferences/src/config.ts | 1 + packages/@core/preferences/src/types.ts | 2 ++ packages/@core/preferences/src/update-css-variables.ts | 8 ++++++++ packages/@core/ui-kit/menu-ui/src/components/menu.vue | 8 ++++---- .../menu-ui/src/components/normal-menu/normal-menu.vue | 6 +++--- .../layouts/src/widgets/preferences/blocks/index.ts | 1 + .../src/widgets/preferences/preferences-drawer.vue | 5 +++++ packages/locales/src/langs/en-US/preferences.json | 2 ++ packages/locales/src/langs/zh-CN/preferences.json | 2 ++ 11 files changed, 31 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 06e706947..183e7ca04 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "node": ">=20.10.0", "pnpm": ">=9.12.0" }, - "packageManager": "pnpm@10.14.0", + "packageManager": "pnpm@10.21.0", "pnpm": { "peerDependencyRules": { "allowedVersions": { diff --git a/packages/@core/base/design/src/css/global.css b/packages/@core/base/design/src/css/global.css index d19990985..dc154fc72 100644 --- a/packages/@core/base/design/src/css/global.css +++ b/packages/@core/base/design/src/css/global.css @@ -14,8 +14,9 @@ } html { - @apply text-foreground bg-background font-sans text-[100%]; + @apply text-foreground bg-background font-sans; + font-size: var(--font-size-base, 16px); font-variation-settings: normal; line-height: 1.15; text-size-adjust: 100%; diff --git a/packages/@core/preferences/src/config.ts b/packages/@core/preferences/src/config.ts index 5b8d72363..d9977b1ef 100644 --- a/packages/@core/preferences/src/config.ts +++ b/packages/@core/preferences/src/config.ts @@ -116,6 +116,7 @@ const defaultPreferences: Preferences = { colorWarning: 'hsl(42 84% 61%)', mode: 'dark', radius: '0.5', + fontSize: 16, semiDarkHeader: false, semiDarkSidebar: false, }, diff --git a/packages/@core/preferences/src/types.ts b/packages/@core/preferences/src/types.ts index 9a4d94bdf..685ffa2ef 100644 --- a/packages/@core/preferences/src/types.ts +++ b/packages/@core/preferences/src/types.ts @@ -243,6 +243,8 @@ interface ThemePreferences { mode: ThemeModeType; /** 圆角 */ radius: string; + /** 字体大小(单位:px) */ + fontSize: number; /** 是否开启半深色header(只在theme='light'时生效) */ semiDarkHeader: boolean; /** 是否开启半深色菜单(只在theme='light'时生效) */ diff --git a/packages/@core/preferences/src/update-css-variables.ts b/packages/@core/preferences/src/update-css-variables.ts index 0d3466a01..b00be7825 100644 --- a/packages/@core/preferences/src/update-css-variables.ts +++ b/packages/@core/preferences/src/update-css-variables.ts @@ -66,6 +66,14 @@ function updateCSSVariables(preferences: Preferences) { if (Reflect.has(theme, 'radius')) { document.documentElement.style.setProperty('--radius', `${radius}rem`); } + + // 更新字体大小 + if (Reflect.has(theme, 'fontSize')) { + document.documentElement.style.setProperty( + '--font-size-base', + `${theme.fontSize}px`, + ); + } } /** diff --git a/packages/@core/ui-kit/menu-ui/src/components/menu.vue b/packages/@core/ui-kit/menu-ui/src/components/menu.vue index 887604567..624be2910 100644 --- a/packages/@core/ui-kit/menu-ui/src/components/menu.vue +++ b/packages/@core/ui-kit/menu-ui/src/components/menu.vue @@ -444,7 +444,7 @@ $namespace: vben; .#{$namespace}-menu__popup-container, .#{$namespace}-menu { --menu-title-width: 140px; - --menu-item-icon-size: 16px; + --menu-item-icon-size: var(--font-size-base, 16px); --menu-item-height: 38px; --menu-item-padding-y: 21px; --menu-item-padding-x: 12px; @@ -458,7 +458,7 @@ $namespace: vben; --menu-item-collapse-margin-x: 0px; --menu-item-radius: 0px; --menu-item-indent: 16px; - --menu-font-size: 14px; + --menu-font-size: calc(var(--font-size-base, 16px) * 0.875); &.is-dark { --menu-background-color: hsl(var(--menu)); @@ -752,7 +752,7 @@ $namespace: vben; } .#{$namespace}-menu__icon { display: block; - font-size: 20px !important; + font-size: calc(var(--font-size-base, 16px) * 1.25) !important; transition: all 0.25s ease; } @@ -760,7 +760,7 @@ $namespace: vben; display: inline-flex; margin-top: 8px; margin-bottom: 0; - font-size: 12px; + font-size: calc(var(--font-size-base, 16px) * 0.75); font-weight: 400; line-height: normal; transition: all 0.25s ease; diff --git a/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue b/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue index 7cb29e512..0c4142d22 100644 --- a/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue +++ b/packages/@core/ui-kit/menu-ui/src/components/normal-menu/normal-menu.vue @@ -102,7 +102,7 @@ $namespace: vben; } .#{$namespace}-normal-menu__icon { - font-size: 20px; + font-size: calc(var(--font-size-base, 16px) * 1.25); } } @@ -146,14 +146,14 @@ $namespace: vben; &__icon { max-height: 20px; - font-size: 20px; + font-size: calc(var(--font-size-base, 16px) * 1.25); transition: all 0.25s ease; } &__name { margin-top: 8px; margin-bottom: 0; - font-size: 12px; + font-size: calc(var(--font-size-base, 16px) * 0.75); font-weight: 400; transition: all 0.25s ease; } diff --git a/packages/effects/layouts/src/widgets/preferences/blocks/index.ts b/packages/effects/layouts/src/widgets/preferences/blocks/index.ts index 59595dc48..cdd6bb1db 100644 --- a/packages/effects/layouts/src/widgets/preferences/blocks/index.ts +++ b/packages/effects/layouts/src/widgets/preferences/blocks/index.ts @@ -15,5 +15,6 @@ export { default as GlobalShortcutKeys } from './shortcut-keys/global.vue'; export { default as SwitchItem } from './switch-item.vue'; export { default as BuiltinTheme } from './theme/builtin.vue'; export { default as ColorMode } from './theme/color-mode.vue'; +export { default as FontSize } from './theme/font-size.vue'; export { default as Radius } from './theme/radius.vue'; export { default as Theme } from './theme/theme.vue'; diff --git a/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue b/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue index 301004d6e..a90c27dc0 100644 --- a/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue +++ b/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue @@ -44,6 +44,7 @@ import { Content, Copyright, Footer, + FontSize, General, GlobalShortcutKeys, Header, @@ -85,6 +86,7 @@ const themeColorPrimary = defineModel('themeColorPrimary'); const themeBuiltinType = defineModel('themeBuiltinType'); const themeMode = defineModel('themeMode'); const themeRadius = defineModel('themeRadius'); +const themeFontSize = defineModel('themeFontSize'); const themeSemiDarkSidebar = defineModel('themeSemiDarkSidebar'); const themeSemiDarkHeader = defineModel('themeSemiDarkHeader'); @@ -328,6 +330,9 @@ async function handleReset() { + + + Date: Wed, 12 Nov 2025 17:39:07 +0800 Subject: [PATCH 02/13] feat: add global font size adjustment --- packages/@core/preferences/src/types.ts | 4 +- .../preferences/blocks/theme/font-size.vue | 62 +++++++++++++++++++ .../preferences/preferences-drawer.vue | 2 +- 3 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 packages/effects/layouts/src/widgets/preferences/blocks/theme/font-size.vue diff --git a/packages/@core/preferences/src/types.ts b/packages/@core/preferences/src/types.ts index 685ffa2ef..17224b048 100644 --- a/packages/@core/preferences/src/types.ts +++ b/packages/@core/preferences/src/types.ts @@ -239,12 +239,12 @@ interface ThemePreferences { colorSuccess: string; /** 警告色 */ colorWarning: string; + /** 字体大小(单位:px) */ + fontSize: number; /** 当前主题 */ mode: ThemeModeType; /** 圆角 */ radius: string; - /** 字体大小(单位:px) */ - fontSize: number; /** 是否开启半深色header(只在theme='light'时生效) */ semiDarkHeader: boolean; /** 是否开启半深色菜单(只在theme='light'时生效) */ diff --git a/packages/effects/layouts/src/widgets/preferences/blocks/theme/font-size.vue b/packages/effects/layouts/src/widgets/preferences/blocks/theme/font-size.vue new file mode 100644 index 000000000..b1aaa2d81 --- /dev/null +++ b/packages/effects/layouts/src/widgets/preferences/blocks/theme/font-size.vue @@ -0,0 +1,62 @@ + + + diff --git a/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue b/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue index a90c27dc0..c88a9bc45 100644 --- a/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue +++ b/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue @@ -43,8 +43,8 @@ import { ColorMode, Content, Copyright, - Footer, FontSize, + Footer, General, GlobalShortcutKeys, Header, From cd7c11c7d0b3952f4a139d3d6eeafe8724d545c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=B1=B3=E5=B1=B1?= <17726957223@189.cn> Date: Wed, 19 Nov 2025 10:14:04 +0800 Subject: [PATCH 03/13] fix: run 'pnpm format' update various components and improve layout structure - Updated demo-preview and preview-group components for better error handling and layout. - Enhanced drawer and modal components for improved auto-height functionality. - Refactored layout components including header, footer, sidebar, and tabbar for better responsiveness and usability. - Adjusted tooltip and help tooltip components for better user guidance. - Fixed issues in various UI components to ensure consistent styling and functionality across the application. --- docs/.vitepress/components/demo-preview.vue | 6 +++--- docs/.vitepress/components/preview-group.vue | 10 +++++----- .../src/demos/vben-drawer/auto-height/drawer.vue | 2 +- docs/src/demos/vben-modal/auto-height/modal.vue | 2 +- .../__tests__/__snapshots__/config.test.ts.snap | 1 + .../form-ui/src/form-render/form-field.vue | 4 ++-- .../form-ui/src/form-render/form-label.vue | 2 +- .../layout-ui/src/components/layout-content.vue | 2 +- .../layout-ui/src/components/layout-footer.vue | 2 +- .../layout-ui/src/components/layout-header.vue | 2 +- .../layout-ui/src/components/layout-sidebar.vue | 4 ++-- .../layout-ui/src/components/layout-tabbar.vue | 2 +- .../widgets/sidebar-collapse-button.vue | 2 +- .../components/widgets/sidebar-fixed-button.vue | 2 +- .../@core/ui-kit/layout-ui/src/vben-layout.vue | 2 +- .../ui-kit/menu-ui/src/components/menu-badge.vue | 2 +- .../src/components/normal-menu/normal-menu.vue | 6 +++--- .../@core/ui-kit/popup-ui/src/alert/alert.vue | 4 ++-- .../@core/ui-kit/popup-ui/src/drawer/drawer.vue | 4 ++-- .../@core/ui-kit/popup-ui/src/modal/modal.vue | 4 ++-- .../shadcn-ui/src/components/avatar/avatar.vue | 2 +- .../src/components/back-top/back-top.vue | 2 +- .../breadcrumb/breadcrumb-background.vue | 8 ++++---- .../components/dropdown-menu/dropdown-menu.vue | 2 +- .../dropdown-menu/dropdown-radio-menu.vue | 2 +- .../src/components/full-screen/full-screen.vue | 4 ++-- .../components/input-password/input-password.vue | 4 ++-- .../input-password/password-strength.vue | 2 +- .../shadcn-ui/src/components/logo/logo.vue | 2 +- .../src/components/scrollbar/scrollbar.vue | 4 ++-- .../src/components/segmented/segmented.vue | 4 ++-- .../src/components/segmented/tabs-indicator.vue | 2 +- .../shadcn-ui/src/components/spinner/loading.vue | 6 +++--- .../shadcn-ui/src/components/spinner/spinner.vue | 4 ++-- .../src/components/tooltip/help-tooltip.vue | 2 +- .../shadcn-ui/src/components/tooltip/tooltip.vue | 2 +- .../src/ui/accordion/AccordionContent.vue | 2 +- .../src/ui/accordion/AccordionTrigger.vue | 2 +- .../src/ui/alert-dialog/AlertDialogContent.vue | 4 ++-- .../ui/alert-dialog/AlertDialogDescription.vue | 2 +- .../src/ui/alert-dialog/AlertDialogOverlay.vue | 2 +- .../src/ui/breadcrumb/BreadcrumbItem.vue | 2 +- .../src/ui/breadcrumb/BreadcrumbLink.vue | 2 +- .../src/ui/breadcrumb/BreadcrumbList.vue | 2 +- .../src/ui/breadcrumb/BreadcrumbPage.vue | 2 +- .../@core/ui-kit/shadcn-ui/src/ui/card/Card.vue | 2 +- .../shadcn-ui/src/ui/card/CardDescription.vue | 2 +- .../shadcn-ui/src/ui/checkbox/Checkbox.vue | 2 +- .../ui/context-menu/ContextMenuCheckboxItem.vue | 2 +- .../src/ui/context-menu/ContextMenuContent.vue | 2 +- .../src/ui/context-menu/ContextMenuItem.vue | 2 +- .../src/ui/context-menu/ContextMenuLabel.vue | 2 +- .../src/ui/context-menu/ContextMenuRadioItem.vue | 2 +- .../src/ui/context-menu/ContextMenuSeparator.vue | 2 +- .../src/ui/context-menu/ContextMenuShortcut.vue | 2 +- .../ui/context-menu/ContextMenuSubContent.vue | 2 +- .../ui/context-menu/ContextMenuSubTrigger.vue | 2 +- .../shadcn-ui/src/ui/dialog/DialogContent.vue | 4 ++-- .../src/ui/dialog/DialogDescription.vue | 2 +- .../shadcn-ui/src/ui/dialog/DialogOverlay.vue | 2 +- .../src/ui/dialog/DialogScrollContent.vue | 6 +++--- .../dropdown-menu/DropdownMenuCheckboxItem.vue | 2 +- .../src/ui/dropdown-menu/DropdownMenuContent.vue | 2 +- .../src/ui/dropdown-menu/DropdownMenuItem.vue | 2 +- .../ui/dropdown-menu/DropdownMenuRadioItem.vue | 2 +- .../ui/dropdown-menu/DropdownMenuSeparator.vue | 2 +- .../ui/dropdown-menu/DropdownMenuSubContent.vue | 2 +- .../ui/dropdown-menu/DropdownMenuSubTrigger.vue | 2 +- .../shadcn-ui/src/ui/form/FormDescription.vue | 2 +- .../ui-kit/shadcn-ui/src/ui/form/FormMessage.vue | 2 +- .../src/ui/hover-card/HoverCardContent.vue | 2 +- .../ui-kit/shadcn-ui/src/ui/input/Input.vue | 2 +- .../src/ui/number-field/NumberFieldInput.vue | 2 +- .../shadcn-ui/src/ui/pin-input/PinInputInput.vue | 2 +- .../shadcn-ui/src/ui/popover/PopoverContent.vue | 2 +- .../src/ui/radio-group/RadioGroupItem.vue | 2 +- .../src/ui/resizable/ResizableHandle.vue | 4 ++-- .../shadcn-ui/src/ui/scroll-area/ScrollBar.vue | 2 +- .../shadcn-ui/src/ui/select/SelectContent.vue | 2 +- .../shadcn-ui/src/ui/select/SelectItem.vue | 2 +- .../shadcn-ui/src/ui/select/SelectSeparator.vue | 2 +- .../shadcn-ui/src/ui/select/SelectTrigger.vue | 2 +- .../shadcn-ui/src/ui/separator/Separator.vue | 4 ++-- .../shadcn-ui/src/ui/sheet/SheetDescription.vue | 2 +- .../shadcn-ui/src/ui/sheet/SheetOverlay.vue | 2 +- .../ui-kit/shadcn-ui/src/ui/sheet/SheetTitle.vue | 2 +- .../ui-kit/shadcn-ui/src/ui/switch/Switch.vue | 4 ++-- .../ui-kit/shadcn-ui/src/ui/tabs/TabsContent.vue | 2 +- .../ui-kit/shadcn-ui/src/ui/tabs/TabsList.vue | 2 +- .../ui-kit/shadcn-ui/src/ui/tabs/TabsTrigger.vue | 2 +- .../shadcn-ui/src/ui/textarea/Textarea.vue | 2 +- .../shadcn-ui/src/ui/tooltip/TooltipContent.vue | 2 +- .../@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue | 6 +++--- .../tabs-ui/src/components/tabs-chrome/tabs.vue | 16 ++++++++-------- .../ui-kit/tabs-ui/src/components/tabs/tabs.vue | 10 +++++----- .../tabs-ui/src/components/widgets/tool-more.vue | 2 +- .../src/components/widgets/tool-screen.vue | 2 +- packages/@core/ui-kit/tabs-ui/src/tabs-view.vue | 6 +++--- .../src/views/demos/access/button-control.vue | 2 +- playground/src/views/demos/access/index.vue | 2 +- .../src/views/demos/features/icons/index.vue | 2 +- .../views/demos/features/login-expired/index.vue | 2 +- .../src/views/demos/features/tabs/index.vue | 8 ++++---- .../src/views/demos/features/watermark/index.vue | 2 +- .../views/examples/drawer/auto-height-demo.vue | 2 +- .../src/views/examples/layout/col-page.vue | 2 +- playground/src/views/examples/loading/index.vue | 4 ++-- .../views/examples/modal/auto-height-demo.vue | 2 +- playground/src/views/examples/tippy/index.vue | 2 +- 109 files changed, 158 insertions(+), 157 deletions(-) diff --git a/docs/.vitepress/components/demo-preview.vue b/docs/.vitepress/components/demo-preview.vue index 4c8829f88..983a95062 100644 --- a/docs/.vitepress/components/demo-preview.vue +++ b/docs/.vitepress/components/demo-preview.vue @@ -19,15 +19,15 @@ const parsedFiles = computed(() => {