diff --git a/package.json b/package.json index 60416f24..8544ec69 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "node": ">=20.10.0", "pnpm": ">=9.12.0" }, - "packageManager": "pnpm@9.15.0", + "packageManager": "pnpm@9.15.1", "pnpm": { "peerDependencyRules": { "allowedVersions": { diff --git a/packages/@core/base/typings/src/app.d.ts b/packages/@core/base/typings/src/app.d.ts index e49a8657..f783c8b5 100644 --- a/packages/@core/base/typings/src/app.d.ts +++ b/packages/@core/base/typings/src/app.d.ts @@ -38,6 +38,7 @@ type BuiltinThemeType = type ContentCompactType = 'compact' | 'wide'; type LayoutHeaderModeType = 'auto' | 'auto-scroll' | 'fixed' | 'static'; +type LayoutHeaderMenuAlignType = 'center' | 'end' | 'start'; /** * 登录过期模式 @@ -95,6 +96,7 @@ export type { BreadcrumbStyleType, BuiltinThemeType, ContentCompactType, + LayoutHeaderMenuAlignType, LayoutHeaderModeType, LayoutType, LoginExpiredModeType, diff --git a/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap b/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap index f05a96dc..87f03de6 100644 --- a/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap +++ b/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap @@ -46,6 +46,7 @@ exports[`defaultPreferences immutability test > should not modify the config obj "header": { "enable": true, "hidden": false, + "menuAlign": "start", "mode": "fixed", }, "logo": { diff --git a/packages/@core/preferences/src/config.ts b/packages/@core/preferences/src/config.ts index 5974797f..48073b64 100644 --- a/packages/@core/preferences/src/config.ts +++ b/packages/@core/preferences/src/config.ts @@ -46,6 +46,7 @@ const defaultPreferences: Preferences = { header: { enable: true, hidden: false, + menuAlign: 'start', mode: 'fixed', }, logo: { diff --git a/packages/@core/preferences/src/types.ts b/packages/@core/preferences/src/types.ts index 59dce2e2..f8b35242 100644 --- a/packages/@core/preferences/src/types.ts +++ b/packages/@core/preferences/src/types.ts @@ -5,6 +5,7 @@ import type { BuiltinThemeType, ContentCompactType, DeepPartial, + LayoutHeaderMenuAlignType, LayoutHeaderModeType, LayoutType, LoginExpiredModeType, @@ -104,6 +105,8 @@ interface HeaderPreferences { enable: boolean; /** 顶栏是否隐藏,css-隐藏 */ hidden: boolean; + /** 顶栏菜单位置 */ + menuAlign: LayoutHeaderMenuAlignType; /** header显示模式 */ mode: LayoutHeaderModeType; } 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 ea7a14c0..9433d548 100644 --- a/packages/@core/ui-kit/menu-ui/src/components/menu.vue +++ b/packages/@core/ui-kit/menu-ui/src/components/menu.vue @@ -332,6 +332,7 @@ function removeMenuItem(item: MenuItemRegistered) { is(theme, true), is('rounded', rounded), is('collapse', collapse), + is('menu-align', mode === 'horizontal'), ]" :style="menuStyle" role="menu" @@ -423,6 +424,10 @@ $namespace: vben; opacity: 1; } +.is-menu-align { + justify-content: var(--menu-align, start); +} + .#{$namespace}-menu__popup-container, .#{$namespace}-menu { --menu-title-width: 140px; diff --git a/packages/effects/layouts/src/basic/header/header.vue b/packages/effects/layouts/src/basic/header/header.vue index 546342bf..c271f834 100644 --- a/packages/effects/layouts/src/basic/header/header.vue +++ b/packages/effects/layouts/src/basic/header/header.vue @@ -133,7 +133,10 @@ function clearPreferencesAndLogout() { > -
+
@@ -166,3 +169,16 @@ function clearPreferencesAndLogout() {
+ diff --git a/packages/effects/layouts/src/widgets/preferences/blocks/layout/header.vue b/packages/effects/layouts/src/widgets/preferences/blocks/layout/header.vue index cdb236cf..ee04ee28 100644 --- a/packages/effects/layouts/src/widgets/preferences/blocks/layout/header.vue +++ b/packages/effects/layouts/src/widgets/preferences/blocks/layout/header.vue @@ -1,15 +1,22 @@ diff --git a/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue b/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue index 4ae09130..67729fd3 100644 --- a/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue +++ b/packages/effects/layouts/src/widgets/preferences/preferences-drawer.vue @@ -4,6 +4,7 @@ import type { BreadcrumbStyleType, BuiltinThemeType, ContentCompactType, + LayoutHeaderMenuAlignType, LayoutHeaderModeType, LayoutType, NavigationStyleType, @@ -94,6 +95,8 @@ const SidebarExpandOnHover = defineModel('sidebarExpandOnHover'); const headerEnable = defineModel('headerEnable'); const headerMode = defineModel('headerMode'); +const headerMenuAlign = + defineModel('headerMenuAlign'); const breadcrumbEnable = defineModel('breadcrumbEnable'); const breadcrumbShowIcon = defineModel('breadcrumbShowIcon'); @@ -317,6 +320,7 @@ async function handleReset() {
diff --git a/packages/locales/src/langs/en-US/preferences.json b/packages/locales/src/langs/en-US/preferences.json index 5bb58176..57b535c4 100644 --- a/packages/locales/src/langs/en-US/preferences.json +++ b/packages/locales/src/langs/en-US/preferences.json @@ -138,7 +138,11 @@ "modeStatic": "Static", "modeFixed": "Fixed", "modeAuto": "Auto hide & Show", - "modeAutoScroll": "Scroll to Hide & Show" + "modeAutoScroll": "Scroll to Hide & Show", + "menuAlign": "Menu Align", + "menuAlignStart": "Start", + "menuAlignEnd": "End", + "menuAlignCenter": "Center" }, "footer": { "title": "Footer", diff --git a/packages/locales/src/langs/zh-CN/preferences.json b/packages/locales/src/langs/zh-CN/preferences.json index 5c3c2283..4963b6c7 100644 --- a/packages/locales/src/langs/zh-CN/preferences.json +++ b/packages/locales/src/langs/zh-CN/preferences.json @@ -138,7 +138,11 @@ "modeFixed": "固定", "modeAuto": "自动隐藏和显示", "modeAutoScroll": "滚动隐藏和显示", - "visible": "显示顶栏" + "visible": "显示顶栏", + "menuAlign": "菜单位置", + "menuAlignStart": "左侧", + "menuAlignEnd": "右侧", + "menuAlignCenter": "居中" }, "footer": { "title": "底栏", diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 97eed982..041a3a09 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -23,20 +23,20 @@ catalog: '@ctrl/tinycolor': ^4.1.0 '@eslint/js': ^9.17.0 '@faker-js/faker': ^9.3.0 - '@iconify/json': ^2.2.286 + '@iconify/json': ^2.2.289 '@iconify/tailwind': ^1.2.0 '@iconify/vue': ^4.2.0 '@intlify/core-base': ^10.0.5 - '@intlify/unplugin-vue-i18n': ^6.0.1 + '@intlify/unplugin-vue-i18n': ^6.0.2 '@jspm/generator': ^2.4.1 '@manypkg/get-packages': ^2.2.2 - '@nolebase/vitepress-plugin-git-changelog': ^2.11.1 + '@nolebase/vitepress-plugin-git-changelog': ^2.12.0 '@playwright/test': ^1.49.1 '@pnpm/workspace.read-manifest': ^1000.0.1 '@stylistic/stylelint-plugin': ^3.1.1 '@tailwindcss/nesting': 0.0.0-insiders.565cd3e '@tailwindcss/typography': ^0.5.15 - '@tanstack/vue-query': ^5.62.8 + '@tanstack/vue-query': ^5.62.9 '@tanstack/vue-store': ^0.6.0 '@types/archiver': ^6.0.3 '@types/eslint': ^9.6.1 @@ -51,29 +51,29 @@ catalog: '@types/qrcode': ^1.5.5 '@types/sortablejs': ^1.15.8 '@typescript-eslint/eslint-plugin': ^8.18.1 - '@typescript-eslint/parser': ^8.18.1 - '@vee-validate/zod': ^4.14.7 + '@typescript-eslint/parser': ^8.18.2 + '@vee-validate/zod': ^4.15.0 '@vite-pwa/vitepress': ^0.5.3 '@vitejs/plugin-vue': ^5.2.1 '@vitejs/plugin-vue-jsx': ^4.1.1 '@vue/reactivity': ^3.5.13 '@vue/shared': ^3.5.13 '@vue/test-utils': ^2.4.6 - '@vueuse/core': ^12.0.0 - '@vueuse/integrations': ^12.0.0 + '@vueuse/core': ^12.2.0 + '@vueuse/integrations': ^12.2.0 ant-design-vue: ^4.2.6 archiver: ^7.0.1 autoprefixer: ^10.4.20 axios: ^1.7.9 axios-mock-adapter: ^2.1.0 cac: ^6.7.14 - chalk: ^5.4.0 + chalk: ^5.4.1 cheerio: 1.0.0 circular-dependency-scanner: ^2.3.0 class-variance-authority: ^0.7.1 clsx: ^2.1.1 commitlint-plugin-function-rules: ^4.0.1 - consola: ^3.3.0 + consola: ^3.3.3 cross-env: ^7.0.3 cspell: ^8.17.1 cssnano: ^7.0.6 @@ -83,7 +83,7 @@ catalog: defu: ^6.1.4 depcheck: ^1.4.7 dotenv: ^16.4.7 - echarts: ^5.5.1 + echarts: ^5.6.0 element-plus: ^2.9.1 eslint: ^9.17.0 eslint-config-turbo: ^2.3.3 @@ -124,13 +124,13 @@ catalog: ora: ^8.1.1 pinia: 2.2.2 pinia-plugin-persistedstate: ^4.2.0 - pkg-types: ^1.2.1 + pkg-types: ^1.3.0 playwright: ^1.49.1 postcss: ^8.4.49 postcss-antd-fixes: ^0.2.0 postcss-html: ^1.7.0 postcss-import: ^16.1.0 - postcss-preset-env: ^10.1.2 + postcss-preset-env: ^10.1.3 postcss-scss: ^4.0.9 prettier: ^3.4.2 prettier-plugin-tailwindcss: ^0.6.9 @@ -139,8 +139,8 @@ catalog: radix-vue: ^1.9.11 resolve.exports: ^2.0.3 rimraf: ^6.0.1 - rollup: ^4.28.1 - rollup-plugin-visualizer: ^5.12.0 + rollup: ^4.29.1 + rollup-plugin-visualizer: ^5.13.1 sass: 1.80.6 sortablejs: ^1.15.6 stylelint: ^16.12.0 @@ -152,16 +152,16 @@ catalog: stylelint-order: ^6.0.4 stylelint-prettier: ^5.0.2 stylelint-scss: ^6.10.0 - tailwind-merge: ^2.5.5 + tailwind-merge: ^2.6.0 tailwindcss: ^3.4.17 tailwindcss-animate: ^1.0.7 theme-colors: ^0.1.0 turbo: ^2.3.3 typescript: 5.6.3 - unbuild: ^3.0.1 + unbuild: ^3.1.0 unplugin-element-plus: ^0.8.0 - vee-validate: ^4.14.7 - vite: ^6.0.5 + vee-validate: ^4.15.0 + vite: ^6.0.6 vite-plugin-compression: ^0.5.1 vite-plugin-dts: 4.2.1 vite-plugin-html: ^3.2.2