主题皮肤
antd-layout 除了支持基本的明暗度、单色主题效果以外,还可以高度自定义外观主题,例如:给整个布局增加动态背景和模糊层次的皮肤效果,还能让整体变妆为 shadcn-ui 风格。
自定义皮肤主题
可以基于 antd-layout 提供的 ThemeSkin 约束参数,配置更细致的关键属性配合图片背景素材,组织成皮肤组件,然后像 菜单 和 国际化 数据一样装入组件内部,再设置 layoutConfig 中的 skinName 即可启用皮肤主题了。
定制皮肤
src/components/skins/blueSkyDark.ts
import type { ThemeSkin } from "@adminui-dev/layout"
const bgContent = <div style={{...}}><img style={{width:"100%"}} src="/images/skins/blue-sky/bg.webp" alt="bg.webp" /></div>
const blueSkyDark:ThemeSkin = {
"name":"blueSkyDark",
"skinType":"custom",
"backgroundColor":"#090a0b",
"layoutConfig":{
"theme":"dark",
"primaryColor":"#4dbae9",
"noneHeader":false,
"hideBorder":false,
"asideBlur":true,
"headerBlur":true,
"largeBrand":true,
"containerBlur":true,
"menuItemSelectColor":"primary",
},
"logo":"/images/skins/blue-sky/app-logo-light.webp",
"icon":"/images/skins/blue-sky/skin-icon-dark.webp",
"backgroundContent":<bgContent />
}
export { blueSkyDark } 复制成功
可以使用
defineThemeSkin方法配置更方便
const blueSkyDark = defineThemeSkin({...})
使用皮肤
src/layouts/index.tsx
import { blueSkyDark } from "@components/skins/blueSkyDark"
import { AntdLayout } from "@adminui-dev/antd-layout"
...
export default function(){
// layout config
const layoutConfig:LayoutConfig = {
disabledLocale:true,
largeBrand:true,
skinName:"blueSkyDark", // 使用皮肤
...
}
return(
<AntdLayout layoutConfig={layoutConfig} menuData={...} themeSkins={[blueSkyDark]}>
)
} 复制成功
themeSkins接收的是数组,因为可能有多个皮肤。
切换皮肤
使用 setLayoutConfig 方法进行切换
src/pages/welcome.tsx
import { Container, setSkinConfig, useConfigAction, useConfigState } from '@adminui-dev/antd-layout';
...
const { setLayoutConfig } = useConfigAction()
const { layoutConfig } = useConfigState()
...
const config = setSkinConfig(layoutConfig,skin)
setLayoutConfig({
...config,
skinName:"customeSkinName"
})
... 复制成功
皮肤属性
ThemeSkin
| 参数名 | 类型 |默认值| 说明 |
|-------|-------|-------|-------|
|name|string|-|唯一名称|
|label|string|-|显示名称|
|skinType|SkinType|-|皮肤类型|
|layoutConfig|LayoutConfig|-|布局类型|
|backgroundColor|string|-|背景颜色|
|layoutBorderColor|string|-|边框颜色|
|logo|string / ReactNode|-|品牌Logo|
|icon|string|-|皮肤缩略图|
|headerStyle|string|-|布局头部样式|
|asideStyle|string|-|布局侧滑样式|
SkinType
- system
string- 系统皮肤(保留) - custom
string- 自定义皮肤