diff --git a/packages/@core/forward/preferences/src/preferences.ts b/packages/@core/forward/preferences/src/preferences.ts index 962149c7..12cef861 100644 --- a/packages/@core/forward/preferences/src/preferences.ts +++ b/packages/@core/forward/preferences/src/preferences.ts @@ -72,7 +72,6 @@ class PreferenceManager { private handleUpdates(updates: DeepPartial) { const themeUpdates = updates.theme || {}; const appUpdates = updates.app || {}; - if (themeUpdates && Object.keys(themeUpdates).length > 0) { this.updateTheme(this.state); } @@ -162,15 +161,14 @@ class PreferenceManager { private updateColorMode(preference: Preferences) { if (preference.app) { const { colorGrayMode, colorWeakMode } = preference.app; - const body = document.body; const COLOR_WEAK = 'invert-mode'; const COLOR_GRAY = 'grayscale-mode'; colorWeakMode - ? body.classList.add(COLOR_WEAK) - : body.classList.remove(COLOR_WEAK); + ? document.documentElement.classList.add(COLOR_WEAK) + : document.documentElement.classList.remove(COLOR_WEAK); colorGrayMode - ? body.classList.add(COLOR_GRAY) - : body.classList.remove(COLOR_GRAY); + ? document.documentElement.classList.add(COLOR_GRAY) + : document.documentElement.classList.remove(COLOR_GRAY); } } @@ -341,13 +339,14 @@ class PreferenceManager { [STORAGE_KEY, STORAGE_KEY_THEME, STORAGE_KEY_LOCALE].forEach((key) => { this.cache?.removeItem(key); }); + this.updatePreferences(this.state); } /** * 更新偏好设置 * @param updates - 要更新的偏好设置 */ - public updatePreferences(updates: DeepPartial) { + public async updatePreferences(updates: DeepPartial) { const mergedState = merge({}, updates, markRaw(this.state)); Object.assign(this.state, mergedState); diff --git a/packages/@core/shared/design/src/scss/common/base.scss b/packages/@core/shared/design/src/scss/common/base.scss index 36fea24c..02009b2a 100644 --- a/packages/@core/shared/design/src/scss/common/base.scss +++ b/packages/@core/shared/design/src/scss/common/base.scss @@ -21,11 +21,11 @@ html { border-width: 0; } -body.invert-mode { +html.invert-mode { @apply invert; } -body.grayscale-mode { +html.grayscale-mode { @apply grayscale; } diff --git a/packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue b/packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue index 815b58b1..3cf63994 100644 --- a/packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue +++ b/packages/@core/ui-kit/layout-ui/src/components/layout-sidebar.vue @@ -92,7 +92,7 @@ const props = withDefaults(defineProps(), { domVisible: true, extraWidth: 180, fixedExtra: false, - isSideMixed: false, + isSidebarMixed: false, mixedWidth: 80, paddingTop: 60, show: true, @@ -118,13 +118,13 @@ const hiddenSideStyle = computed((): CSSProperties => { }); const style = computed((): CSSProperties => { - const { isSideMixed, paddingTop, zIndex } = props; + const { isSidebarMixed, paddingTop, zIndex } = props; return { ...calcMenuWidthStyle(false), paddingTop: `${paddingTop}px`, zIndex, - ...(isSideMixed && extraVisible.value ? { transition: 'none' } : {}), + ...(isSidebarMixed && extraVisible.value ? { transition: 'none' } : {}), }; }); @@ -147,8 +147,8 @@ const extraTitleStyle = computed((): CSSProperties => { }); const contentWidthStyle = computed((): CSSProperties => { - const { collapseWidth, fixedExtra, isSideMixed, mixedWidth } = props; - if (isSideMixed && fixedExtra) { + const { collapseWidth, fixedExtra, isSidebarMixed, mixedWidth } = props; + if (isSidebarMixed && fixedExtra) { return { width: `${collapse.value ? collapseWidth : mixedWidth}px` }; } return {}; @@ -165,10 +165,10 @@ const contentStyle = computed((): CSSProperties => { }); const headerStyle = computed((): CSSProperties => { - const { headerHeight, isSideMixed } = props; + const { headerHeight, isSidebarMixed } = props; return { - ...(isSideMixed ? { display: 'flex', justifyContent: 'center' } : {}), + ...(isSidebarMixed ? { display: 'flex', justifyContent: 'center' } : {}), height: `${headerHeight}px`, ...contentWidthStyle.value, }; @@ -195,10 +195,16 @@ watchEffect(() => { }); function calcMenuWidthStyle(isHiddenDom: boolean): CSSProperties { - const { backgroundColor, extraWidth, fixedExtra, isSideMixed, show, width } = - props; + const { + backgroundColor, + extraWidth, + fixedExtra, + isSidebarMixed, + show, + width, + } = props; - let widthValue = `${width + (isSideMixed && fixedExtra && extraVisible.value ? extraWidth : 0)}px`; + let widthValue = `${width + (isSidebarMixed && fixedExtra && extraVisible.value ? extraWidth : 0)}px`; const { collapseWidth } = props; diff --git a/packages/@core/ui-kit/layout-ui/src/vben-layout.vue b/packages/@core/ui-kit/layout-ui/src/vben-layout.vue index f6619ce7..41a3789d 100644 --- a/packages/@core/ui-kit/layout-ui/src/vben-layout.vue +++ b/packages/@core/ui-kit/layout-ui/src/vben-layout.vue @@ -27,10 +27,8 @@ const props = withDefaults(defineProps(), { contentPaddingRight: 0, contentPaddingTop: 0, footerEnable: false, - // footerBackgroundColor: '#fff', footerFixed: true, footerHeight: 32, - // headerBackgroundColor: 'hsl(var(--background))', headerHeight: 50, headerHeightOffset: 10, headerHidden: false, @@ -39,7 +37,6 @@ const props = withDefaults(defineProps(), { headerVisible: true, isMobile: false, layout: 'sidebar-nav', - // sideCollapse: false, sideCollapseWidth: 60, sidebarCollapseShowTitle: false, sidebarHidden: false, @@ -48,7 +45,6 @@ const props = withDefaults(defineProps(), { sidebarTheme: 'dark', sidebarWidth: 180, tabbarEnable: true, - // tabsBackgroundColor: 'hsl(var(--background))', tabsHeight: 36, zIndex: 200, }); @@ -134,6 +130,7 @@ const headerWrapperHeight = computed(() => { const getSideCollapseWidth = computed(() => { const { sideCollapseWidth, sidebarCollapseShowTitle, sidebarMixedWidth } = props; + return sidebarCollapseShowTitle || isSidebarMixedNav.value ? sidebarMixedWidth : sideCollapseWidth; @@ -187,6 +184,7 @@ const getSidebarWidth = computed(() => { */ const getExtraWidth = computed(() => { const { sidebarWidth } = props; + return sidebarExtraCollapse.value ? getSideCollapseWidth.value : sidebarWidth; }); 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 5627b763..65c82ac0 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 @@ -52,7 +52,7 @@ function handleMouseenter(menu: MenuRecordRaw) { @mouseenter="handleMouseenter(menu)" > - {{ menu.name }} + {{ menu.name }} diff --git a/packages/business/layouts/src/basic/layout.vue b/packages/business/layouts/src/basic/layout.vue index 65ff28ee..4e567647 100644 --- a/packages/business/layouts/src/basic/layout.vue +++ b/packages/business/layouts/src/basic/layout.vue @@ -41,8 +41,15 @@ const theme = computed(() => { }); const logoClass = computed(() => { + let cls = ''; const { collapsed, collapsedShowTitle } = preferences.sidebar; - return collapsedShowTitle && collapsed && !isMixedNav.value ? 'mx-auto' : ''; + if (collapsedShowTitle && collapsed && !isMixedNav.value) { + cls += ' mx-auto'; + } + if (isSideMixedNav.value) { + cls += ' flex-center'; + } + return cls; }); const isMenuRounded = computed(() => {