mirror of
https://github.com/soybeanjs/soybean-admin.git
synced 2025-09-29 14:46:41 +08:00
refactor(utils): Configure theme using .env environment variables
This commit is contained in:
parent
9ad5d7170a
commit
1f00dfbc7f
4
.env
4
.env
@ -49,3 +49,7 @@ VITE_STORAGE_PREFIX=SOY_
|
|||||||
|
|
||||||
# used to control whether the program automatically detects updates
|
# used to control whether the program automatically detects updates
|
||||||
VITE_AUTOMATICALLY_DETECT_UPDATE=Y
|
VITE_AUTOMATICALLY_DETECT_UPDATE=Y
|
||||||
|
|
||||||
|
# VITE_THEME_SCHEME=dark
|
||||||
|
VITE_THEME_LAYOUT_MODE=horizontal
|
||||||
|
VITE_THEME_TAB_VISIBLE=false
|
@ -1,6 +1,6 @@
|
|||||||
import type { GlobalThemeOverrides } from 'naive-ui';
|
import type { GlobalThemeOverrides } from 'naive-ui';
|
||||||
import { addColorAlpha, getColorPalette, getPaletteColorByNumber, getRgb } from '@sa/color';
|
import { addColorAlpha, getColorPalette, getPaletteColorByNumber, getRgb } from '@sa/color';
|
||||||
import { overrideThemeSettings, themeSettings } from '@/theme/settings';
|
import { envThemeSettings, overrideThemeSettings, themeSettings } from '@/theme/settings';
|
||||||
import { themeVars } from '@/theme/vars';
|
import { themeVars } from '@/theme/vars';
|
||||||
import { toggleHtmlClass } from '@/utils/common';
|
import { toggleHtmlClass } from '@/utils/common';
|
||||||
import { localStg } from '@/utils/storage';
|
import { localStg } from '@/utils/storage';
|
||||||
@ -11,6 +11,7 @@ const DARK_CLASS = 'dark';
|
|||||||
export function initThemeSettings() {
|
export function initThemeSettings() {
|
||||||
const isProd = import.meta.env.PROD;
|
const isProd = import.meta.env.PROD;
|
||||||
|
|
||||||
|
Object.assign(themeSettings, envThemeSettings);
|
||||||
// if it is development mode, the theme settings will not be cached, by update `themeSettings` in `src/theme/settings.ts` to update theme settings
|
// if it is development mode, the theme settings will not be cached, by update `themeSettings` in `src/theme/settings.ts` to update theme settings
|
||||||
if (!isProd) return themeSettings;
|
if (!isProd) return themeSettings;
|
||||||
|
|
||||||
|
@ -90,3 +90,144 @@ export const overrideThemeSettings: Partial<App.Theme.ThemeSetting> = {
|
|||||||
text: 'SoybeanAdmin'
|
text: 'SoybeanAdmin'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure theme using .env environment variables
|
||||||
|
*
|
||||||
|
* Add by woeoio@qq.com
|
||||||
|
*/
|
||||||
|
export const envThemeSettings: Partial<App.Theme.ThemeSetting> = {
|
||||||
|
// Theme Scheme
|
||||||
|
themeScheme: import.meta.env.VITE_THEME_SCHEME || themeSettings.themeScheme,
|
||||||
|
|
||||||
|
// Grayscale
|
||||||
|
grayscale: import.meta.env.VITE_THEME_GRAYSCALE
|
||||||
|
? import.meta.env.VITE_THEME_GRAYSCALE === 'true'
|
||||||
|
: themeSettings.grayscale,
|
||||||
|
|
||||||
|
// Recommend Color
|
||||||
|
recommendColor: import.meta.env.VITE_THEME_RECOMMEND_COLOR
|
||||||
|
? import.meta.env.VITE_THEME_RECOMMEND_COLOR === 'true'
|
||||||
|
: themeSettings.recommendColor,
|
||||||
|
|
||||||
|
// Theme Color
|
||||||
|
themeColor: import.meta.env.VITE_THEME_COLOR || themeSettings.themeColor,
|
||||||
|
|
||||||
|
// Other Colors
|
||||||
|
otherColor: {
|
||||||
|
info: import.meta.env.VITE_THEME_COLOR_INFO || themeSettings.otherColor.info,
|
||||||
|
success: import.meta.env.VITE_THEME_COLOR_SUCCESS || themeSettings.otherColor.success,
|
||||||
|
warning: import.meta.env.VITE_THEME_COLOR_WARNING || themeSettings.otherColor.warning,
|
||||||
|
error: import.meta.env.VITE_THEME_COLOR_ERROR || themeSettings.otherColor.error
|
||||||
|
},
|
||||||
|
|
||||||
|
// Info Follow Primary
|
||||||
|
isInfoFollowPrimary: import.meta.env.VITE_THEME_INFO_FOLLOW_PRIMARY
|
||||||
|
? import.meta.env.VITE_THEME_INFO_FOLLOW_PRIMARY === 'true'
|
||||||
|
: themeSettings.isInfoFollowPrimary,
|
||||||
|
|
||||||
|
// Layout
|
||||||
|
layout: {
|
||||||
|
mode: import.meta.env.VITE_THEME_LAYOUT_MODE || themeSettings.layout.mode,
|
||||||
|
scrollMode: import.meta.env.VITE_THEME_SCROLL_MODE || themeSettings.layout.scrollMode
|
||||||
|
},
|
||||||
|
|
||||||
|
// Page Animation
|
||||||
|
page: {
|
||||||
|
animate: import.meta.env.VITE_THEME_PAGE_ANIMATE
|
||||||
|
? import.meta.env.VITE_THEME_PAGE_ANIMATE === 'true'
|
||||||
|
: themeSettings.page.animate,
|
||||||
|
animateMode: import.meta.env.VITE_THEME_PAGE_ANIMATE_MODE || themeSettings.page.animateMode
|
||||||
|
},
|
||||||
|
|
||||||
|
// Header
|
||||||
|
header: {
|
||||||
|
height: Number(import.meta.env.VITE_THEME_HEADER_HEIGHT) || themeSettings.header.height,
|
||||||
|
breadcrumb: {
|
||||||
|
visible: import.meta.env.VITE_THEME_BREADCRUMB_VISIBLE
|
||||||
|
? import.meta.env.VITE_THEME_BREADCRUMB_VISIBLE === 'true'
|
||||||
|
: themeSettings.header.breadcrumb.visible,
|
||||||
|
showIcon: import.meta.env.VITE_THEME_BREADCRUMB_SHOW_ICON
|
||||||
|
? import.meta.env.VITE_THEME_BREADCRUMB_SHOW_ICON === 'true'
|
||||||
|
: themeSettings.header.breadcrumb.showIcon
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Tab
|
||||||
|
tab: {
|
||||||
|
visible: import.meta.env.VITE_THEME_TAB_VISIBLE
|
||||||
|
? import.meta.env.VITE_THEME_TAB_VISIBLE === 'true'
|
||||||
|
: themeSettings.tab.visible,
|
||||||
|
cache: import.meta.env.VITE_THEME_TAB_CACHE
|
||||||
|
? import.meta.env.VITE_THEME_TAB_CACHE === 'true'
|
||||||
|
: themeSettings.tab.cache,
|
||||||
|
height: Number(import.meta.env.VITE_THEME_TAB_HEIGHT) || themeSettings.tab.height,
|
||||||
|
mode: import.meta.env.VITE_THEME_TAB_MODE || themeSettings.tab.mode
|
||||||
|
},
|
||||||
|
|
||||||
|
// Fixed Header and Tab
|
||||||
|
fixedHeaderAndTab: import.meta.env.VITE_THEME_FIXED_HEADER_AND_TAB
|
||||||
|
? import.meta.env.VITE_THEME_FIXED_HEADER_AND_TAB === 'true'
|
||||||
|
: themeSettings.fixedHeaderAndTab,
|
||||||
|
|
||||||
|
// Sider
|
||||||
|
sider: {
|
||||||
|
inverted: import.meta.env.VITE_THEME_SIDER_INVERTED
|
||||||
|
? import.meta.env.VITE_THEME_SIDER_INVERTED === 'true'
|
||||||
|
: themeSettings.sider.inverted,
|
||||||
|
width: Number(import.meta.env.VITE_THEME_SIDER_WIDTH) || themeSettings.sider.width,
|
||||||
|
collapsedWidth: Number(import.meta.env.VITE_THEME_SIDER_COLLAPSED_WIDTH) || themeSettings.sider.collapsedWidth,
|
||||||
|
mixWidth: Number(import.meta.env.VITE_THEME_SIDER_MIX_WIDTH) || themeSettings.sider.mixWidth,
|
||||||
|
mixCollapsedWidth:
|
||||||
|
Number(import.meta.env.VITE_THEME_SIDER_MIX_COLLAPSED_WIDTH) || themeSettings.sider.mixCollapsedWidth,
|
||||||
|
mixChildMenuWidth:
|
||||||
|
Number(import.meta.env.VITE_THEME_SIDER_MIX_CHILD_MENU_WIDTH) || themeSettings.sider.mixChildMenuWidth
|
||||||
|
},
|
||||||
|
|
||||||
|
// Footer
|
||||||
|
footer: {
|
||||||
|
visible: import.meta.env.VITE_THEME_FOOTER_VISIBLE
|
||||||
|
? import.meta.env.VITE_THEME_FOOTER_VISIBLE === 'true'
|
||||||
|
: themeSettings.footer.visible,
|
||||||
|
fixed: import.meta.env.VITE_THEME_FOOTER_FIXED
|
||||||
|
? import.meta.env.VITE_THEME_FOOTER_FIXED === 'true'
|
||||||
|
: themeSettings.footer.fixed,
|
||||||
|
height: Number(import.meta.env.VITE_THEME_FOOTER_HEIGHT) || themeSettings.footer.height,
|
||||||
|
right: import.meta.env.VITE_THEME_FOOTER_RIGHT
|
||||||
|
? import.meta.env.VITE_THEME_FOOTER_RIGHT === 'true'
|
||||||
|
: themeSettings.footer.right
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** .env variables */
|
||||||
|
// VITE_THEME_SCHEME=dark
|
||||||
|
// VITE_THEME_GRAYSCALE=true
|
||||||
|
// VITE_THEME_RECOMMEND_COLOR=true
|
||||||
|
// VITE_THEME_COLOR=#409EFF
|
||||||
|
// VITE_THEME_COLOR_INFO=#2080f0
|
||||||
|
// VITE_THEME_COLOR_SUCCESS=#52c41a
|
||||||
|
// VITE_THEME_COLOR_WARNING=#faad14
|
||||||
|
// VITE_THEME_COLOR_ERROR=#f5222d
|
||||||
|
// VITE_THEME_INFO_FOLLOW_PRIMARY=true
|
||||||
|
// VITE_THEME_LAYOUT_MODE=vertical
|
||||||
|
// VITE_THEME_SCROLL_MODE=content
|
||||||
|
// VITE_THEME_PAGE_ANIMATE=true
|
||||||
|
// VITE_THEME_PAGE_ANIMATE_MODE=fade-slide
|
||||||
|
// VITE_THEME_HEADER_HEIGHT=60
|
||||||
|
// VITE_THEME_BREADCRUMB_VISIBLE=true
|
||||||
|
// VITE_THEME_BREADCRUMB_SHOW_ICON=true
|
||||||
|
// VITE_THEME_TAB_VISIBLE=false
|
||||||
|
// VITE_THEME_TAB_CACHE=true
|
||||||
|
// VITE_THEME_TAB_HEIGHT=44
|
||||||
|
// VITE_THEME_TAB_MODE=chrome
|
||||||
|
// VITE_THEME_FIXED_HEADER_AND_TAB=true
|
||||||
|
// VITE_THEME_SIDER_INVERTED=false
|
||||||
|
// VITE_THEME_SIDER_WIDTH=220
|
||||||
|
// VITE_THEME_SIDER_COLLAPSED_WIDTH=64
|
||||||
|
// VITE_THEME_SIDER_MIX_WIDTH=90
|
||||||
|
// VITE_THEME_SIDER_MIX_COLLAPSED_WIDTH=64
|
||||||
|
// VITE_THEME_SIDER_MIX_CHILD_MENU_WIDTH=200
|
||||||
|
// VITE_THEME_FOOTER_VISIBLE=true
|
||||||
|
// VITE_THEME_FOOTER_FIXED=false
|
||||||
|
// VITE_THEME_FOOTER_HEIGHT=48
|
||||||
|
// VITE_THEME_FOOTER_RIGHT=true
|
||||||
|
Loading…
Reference in New Issue
Block a user