ruoyi-plus-vben5/packages/preference/src/use-preference.ts
2024-05-19 21:20:42 +08:00

120 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { diff } from '@vben-core/toolkit';
import { computed } from 'vue';
import {
initialPreference,
isDarkTheme,
currentPreference as preference,
} from './preference';
function usePreference() {
/**
* @zh_CN 计算偏好设置的变化
*/
const diffPreference = computed(() => {
return diff(initialPreference.value, preference);
});
/**
* @zh_CN 判断是否为暗黑模式
* @param preference - 当前偏好设置对象,它的主题值将被用来判断是否为暗黑模式。
* @returns 如果主题为暗黑模式,返回 true否则返回 false。
*/
const isDark = computed(() => {
const theme = preference.theme;
return isDarkTheme(theme);
});
const theme = computed(() => {
return isDark.value ? 'dark' : 'light';
});
/**
* @zh_CN 布局方式
*/
const layout = computed(() =>
preference.isMobile ? 'side-nav' : preference.layout,
);
/**
* @zh_CN 是否全屏显示content不需要侧边、底部、顶部、tab区域
*/
const isFullContent = computed(() => preference.layout === 'full-content');
/**
* @zh_CN 是否侧边导航模式
*/
const isSideNav = computed(() => preference.layout === 'side-nav');
/**
* @zh_CN 是否侧边混合模式
*/
const isSideMixedNav = computed(() => preference.layout === 'side-mixed-nav');
/**
* @zh_CN 是否为头部导航模式
*/
const isHeaderNav = computed(() => preference.layout === 'header-nav');
/**
* @zh_CN 是否为混合导航模式
*/
const isMixedNav = computed(() => preference.layout === 'mixed-nav');
/**
* @zh_CN 是否包含侧边导航模式
*/
const isSideMode = computed(() => {
return isMixedNav.value || isSideMixedNav.value || isSideNav.value;
});
/**
* @zh_CN 是否开启keep-alive
* 在tabs可见以及开启keep-alive的情况下才开启
*/
const keepAlive = computed(
() => preference.keepAlive && preference.tabsVisible,
);
/**
* @zh_CN 登录注册页面布局是否为左侧
*/
const authPanelLeft = computed(() => {
return preference.authPageLayout === 'panel-left';
});
/**
* @zh_CN 登录注册页面布局是否为左侧
*/
const authPanelRight = computed(() => {
return preference.authPageLayout === 'panel-right';
});
/**
* @zh_CN 登录注册页面布局是否为中间
*/
const authPanelCenter = computed(() => {
return preference.authPageLayout === 'panel-center';
});
return {
authPanelCenter,
authPanelLeft,
authPanelRight,
diffPreference,
isDark,
isFullContent,
isHeaderNav,
isMixedNav,
isSideMixedNav,
isSideMode,
isSideNav,
keepAlive,
layout,
theme,
};
}
export { usePreference };