Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into dev
This commit is contained in:
commit
5234f2ef54
@ -99,7 +99,7 @@
|
|||||||
"node": ">=20.10.0",
|
"node": ">=20.10.0",
|
||||||
"pnpm": ">=9.12.0"
|
"pnpm": ">=9.12.0"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@9.15.0",
|
"packageManager": "pnpm@9.15.1",
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"peerDependencyRules": {
|
"peerDependencyRules": {
|
||||||
"allowedVersions": {
|
"allowedVersions": {
|
||||||
|
2
packages/@core/base/typings/src/app.d.ts
vendored
2
packages/@core/base/typings/src/app.d.ts
vendored
@ -38,6 +38,7 @@ type BuiltinThemeType =
|
|||||||
type ContentCompactType = 'compact' | 'wide';
|
type ContentCompactType = 'compact' | 'wide';
|
||||||
|
|
||||||
type LayoutHeaderModeType = 'auto' | 'auto-scroll' | 'fixed' | 'static';
|
type LayoutHeaderModeType = 'auto' | 'auto-scroll' | 'fixed' | 'static';
|
||||||
|
type LayoutHeaderMenuAlignType = 'center' | 'end' | 'start';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录过期模式
|
* 登录过期模式
|
||||||
@ -95,6 +96,7 @@ export type {
|
|||||||
BreadcrumbStyleType,
|
BreadcrumbStyleType,
|
||||||
BuiltinThemeType,
|
BuiltinThemeType,
|
||||||
ContentCompactType,
|
ContentCompactType,
|
||||||
|
LayoutHeaderMenuAlignType,
|
||||||
LayoutHeaderModeType,
|
LayoutHeaderModeType,
|
||||||
LayoutType,
|
LayoutType,
|
||||||
LoginExpiredModeType,
|
LoginExpiredModeType,
|
||||||
|
@ -46,6 +46,7 @@ exports[`defaultPreferences immutability test > should not modify the config obj
|
|||||||
"header": {
|
"header": {
|
||||||
"enable": true,
|
"enable": true,
|
||||||
"hidden": false,
|
"hidden": false,
|
||||||
|
"menuAlign": "start",
|
||||||
"mode": "fixed",
|
"mode": "fixed",
|
||||||
},
|
},
|
||||||
"logo": {
|
"logo": {
|
||||||
|
@ -46,6 +46,7 @@ const defaultPreferences: Preferences = {
|
|||||||
header: {
|
header: {
|
||||||
enable: true,
|
enable: true,
|
||||||
hidden: false,
|
hidden: false,
|
||||||
|
menuAlign: 'start',
|
||||||
mode: 'fixed',
|
mode: 'fixed',
|
||||||
},
|
},
|
||||||
logo: {
|
logo: {
|
||||||
|
@ -5,6 +5,7 @@ import type {
|
|||||||
BuiltinThemeType,
|
BuiltinThemeType,
|
||||||
ContentCompactType,
|
ContentCompactType,
|
||||||
DeepPartial,
|
DeepPartial,
|
||||||
|
LayoutHeaderMenuAlignType,
|
||||||
LayoutHeaderModeType,
|
LayoutHeaderModeType,
|
||||||
LayoutType,
|
LayoutType,
|
||||||
LoginExpiredModeType,
|
LoginExpiredModeType,
|
||||||
@ -104,6 +105,8 @@ interface HeaderPreferences {
|
|||||||
enable: boolean;
|
enable: boolean;
|
||||||
/** 顶栏是否隐藏,css-隐藏 */
|
/** 顶栏是否隐藏,css-隐藏 */
|
||||||
hidden: boolean;
|
hidden: boolean;
|
||||||
|
/** 顶栏菜单位置 */
|
||||||
|
menuAlign: LayoutHeaderMenuAlignType;
|
||||||
/** header显示模式 */
|
/** header显示模式 */
|
||||||
mode: LayoutHeaderModeType;
|
mode: LayoutHeaderModeType;
|
||||||
}
|
}
|
||||||
|
@ -332,6 +332,7 @@ function removeMenuItem(item: MenuItemRegistered) {
|
|||||||
is(theme, true),
|
is(theme, true),
|
||||||
is('rounded', rounded),
|
is('rounded', rounded),
|
||||||
is('collapse', collapse),
|
is('collapse', collapse),
|
||||||
|
is('menu-align', mode === 'horizontal'),
|
||||||
]"
|
]"
|
||||||
:style="menuStyle"
|
:style="menuStyle"
|
||||||
role="menu"
|
role="menu"
|
||||||
@ -423,6 +424,10 @@ $namespace: vben;
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.is-menu-align {
|
||||||
|
justify-content: var(--menu-align, start);
|
||||||
|
}
|
||||||
|
|
||||||
.#{$namespace}-menu__popup-container,
|
.#{$namespace}-menu__popup-container,
|
||||||
.#{$namespace}-menu {
|
.#{$namespace}-menu {
|
||||||
--menu-title-width: 140px;
|
--menu-title-width: 140px;
|
||||||
|
@ -133,7 +133,10 @@ function clearPreferencesAndLogout() {
|
|||||||
>
|
>
|
||||||
<slot :name="slot.name"></slot>
|
<slot :name="slot.name"></slot>
|
||||||
</template>
|
</template>
|
||||||
<div class="flex h-full min-w-0 flex-1 items-center">
|
<div
|
||||||
|
:class="`menu-align-${preferences.header.menuAlign}`"
|
||||||
|
class="flex h-full min-w-0 flex-1 items-center"
|
||||||
|
>
|
||||||
<slot name="menu"></slot>
|
<slot name="menu"></slot>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex h-full min-w-0 flex-shrink-0 items-center">
|
<div class="flex h-full min-w-0 flex-shrink-0 items-center">
|
||||||
@ -166,3 +169,16 @@ function clearPreferencesAndLogout() {
|
|||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.menu-align-start {
|
||||||
|
--menu-align: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-align-center {
|
||||||
|
--menu-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-align-end {
|
||||||
|
--menu-align: end;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@ -1,15 +1,22 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { LayoutHeaderModeType, SelectOption } from '@vben/types';
|
import type {
|
||||||
|
LayoutHeaderMenuAlignType,
|
||||||
|
LayoutHeaderModeType,
|
||||||
|
SelectOption,
|
||||||
|
} from '@vben/types';
|
||||||
|
|
||||||
import { $t } from '@vben/locales';
|
import { $t } from '@vben/locales';
|
||||||
|
|
||||||
import SelectItem from '../select-item.vue';
|
import SelectItem from '../select-item.vue';
|
||||||
import SwitchItem from '../switch-item.vue';
|
import SwitchItem from '../switch-item.vue';
|
||||||
|
import ToggleItem from '../toggle-item.vue';
|
||||||
|
|
||||||
defineProps<{ disabled: boolean }>();
|
defineProps<{ disabled: boolean }>();
|
||||||
|
|
||||||
const headerEnable = defineModel<boolean>('headerEnable');
|
const headerEnable = defineModel<boolean>('headerEnable');
|
||||||
const headerMode = defineModel<LayoutHeaderModeType>('headerMode');
|
const headerMode = defineModel<LayoutHeaderModeType>('headerMode');
|
||||||
|
const headerMenuAlign =
|
||||||
|
defineModel<LayoutHeaderMenuAlignType>('headerMenuAlign');
|
||||||
|
|
||||||
const localeItems: SelectOption[] = [
|
const localeItems: SelectOption[] = [
|
||||||
{
|
{
|
||||||
@ -29,6 +36,21 @@ const localeItems: SelectOption[] = [
|
|||||||
value: 'auto-scroll',
|
value: 'auto-scroll',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const headerMenuAlignItems: SelectOption[] = [
|
||||||
|
{
|
||||||
|
label: $t('preferences.header.menuAlignStart'),
|
||||||
|
value: 'start',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: $t('preferences.header.menuAlignCenter'),
|
||||||
|
value: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: $t('preferences.header.menuAlignEnd'),
|
||||||
|
value: 'end',
|
||||||
|
},
|
||||||
|
];
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -42,4 +64,11 @@ const localeItems: SelectOption[] = [
|
|||||||
>
|
>
|
||||||
{{ $t('preferences.mode') }}
|
{{ $t('preferences.mode') }}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
<ToggleItem
|
||||||
|
v-model="headerMenuAlign"
|
||||||
|
:disabled="!headerEnable"
|
||||||
|
:items="headerMenuAlignItems"
|
||||||
|
>
|
||||||
|
{{ $t('preferences.header.menuAlign') }}
|
||||||
|
</ToggleItem>
|
||||||
</template>
|
</template>
|
||||||
|
@ -4,6 +4,7 @@ import type {
|
|||||||
BreadcrumbStyleType,
|
BreadcrumbStyleType,
|
||||||
BuiltinThemeType,
|
BuiltinThemeType,
|
||||||
ContentCompactType,
|
ContentCompactType,
|
||||||
|
LayoutHeaderMenuAlignType,
|
||||||
LayoutHeaderModeType,
|
LayoutHeaderModeType,
|
||||||
LayoutType,
|
LayoutType,
|
||||||
NavigationStyleType,
|
NavigationStyleType,
|
||||||
@ -94,6 +95,8 @@ const SidebarExpandOnHover = defineModel<boolean>('sidebarExpandOnHover');
|
|||||||
|
|
||||||
const headerEnable = defineModel<boolean>('headerEnable');
|
const headerEnable = defineModel<boolean>('headerEnable');
|
||||||
const headerMode = defineModel<LayoutHeaderModeType>('headerMode');
|
const headerMode = defineModel<LayoutHeaderModeType>('headerMode');
|
||||||
|
const headerMenuAlign =
|
||||||
|
defineModel<LayoutHeaderMenuAlignType>('headerMenuAlign');
|
||||||
|
|
||||||
const breadcrumbEnable = defineModel<boolean>('breadcrumbEnable');
|
const breadcrumbEnable = defineModel<boolean>('breadcrumbEnable');
|
||||||
const breadcrumbShowIcon = defineModel<boolean>('breadcrumbShowIcon');
|
const breadcrumbShowIcon = defineModel<boolean>('breadcrumbShowIcon');
|
||||||
@ -317,6 +320,7 @@ async function handleReset() {
|
|||||||
<Block :title="$t('preferences.header.title')">
|
<Block :title="$t('preferences.header.title')">
|
||||||
<Header
|
<Header
|
||||||
v-model:header-enable="headerEnable"
|
v-model:header-enable="headerEnable"
|
||||||
|
v-model:header-menu-align="headerMenuAlign"
|
||||||
v-model:header-mode="headerMode"
|
v-model:header-mode="headerMode"
|
||||||
:disabled="isFullContent"
|
:disabled="isFullContent"
|
||||||
/>
|
/>
|
||||||
|
@ -138,7 +138,11 @@
|
|||||||
"modeStatic": "Static",
|
"modeStatic": "Static",
|
||||||
"modeFixed": "Fixed",
|
"modeFixed": "Fixed",
|
||||||
"modeAuto": "Auto hide & Show",
|
"modeAuto": "Auto hide & Show",
|
||||||
"modeAutoScroll": "Scroll to Hide & Show"
|
"modeAutoScroll": "Scroll to Hide & Show",
|
||||||
|
"menuAlign": "Menu Align",
|
||||||
|
"menuAlignStart": "Start",
|
||||||
|
"menuAlignEnd": "End",
|
||||||
|
"menuAlignCenter": "Center"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"title": "Footer",
|
"title": "Footer",
|
||||||
|
@ -138,7 +138,11 @@
|
|||||||
"modeFixed": "固定",
|
"modeFixed": "固定",
|
||||||
"modeAuto": "自动隐藏和显示",
|
"modeAuto": "自动隐藏和显示",
|
||||||
"modeAutoScroll": "滚动隐藏和显示",
|
"modeAutoScroll": "滚动隐藏和显示",
|
||||||
"visible": "显示顶栏"
|
"visible": "显示顶栏",
|
||||||
|
"menuAlign": "菜单位置",
|
||||||
|
"menuAlignStart": "左侧",
|
||||||
|
"menuAlignEnd": "右侧",
|
||||||
|
"menuAlignCenter": "居中"
|
||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"title": "底栏",
|
"title": "底栏",
|
||||||
|
@ -23,20 +23,20 @@ catalog:
|
|||||||
'@ctrl/tinycolor': ^4.1.0
|
'@ctrl/tinycolor': ^4.1.0
|
||||||
'@eslint/js': ^9.17.0
|
'@eslint/js': ^9.17.0
|
||||||
'@faker-js/faker': ^9.3.0
|
'@faker-js/faker': ^9.3.0
|
||||||
'@iconify/json': ^2.2.286
|
'@iconify/json': ^2.2.289
|
||||||
'@iconify/tailwind': ^1.2.0
|
'@iconify/tailwind': ^1.2.0
|
||||||
'@iconify/vue': ^4.2.0
|
'@iconify/vue': ^4.2.0
|
||||||
'@intlify/core-base': ^10.0.5
|
'@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
|
'@jspm/generator': ^2.4.1
|
||||||
'@manypkg/get-packages': ^2.2.2
|
'@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
|
'@playwright/test': ^1.49.1
|
||||||
'@pnpm/workspace.read-manifest': ^1000.0.1
|
'@pnpm/workspace.read-manifest': ^1000.0.1
|
||||||
'@stylistic/stylelint-plugin': ^3.1.1
|
'@stylistic/stylelint-plugin': ^3.1.1
|
||||||
'@tailwindcss/nesting': 0.0.0-insiders.565cd3e
|
'@tailwindcss/nesting': 0.0.0-insiders.565cd3e
|
||||||
'@tailwindcss/typography': ^0.5.15
|
'@tailwindcss/typography': ^0.5.15
|
||||||
'@tanstack/vue-query': ^5.62.8
|
'@tanstack/vue-query': ^5.62.9
|
||||||
'@tanstack/vue-store': ^0.6.0
|
'@tanstack/vue-store': ^0.6.0
|
||||||
'@types/archiver': ^6.0.3
|
'@types/archiver': ^6.0.3
|
||||||
'@types/eslint': ^9.6.1
|
'@types/eslint': ^9.6.1
|
||||||
@ -51,29 +51,29 @@ catalog:
|
|||||||
'@types/qrcode': ^1.5.5
|
'@types/qrcode': ^1.5.5
|
||||||
'@types/sortablejs': ^1.15.8
|
'@types/sortablejs': ^1.15.8
|
||||||
'@typescript-eslint/eslint-plugin': ^8.18.1
|
'@typescript-eslint/eslint-plugin': ^8.18.1
|
||||||
'@typescript-eslint/parser': ^8.18.1
|
'@typescript-eslint/parser': ^8.18.2
|
||||||
'@vee-validate/zod': ^4.14.7
|
'@vee-validate/zod': ^4.15.0
|
||||||
'@vite-pwa/vitepress': ^0.5.3
|
'@vite-pwa/vitepress': ^0.5.3
|
||||||
'@vitejs/plugin-vue': ^5.2.1
|
'@vitejs/plugin-vue': ^5.2.1
|
||||||
'@vitejs/plugin-vue-jsx': ^4.1.1
|
'@vitejs/plugin-vue-jsx': ^4.1.1
|
||||||
'@vue/reactivity': ^3.5.13
|
'@vue/reactivity': ^3.5.13
|
||||||
'@vue/shared': ^3.5.13
|
'@vue/shared': ^3.5.13
|
||||||
'@vue/test-utils': ^2.4.6
|
'@vue/test-utils': ^2.4.6
|
||||||
'@vueuse/core': ^12.0.0
|
'@vueuse/core': ^12.2.0
|
||||||
'@vueuse/integrations': ^12.0.0
|
'@vueuse/integrations': ^12.2.0
|
||||||
ant-design-vue: ^4.2.6
|
ant-design-vue: ^4.2.6
|
||||||
archiver: ^7.0.1
|
archiver: ^7.0.1
|
||||||
autoprefixer: ^10.4.20
|
autoprefixer: ^10.4.20
|
||||||
axios: ^1.7.9
|
axios: ^1.7.9
|
||||||
axios-mock-adapter: ^2.1.0
|
axios-mock-adapter: ^2.1.0
|
||||||
cac: ^6.7.14
|
cac: ^6.7.14
|
||||||
chalk: ^5.4.0
|
chalk: ^5.4.1
|
||||||
cheerio: 1.0.0
|
cheerio: 1.0.0
|
||||||
circular-dependency-scanner: ^2.3.0
|
circular-dependency-scanner: ^2.3.0
|
||||||
class-variance-authority: ^0.7.1
|
class-variance-authority: ^0.7.1
|
||||||
clsx: ^2.1.1
|
clsx: ^2.1.1
|
||||||
commitlint-plugin-function-rules: ^4.0.1
|
commitlint-plugin-function-rules: ^4.0.1
|
||||||
consola: ^3.3.0
|
consola: ^3.3.3
|
||||||
cross-env: ^7.0.3
|
cross-env: ^7.0.3
|
||||||
cspell: ^8.17.1
|
cspell: ^8.17.1
|
||||||
cssnano: ^7.0.6
|
cssnano: ^7.0.6
|
||||||
@ -83,7 +83,7 @@ catalog:
|
|||||||
defu: ^6.1.4
|
defu: ^6.1.4
|
||||||
depcheck: ^1.4.7
|
depcheck: ^1.4.7
|
||||||
dotenv: ^16.4.7
|
dotenv: ^16.4.7
|
||||||
echarts: ^5.5.1
|
echarts: ^5.6.0
|
||||||
element-plus: ^2.9.1
|
element-plus: ^2.9.1
|
||||||
eslint: ^9.17.0
|
eslint: ^9.17.0
|
||||||
eslint-config-turbo: ^2.3.3
|
eslint-config-turbo: ^2.3.3
|
||||||
@ -124,13 +124,13 @@ catalog:
|
|||||||
ora: ^8.1.1
|
ora: ^8.1.1
|
||||||
pinia: 2.2.2
|
pinia: 2.2.2
|
||||||
pinia-plugin-persistedstate: ^4.2.0
|
pinia-plugin-persistedstate: ^4.2.0
|
||||||
pkg-types: ^1.2.1
|
pkg-types: ^1.3.0
|
||||||
playwright: ^1.49.1
|
playwright: ^1.49.1
|
||||||
postcss: ^8.4.49
|
postcss: ^8.4.49
|
||||||
postcss-antd-fixes: ^0.2.0
|
postcss-antd-fixes: ^0.2.0
|
||||||
postcss-html: ^1.7.0
|
postcss-html: ^1.7.0
|
||||||
postcss-import: ^16.1.0
|
postcss-import: ^16.1.0
|
||||||
postcss-preset-env: ^10.1.2
|
postcss-preset-env: ^10.1.3
|
||||||
postcss-scss: ^4.0.9
|
postcss-scss: ^4.0.9
|
||||||
prettier: ^3.4.2
|
prettier: ^3.4.2
|
||||||
prettier-plugin-tailwindcss: ^0.6.9
|
prettier-plugin-tailwindcss: ^0.6.9
|
||||||
@ -139,8 +139,8 @@ catalog:
|
|||||||
radix-vue: ^1.9.11
|
radix-vue: ^1.9.11
|
||||||
resolve.exports: ^2.0.3
|
resolve.exports: ^2.0.3
|
||||||
rimraf: ^6.0.1
|
rimraf: ^6.0.1
|
||||||
rollup: ^4.28.1
|
rollup: ^4.29.1
|
||||||
rollup-plugin-visualizer: ^5.12.0
|
rollup-plugin-visualizer: ^5.13.1
|
||||||
sass: 1.80.6
|
sass: 1.80.6
|
||||||
sortablejs: ^1.15.6
|
sortablejs: ^1.15.6
|
||||||
stylelint: ^16.12.0
|
stylelint: ^16.12.0
|
||||||
@ -152,16 +152,16 @@ catalog:
|
|||||||
stylelint-order: ^6.0.4
|
stylelint-order: ^6.0.4
|
||||||
stylelint-prettier: ^5.0.2
|
stylelint-prettier: ^5.0.2
|
||||||
stylelint-scss: ^6.10.0
|
stylelint-scss: ^6.10.0
|
||||||
tailwind-merge: ^2.5.5
|
tailwind-merge: ^2.6.0
|
||||||
tailwindcss: ^3.4.17
|
tailwindcss: ^3.4.17
|
||||||
tailwindcss-animate: ^1.0.7
|
tailwindcss-animate: ^1.0.7
|
||||||
theme-colors: ^0.1.0
|
theme-colors: ^0.1.0
|
||||||
turbo: ^2.3.3
|
turbo: ^2.3.3
|
||||||
typescript: 5.6.3
|
typescript: 5.6.3
|
||||||
unbuild: ^3.0.1
|
unbuild: ^3.1.0
|
||||||
unplugin-element-plus: ^0.8.0
|
unplugin-element-plus: ^0.8.0
|
||||||
vee-validate: ^4.14.7
|
vee-validate: ^4.15.0
|
||||||
vite: ^6.0.5
|
vite: ^6.0.6
|
||||||
vite-plugin-compression: ^0.5.1
|
vite-plugin-compression: ^0.5.1
|
||||||
vite-plugin-dts: 4.2.1
|
vite-plugin-dts: 4.2.1
|
||||||
vite-plugin-html: ^3.2.2
|
vite-plugin-html: ^3.2.2
|
||||||
|
Loading…
Reference in New Issue
Block a user