feat: additional-settings (#6225)

* feat(preferences): 补充VbenAdminLayout传入属性(来自偏好设置)

* docs(@vben/docs):update settings doc

---------

Co-authored-by: wyc001122 <wangyongchao@testor.com.cn>
This commit is contained in:
wyc001122 2025-05-19 16:29:15 +08:00 committed by GitHub
parent 5ee2a74e2d
commit dae46abb71
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 133 additions and 0 deletions

View File

@ -186,6 +186,12 @@ const defaultPreferences: Preferences = {
colorWeakMode: false, colorWeakMode: false,
compact: false, compact: false,
contentCompact: 'wide', contentCompact: 'wide',
contentCompactWidth: 1200,
contentPadding: 16,
contentPaddingBottom: 16,
contentPaddingLeft: 16,
contentPaddingRight: 16,
contentPaddingTop: 16,
defaultAvatar: defaultAvatar:
'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp', 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp',
defaultHomePath: '/analytics', defaultHomePath: '/analytics',
@ -200,6 +206,7 @@ const defaultPreferences: Preferences = {
name: 'Vben Admin', name: 'Vben Admin',
preferencesButtonPosition: 'auto', preferencesButtonPosition: 'auto',
watermark: false, watermark: false,
zIndex: 200,
}, },
breadcrumb: { breadcrumb: {
enable: true, enable: true,
@ -220,9 +227,11 @@ const defaultPreferences: Preferences = {
footer: { footer: {
enable: false, enable: false,
fixed: false, fixed: false,
height: 32,
}, },
header: { header: {
enable: true, enable: true,
height: 50,
hidden: false, hidden: false,
menuAlign: 'start', menuAlign: 'start',
mode: 'fixed', mode: 'fixed',
@ -248,11 +257,14 @@ const defaultPreferences: Preferences = {
collapsed: false, collapsed: false,
collapsedButton: true, collapsedButton: true,
collapsedShowTitle: false, collapsedShowTitle: false,
collapseWidth: 60,
enable: true, enable: true,
expandOnHover: true, expandOnHover: true,
extraCollapse: false, extraCollapse: false,
extraCollapsedWidth: 60,
fixedButton: true, fixedButton: true,
hidden: false, hidden: false,
mixedWidth: 80,
width: 224, width: 224,
}, },
tabbar: { tabbar: {
@ -319,6 +331,18 @@ interface AppPreferences {
compact: boolean; compact: boolean;
/** Whether to enable content compact mode */ /** Whether to enable content compact mode */
contentCompact: ContentCompactType; contentCompact: ContentCompactType;
/** Content compact width */
contentCompactWidth: number;
/** Content padding */
contentPadding: number;
/** Content bottom padding */
contentPaddingBottom: number;
/** Content left padding */
contentPaddingLeft: number;
/** Content right padding */
contentPaddingRight: number;
/** Content top padding */
contentPaddingTop: number;
// /** Default application avatar */ // /** Default application avatar */
defaultAvatar: string; defaultAvatar: string;
/** Default homepage path */ /** Default homepage path */
@ -349,6 +373,8 @@ interface AppPreferences {
* @zh_CN Whether to enable watermark * @zh_CN Whether to enable watermark
*/ */
watermark: boolean; watermark: boolean;
/** z-index */
zIndex: number;
} }
interface BreadcrumbPreferences { interface BreadcrumbPreferences {
/** Whether breadcrumbs are enabled */ /** Whether breadcrumbs are enabled */
@ -385,11 +411,15 @@ interface FooterPreferences {
enable: boolean; enable: boolean;
/** Whether the footer is fixed */ /** Whether the footer is fixed */
fixed: boolean; fixed: boolean;
/** Footer height */
height: number;
} }
interface HeaderPreferences { interface HeaderPreferences {
/** Whether the header is enabled */ /** Whether the header is enabled */
enable: boolean; enable: boolean;
/** Header height */
height: number;
/** Whether the header is hidden, css-hidden */ /** Whether the header is hidden, css-hidden */
hidden: boolean; hidden: boolean;
/** Header menu alignment */ /** Header menu alignment */
@ -422,16 +452,22 @@ interface SidebarPreferences {
collapsedButton: boolean; collapsedButton: boolean;
/** Whether to show title when sidebar is collapsed */ /** Whether to show title when sidebar is collapsed */
collapsedShowTitle: boolean; collapsedShowTitle: boolean;
/** Sidebar collapse width */
collapseWidth: number;
/** Whether the sidebar is visible */ /** Whether the sidebar is visible */
enable: boolean; enable: boolean;
/** Menu auto-expand state */ /** Menu auto-expand state */
expandOnHover: boolean; expandOnHover: boolean;
/** Whether the sidebar extension area is collapsed */ /** Whether the sidebar extension area is collapsed */
extraCollapse: boolean; extraCollapse: boolean;
/** Sidebar extension area collapse width */
extraCollapsedWidth: number;
/** Whether the sidebar fixed button is visible */ /** Whether the sidebar fixed button is visible */
fixedButton: boolean; fixedButton: boolean;
/** Whether the sidebar is hidden - css */ /** Whether the sidebar is hidden - css */
hidden: boolean; hidden: boolean;
/** Mixed sidebar width */
mixedWidth: number;
/** Sidebar width */ /** Sidebar width */
width: number; width: number;
} }

View File

@ -185,6 +185,12 @@ const defaultPreferences: Preferences = {
colorWeakMode: false, colorWeakMode: false,
compact: false, compact: false,
contentCompact: 'wide', contentCompact: 'wide',
contentCompactWidth: 1200,
contentPadding: 16,
contentPaddingBottom: 16,
contentPaddingLeft: 16,
contentPaddingRight: 16,
contentPaddingTop: 16,
defaultAvatar: defaultAvatar:
'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp', 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp',
defaultHomePath: '/analytics', defaultHomePath: '/analytics',
@ -199,6 +205,7 @@ const defaultPreferences: Preferences = {
name: 'Vben Admin', name: 'Vben Admin',
preferencesButtonPosition: 'auto', preferencesButtonPosition: 'auto',
watermark: false, watermark: false,
zIndex: 200,
}, },
breadcrumb: { breadcrumb: {
enable: true, enable: true,
@ -219,9 +226,11 @@ const defaultPreferences: Preferences = {
footer: { footer: {
enable: false, enable: false,
fixed: false, fixed: false,
height: 32,
}, },
header: { header: {
enable: true, enable: true,
height: 50,
hidden: false, hidden: false,
menuAlign: 'start', menuAlign: 'start',
mode: 'fixed', mode: 'fixed',
@ -247,11 +256,14 @@ const defaultPreferences: Preferences = {
collapsed: false, collapsed: false,
collapsedButton: true, collapsedButton: true,
collapsedShowTitle: false, collapsedShowTitle: false,
collapseWidth: 60,
enable: true, enable: true,
expandOnHover: true, expandOnHover: true,
extraCollapse: false, extraCollapse: false,
extraCollapsedWidth: 60,
fixedButton: true, fixedButton: true,
hidden: false, hidden: false,
mixedWidth: 80,
width: 224, width: 224,
}, },
tabbar: { tabbar: {
@ -318,6 +330,18 @@ interface AppPreferences {
compact: boolean; compact: boolean;
/** 是否开启内容紧凑模式 */ /** 是否开启内容紧凑模式 */
contentCompact: ContentCompactType; contentCompact: ContentCompactType;
/** 内容紧凑宽度 */
contentCompactWidth: number;
/** 内容内边距 */
contentPadding: number;
/** 内容底部内边距 */
contentPaddingBottom: number;
/** 内容左侧内边距 */
contentPaddingLeft: number;
/** 内容右侧内边距 */
contentPaddingRight: number;
/** 内容顶部内边距 */
contentPaddingTop: number;
// /** 应用默认头像 */ // /** 应用默认头像 */
defaultAvatar: string; defaultAvatar: string;
/** 默认首页地址 */ /** 默认首页地址 */
@ -348,6 +372,8 @@ interface AppPreferences {
* @zh_CN 是否开启水印 * @zh_CN 是否开启水印
*/ */
watermark: boolean; watermark: boolean;
/** z-index */
zIndex: number;
} }
interface BreadcrumbPreferences { interface BreadcrumbPreferences {
@ -385,11 +411,15 @@ interface FooterPreferences {
enable: boolean; enable: boolean;
/** 底栏是否固定 */ /** 底栏是否固定 */
fixed: boolean; fixed: boolean;
/** 底栏高度 */
height: number;
} }
interface HeaderPreferences { interface HeaderPreferences {
/** 顶栏是否启用 */ /** 顶栏是否启用 */
enable: boolean; enable: boolean;
/** 顶栏高度 */
height: number;
/** 顶栏是否隐藏,css-隐藏 */ /** 顶栏是否隐藏,css-隐藏 */
hidden: boolean; hidden: boolean;
/** 顶栏菜单位置 */ /** 顶栏菜单位置 */
@ -423,16 +453,22 @@ interface SidebarPreferences {
collapsedButton: boolean; collapsedButton: boolean;
/** 侧边栏折叠时是否显示title */ /** 侧边栏折叠时是否显示title */
collapsedShowTitle: boolean; collapsedShowTitle: boolean;
/** 侧边栏折叠宽度 */
collapseWidth: number;
/** 侧边栏是否可见 */ /** 侧边栏是否可见 */
enable: boolean; enable: boolean;
/** 菜单自动展开状态 */ /** 菜单自动展开状态 */
expandOnHover: boolean; expandOnHover: boolean;
/** 侧边栏扩展区域是否折叠 */ /** 侧边栏扩展区域是否折叠 */
extraCollapse: boolean; extraCollapse: boolean;
/** 侧边栏扩展区域折叠宽度 */
extraCollapsedWidth: number;
/** 侧边栏固定按钮是否可见 */ /** 侧边栏固定按钮是否可见 */
fixedButton: boolean; fixedButton: boolean;
/** 侧边栏是否隐藏 - css */ /** 侧边栏是否隐藏 - css */
hidden: boolean; hidden: boolean;
/** 混合侧边栏宽度 */
mixedWidth: number;
/** 侧边栏宽度 */ /** 侧边栏宽度 */
width: number; width: number;
} }

View File

@ -10,6 +10,12 @@ exports[`defaultPreferences immutability test > should not modify the config obj
"colorWeakMode": false, "colorWeakMode": false,
"compact": false, "compact": false,
"contentCompact": "wide", "contentCompact": "wide",
"contentCompactWidth": 1200,
"contentPadding": 16,
"contentPaddingBottom": 16,
"contentPaddingLeft": 16,
"contentPaddingRight": 16,
"contentPaddingTop": 16,
"defaultAvatar": "https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp", "defaultAvatar": "https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp",
"defaultHomePath": "/analytics", "defaultHomePath": "/analytics",
"dynamicTitle": true, "dynamicTitle": true,
@ -23,6 +29,7 @@ exports[`defaultPreferences immutability test > should not modify the config obj
"name": "Vben Admin", "name": "Vben Admin",
"preferencesButtonPosition": "auto", "preferencesButtonPosition": "auto",
"watermark": false, "watermark": false,
"zIndex": 200,
}, },
"breadcrumb": { "breadcrumb": {
"enable": true, "enable": true,
@ -43,9 +50,11 @@ exports[`defaultPreferences immutability test > should not modify the config obj
"footer": { "footer": {
"enable": false, "enable": false,
"fixed": false, "fixed": false,
"height": 32,
}, },
"header": { "header": {
"enable": true, "enable": true,
"height": 50,
"hidden": false, "hidden": false,
"menuAlign": "start", "menuAlign": "start",
"mode": "fixed", "mode": "fixed",
@ -68,14 +77,17 @@ exports[`defaultPreferences immutability test > should not modify the config obj
}, },
"sidebar": { "sidebar": {
"autoActivateChild": false, "autoActivateChild": false,
"collapseWidth": 60,
"collapsed": false, "collapsed": false,
"collapsedButton": true, "collapsedButton": true,
"collapsedShowTitle": false, "collapsedShowTitle": false,
"enable": true, "enable": true,
"expandOnHover": true, "expandOnHover": true,
"extraCollapse": false, "extraCollapse": false,
"extraCollapsedWidth": 60,
"fixedButton": true, "fixedButton": true,
"hidden": false, "hidden": false,
"mixedWidth": 80,
"width": 224, "width": 224,
}, },
"tabbar": { "tabbar": {

View File

@ -9,6 +9,12 @@ const defaultPreferences: Preferences = {
colorWeakMode: false, colorWeakMode: false,
compact: false, compact: false,
contentCompact: 'wide', contentCompact: 'wide',
contentCompactWidth: 1200,
contentPadding: 16,
contentPaddingBottom: 16,
contentPaddingLeft: 16,
contentPaddingRight: 16,
contentPaddingTop: 16,
defaultAvatar: defaultAvatar:
'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp', 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/avatar-v1.webp',
defaultHomePath: '/analytics', defaultHomePath: '/analytics',
@ -23,6 +29,7 @@ const defaultPreferences: Preferences = {
name: 'Vben Admin', name: 'Vben Admin',
preferencesButtonPosition: 'auto', preferencesButtonPosition: 'auto',
watermark: false, watermark: false,
zIndex: 200,
}, },
breadcrumb: { breadcrumb: {
enable: true, enable: true,
@ -43,13 +50,16 @@ const defaultPreferences: Preferences = {
footer: { footer: {
enable: false, enable: false,
fixed: false, fixed: false,
height: 32,
}, },
header: { header: {
enable: true, enable: true,
height: 50,
hidden: false, hidden: false,
menuAlign: 'start', menuAlign: 'start',
mode: 'fixed', mode: 'fixed',
}, },
logo: { logo: {
enable: true, enable: true,
source: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp', source: 'https://unpkg.com/@vbenjs/static-source@0.1.7/source/logo-v1.webp',
@ -71,11 +81,14 @@ const defaultPreferences: Preferences = {
collapsed: false, collapsed: false,
collapsedButton: true, collapsedButton: true,
collapsedShowTitle: false, collapsedShowTitle: false,
collapseWidth: 60,
enable: true, enable: true,
expandOnHover: true, expandOnHover: true,
extraCollapse: false, extraCollapse: false,
extraCollapsedWidth: 60,
fixedButton: true, fixedButton: true,
hidden: false, hidden: false,
mixedWidth: 80,
width: 224, width: 224,
}, },
tabbar: { tabbar: {

View File

@ -33,6 +33,18 @@ interface AppPreferences {
compact: boolean; compact: boolean;
/** 是否开启内容紧凑模式 */ /** 是否开启内容紧凑模式 */
contentCompact: ContentCompactType; contentCompact: ContentCompactType;
/** 内容紧凑宽度 */
contentCompactWidth: number;
/** 内容内边距 */
contentPadding: number;
/** 内容底部内边距 */
contentPaddingBottom: number;
/** 内容左侧内边距 */
contentPaddingLeft: number;
/** 内容右侧内边距 */
contentPaddingRight: number;
/** 内容顶部内边距 */
contentPaddingTop: number;
// /** 应用默认头像 */ // /** 应用默认头像 */
defaultAvatar: string; defaultAvatar: string;
/** 默认首页地址 */ /** 默认首页地址 */
@ -63,6 +75,8 @@ interface AppPreferences {
* @zh_CN * @zh_CN
*/ */
watermark: boolean; watermark: boolean;
/** z-index */
zIndex: number;
} }
interface BreadcrumbPreferences { interface BreadcrumbPreferences {
@ -100,11 +114,15 @@ interface FooterPreferences {
enable: boolean; enable: boolean;
/** 底栏是否固定 */ /** 底栏是否固定 */
fixed: boolean; fixed: boolean;
/** 底栏高度 */
height: number;
} }
interface HeaderPreferences { interface HeaderPreferences {
/** 顶栏是否启用 */ /** 顶栏是否启用 */
enable: boolean; enable: boolean;
/** 顶栏高度 */
height: number;
/** 顶栏是否隐藏,css-隐藏 */ /** 顶栏是否隐藏,css-隐藏 */
hidden: boolean; hidden: boolean;
/** 顶栏菜单位置 */ /** 顶栏菜单位置 */
@ -138,16 +156,22 @@ interface SidebarPreferences {
collapsedButton: boolean; collapsedButton: boolean;
/** 侧边栏折叠时是否显示title */ /** 侧边栏折叠时是否显示title */
collapsedShowTitle: boolean; collapsedShowTitle: boolean;
/** 侧边栏折叠宽度 */
collapseWidth: number;
/** 侧边栏是否可见 */ /** 侧边栏是否可见 */
enable: boolean; enable: boolean;
/** 菜单自动展开状态 */ /** 菜单自动展开状态 */
expandOnHover: boolean; expandOnHover: boolean;
/** 侧边栏扩展区域是否折叠 */ /** 侧边栏扩展区域是否折叠 */
extraCollapse: boolean; extraCollapse: boolean;
/** 侧边栏扩展区域折叠宽度 */
extraCollapsedWidth: number;
/** 侧边栏固定按钮是否可见 */ /** 侧边栏固定按钮是否可见 */
fixedButton: boolean; fixedButton: boolean;
/** 侧边栏是否隐藏 - css */ /** 侧边栏是否隐藏 - css */
hidden: boolean; hidden: boolean;
/** 混合侧边栏宽度 */
mixedWidth: number;
/** 侧边栏宽度 */ /** 侧边栏宽度 */
width: number; width: number;
} }

View File

@ -180,8 +180,16 @@ const headerSlots = computed(() => {
<VbenAdminLayout <VbenAdminLayout
v-model:sidebar-extra-visible="sidebarExtraVisible" v-model:sidebar-extra-visible="sidebarExtraVisible"
:content-compact="preferences.app.contentCompact" :content-compact="preferences.app.contentCompact"
:content-compact-width="preferences.app.contentCompactWidth"
:content-padding="preferences.app.contentPadding"
:content-padding-bottom="preferences.app.contentPaddingBottom"
:content-padding-left="preferences.app.contentPaddingLeft"
:content-padding-right="preferences.app.contentPaddingRight"
:content-padding-top="preferences.app.contentPaddingTop"
:footer-enable="preferences.footer.enable" :footer-enable="preferences.footer.enable"
:footer-fixed="preferences.footer.fixed" :footer-fixed="preferences.footer.fixed"
:footer-height="preferences.footer.height"
:header-height="preferences.header.height"
:header-hidden="preferences.header.hidden" :header-hidden="preferences.header.hidden"
:header-mode="preferences.header.mode" :header-mode="preferences.header.mode"
:header-theme="headerTheme" :header-theme="headerTheme"
@ -196,11 +204,15 @@ const headerSlots = computed(() => {
:sidebar-fixed-button="preferences.sidebar.fixedButton" :sidebar-fixed-button="preferences.sidebar.fixedButton"
:sidebar-expand-on-hover="preferences.sidebar.expandOnHover" :sidebar-expand-on-hover="preferences.sidebar.expandOnHover"
:sidebar-extra-collapse="preferences.sidebar.extraCollapse" :sidebar-extra-collapse="preferences.sidebar.extraCollapse"
:sidebar-extra-collapsed-width="preferences.sidebar.extraCollapsedWidth"
:sidebar-hidden="preferences.sidebar.hidden" :sidebar-hidden="preferences.sidebar.hidden"
:sidebar-mixed-width="preferences.sidebar.mixedWidth"
:sidebar-theme="sidebarTheme" :sidebar-theme="sidebarTheme"
:sidebar-width="preferences.sidebar.width" :sidebar-width="preferences.sidebar.width"
:side-collapse-width="preferences.sidebar.collapseWidth"
:tabbar-enable="preferences.tabbar.enable" :tabbar-enable="preferences.tabbar.enable"
:tabbar-height="preferences.tabbar.height" :tabbar-height="preferences.tabbar.height"
:z-index="preferences.app.zIndex"
@side-mouse-leave="handleSideMouseLeave" @side-mouse-leave="handleSideMouseLeave"
@toggle-sidebar="toggleSidebar" @toggle-sidebar="toggleSidebar"
@update:sidebar-collapse=" @update:sidebar-collapse="