Appearance
TrinaPower Design
TrinaPower Design 是一个用于构建统一界面风格的设计系统,提供了主题管理、颜色定制和样式工具等功能。
功能特性
- 主题管理:支持明亮/暗黑模式切换,支持主题颜色切换
- 颜色定制:可自定义主题主色和相关颜色变量
- 样式工具:提供 LESS 变量和样式组件
- Vite 插件:支持构建时主题配置
安装
bash
pnpm add @trinapower/design
或使用 npm/yarn:
bash
npm install @trinapower/design
# 或
yarn add @trinapower/design
基本使用
导入样式
javascript
// 导入完整样式包
import "@trinapower/design";
// 导入cosine-fee子模块样式
import "@trinapower/design/cosine-fee";
主题管理
构建时插件配置
javascript
// vite.config.ts
import { defineConfig } from 'vite';
import { createThemePlugin } from '@trinapower/design/theme';
import { generateModifyVars } from '@trinapower/design/theme';
export default defineConfig({
css: {
preprocessorOptions: {
less: {
javascriptEnabled: true,
// 配置全局变量
modifyVars: generateModifyVars({ brand: VITE_GLOB_BRAND }),
},
},
},
plugins: [
// 配置主题插件
createThemePlugin({
isBuild?: boolean,
brand?: string, // 默认 admin
})
]
});
运行时主题切换
javascript
import { ThemeManager } from "@trinapower/design/theme/runtime";
// 配置适配器
const adapter: ConfigAdapter = {
// 获取当前主题模式
getDarkMode: () => {
// 返回本地维护的主题模式,例如从本地存储或状态管理中获取
return "light";
},
// 获取当前头部背景颜色
getHeaderBgColor: () => {
// 返回本地维护的头部背景颜色
return "#ffffff";
},
// 获取当前导航栏背景颜色
getMenuBgColor: () => {
// 返回本地维护的导航栏背景颜色
return "#2468f2";
},
// 设置头部主题模式
setHeaderTheme: (mode) => {
//Todo 本地维护头部主题模式,项目内部维护实现
},
// 设置导航栏主题模式
setMenuTheme: (mode) => {
//Todo 本地维护导航栏主题模式,项目内部维护实现
}
};
// 主题配置选项
const options: ThemeEngineOptions = {};
// 创建主题管理器实例
const themeManager = new ThemeManager(adapter, options);
// 更改主题主色
themeManager.changePrimaryColor("#1890ff");
// 切换暗黑模式
themeManager.setDarkMode("dark");
主要 API
ThemeManager
ThemeManager 是主题管理的核心类,提供了完整的主题配置和切换功能。
构造函数
constructor(adapter: ConfigAdapter, options?: ThemeEngineOptions): 创建主题管理器实例adapter: 配置适配器,用于获取和设置主题配置options: 主题引擎选项,用于自定义主题行为
主题配置
changePrimaryColor(color: string): 改变主题主色并更新所有相关颜色变量color: 新的主色值(如 '#1890ff')
setDarkMode(mode: 'light' | 'dark'): 切换主题模式mode: 新的主题模式,可选值为 'light' 或 'dark'(默认值:'light')
组件样式
updateHeaderBgColor(color?: string): 更新头部背景颜色color: 可选,新的背景颜色值。如果未提供,则使用适配器配置的颜色
updateSidebarBgColor(color?: string): 更新侧边栏背景颜色color: 可选,新的背景颜色值。如果未提供,则使用适配器配置的颜色
特殊模式
toggleGrayMode(enabled: boolean): 切换灰度模式enabled: 是否启用灰度模式
toggleColorWeak(enabled: boolean): 切换色弱模式enabled: 是否启用色弱模式
构建工具
createThemePlugin(options): 创建 Vite 主题插件options.isBuild: 是否为构建模式options.brand: 品牌标识,默认值为 'admin'
generateModifyVars(options): 生成 LESS 变量options.brand: 品牌标识,用于生成品牌相关的颜色变量
配置选项
ThemeEngineOptions
typescript
interface ThemeEngineOptions {
htmlRootSelector?: string; // HTML根元素选择器,默认:'#htmlRoot' 或 document.documentElement
scopeAttr?: string; // 主题作用域属性名,默认:'data-theme'
}
ConfigAdapter
typescript
interface ConfigAdapter {
getDarkMode(): ThemeMode; // 获取当前主题模式
getHeaderBgColor(): string | undefined; // 获取当前头部背景颜色
getMenuBgColor(): string | undefined; // 获取当前导航栏背景颜色
setHeaderTheme(mode: ThemeMode): void; // 设置头部主题模式
setMenuTheme(mode: ThemeMode): void; // 设置导航栏主题模式
}
核心常量
所有主题相关常量均可从 @trinapower/design/theme/runtime 导入:
typescript
// 默认主色
import { DEFAULT_PRIMARY_COLOR } from "@trinapower/design/theme/runtime";
// 输出: '#2468f2'
// 头部背景颜色变量
import { HEADER_BG_COLOR_VAR } from "@trinapower/design/theme/runtime";
// 输出: '--header-bg-color'
// 头部背景悬停颜色变量
import { HEADER_BG_HOVER_COLOR_VAR } from "@trinapower/design/theme/runtime";
// 输出: '--header-bg-hover-color'
// 头部菜单激活背景颜色变量
import { HEADER_MENU_ACTIVE_BG_COLOR_VAR } from "@trinapower/design/theme/runtime";
// 输出: '--header-active-menu-bg-color'
// 侧边栏暗色背景颜色变量
import { SIDER_DARK_BG_COLOR } from "@trinapower/design/theme/runtime";
// 输出: '--sider-dark-bg-color'
// 侧边栏暗色加深背景颜色变量
import { SIDER_DARK_DARKEN_BG_COLOR } from "@trinapower/design/theme/runtime";
// 输出: '--sider-dark-darken-bg-color'
// 侧边栏亮色背景颜色变量
import { SIDER_LIGHTEN_BG_COLOR } from "@trinapower/design/theme/runtime";
// 输出: '--sider-dark-lighten-bg-color'
// 主题模式常量
import { THEME } from "@trinapower/design/theme/runtime";
// 输出: { DARK: 'dark', LIGHT: 'light' }
// 默认暗黑模式
import { darkMode } from "@trinapower/design/theme/runtime";
// 输出: 'light'
// 应用预设颜色列表
import { APP_PRESET_COLOR_LIST } from "@trinapower/design/theme/runtime";
// 输出: ['#0960bd', '#0084f4', ...]
// 头部预设背景颜色列表
import { HEADER_PRESET_BG_COLOR_LIST } from "@trinapower/design/theme/runtime";
// 输出: ['#ffffff', '#151515', ...]
// 侧边栏预设背景颜色列表
import { SIDE_BAR_BG_COLOR_LIST } from "@trinapower/design/theme/runtime";
// 输出: ['#001529', '#212121', ...]
注意事项
- 确保在使用 ThemeManager 之前正确配置 ConfigAdapter
- 主题切换会动态修改 DOM 元素的样式属性,可能影响性能
- 建议在应用初始化时创建 ThemeManager 实例
- 颜色生成策略允许高度自定义主题颜色