Files
yunrui_asset/frontend/src/hooks/useDesignTokens.js
T
zhang1106 afc372a432 chore: 统一代码风格并配置ESLint和Prettier
配置ESLint和Prettier规则
添加前端和后端的忽略文件
统一代码格式和缩进
修复代码风格问题
2026-02-10 11:04:01 +08:00

95 lines
2.5 KiB
JavaScript

import { useMemo } from 'react';
import { useConfig } from '../context/ConfigContext';
/**
* 使用设计令牌 Hook
* 集中管理主题配置,避免在多个组件中重复定义
* @returns {Object} 设计令牌对象
*/
export const useDesignTokens = () => {
const { config } = useConfig();
const designTokens = useMemo(() => {
const primaryColor = config?.primary_color || '#667eea';
const secondaryColor = config?.secondary_color || '#764ba2';
return {
colors: {
primary: {
main: primaryColor,
gradient: `linear-gradient(135deg, ${primaryColor} 0%, ${secondaryColor} 100%)`,
light: '#8b9ff0',
},
success: { main: '#10b981' },
warning: { main: '#f59e0b' },
error: { main: '#ef4444' },
text: {
primary: '#1e293b',
secondary: '#64748b',
inverse: '#ffffff',
},
background: {
primary: '#ffffff',
secondary: '#f8fafc',
dark: '#1e293b',
},
border: {
light: '#e2e8f0',
},
sidebar: {
bg: '#ffffff',
bgHover: `rgba(${hexToRgb(primaryColor)}, 0.08)`,
bgActive: `rgba(${hexToRgb(primaryColor)}, 0.15)`,
text: '#475569',
textHover: primaryColor,
textActive: primaryColor,
border: '#e2e8f0',
},
},
shadows: {
small: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
medium: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)',
large: '0 10px 15px -3px rgba(0, 0, 0, 0.1)',
},
borderRadius: {
small: '6px',
medium: '10px',
},
spacing: {
sm: '8px',
md: '16px',
lg: '24px',
},
};
}, [config?.primary_color, config?.secondary_color]);
return designTokens;
};
/**
* 将十六进制颜色转换为RGB字符串
* @param {string} hex - 十六进制颜色值
* @returns {string} RGB字符串 (如: "102, 126, 234")
*/
function hexToRgb(hex) {
// 移除 # 号
const cleanHex = hex.replace('#', '');
// 处理简写格式 (如: #fff)
const fullHex =
cleanHex.length === 3
? cleanHex
.split('')
.map(c => c + c)
.join('')
: cleanHex;
const r = parseInt(fullHex.substring(0, 2), 16);
const g = parseInt(fullHex.substring(2, 4), 16);
const b = parseInt(fullHex.substring(4, 6), 16);
return `${r}, ${g}, ${b}`;
}
export default useDesignTokens;