colorTokens.js 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /**
  2. * 后台五维色彩映射 —— 品牌色单一出口(U5 批次收敛)
  3. *
  4. * 品牌色:身 #FF8C42 / 智 #1677FF / 富 #F59E0B / 行 #10B981 / 心 #FF6B9D
  5. *
  6. * 约定:
  7. * 1. 页面不再各自重复定义五维色值,一律从本模块引用;
  8. * 2. `--adm-primary` 等令牌的取值在 admin-tokens.css 中定义,本模块只读取不改动;
  9. * 3. canvas / echarts 的 itemStyle.color、color 数组不解析 CSS 变量,
  10. * 必须经 adminColor() 用 getComputedStyle 读取运行时令牌值;
  11. * 4. 普通 DOM 样式仍优先写 `var(--adm-primary)`,不要为了统一样式而多绕一层 JS;
  12. * 5. 后台主色令牌与五维品牌色已解耦、互不影响:主色加深后不再与五维「智」同源,
  13. * adminColor('primary') 的兜底值由 ADMIN_PRIMARY_FALLBACK 独立提供,五维色值恒定不动。
  14. */
  15. /** 五维色彩映射(单一出口) */
  16. export const DIMENSION_COLORS = {
  17. body: '#FF8C42', // 身
  18. wisdom: '#1677FF', // 智
  19. wealth: '#F59E0B', // 富
  20. action: '#10B981', // 行
  21. mind: '#FF6B9D' // 心
  22. }
  23. /** 后台主色兜底值:与五维品牌色解耦,独立维护,勿复用 DIMENSION_COLORS.wisdom */
  24. const ADMIN_PRIMARY_FALLBACK = '#0B5FCC'
  25. /** 后台语义令牌 → CSS 变量名 */
  26. const TOKEN_VAR_MAP = {
  27. primary: '--adm-primary',
  28. success: '--adm-success',
  29. warning: '--adm-warning',
  30. danger: '--adm-error',
  31. error: '--adm-error',
  32. info: '--adm-info'
  33. }
  34. /**
  35. * 读取 :root 上的令牌值(canvas/echarts 不解析 CSS var,只能取实际色值)
  36. * @param {String} varName CSS 变量名,如 '--adm-primary'
  37. * @param {String} fallback 读取失败时的兜底色值
  38. * @return {String} 去掉首尾空格后的色值
  39. */
  40. function readCssVar(varName, fallback) {
  41. if (typeof window === 'undefined' || typeof document === 'undefined' || !window.getComputedStyle) {
  42. return fallback
  43. }
  44. const value = (window.getComputedStyle(document.documentElement).getPropertyValue(varName) || '').trim()
  45. return value || fallback
  46. }
  47. /**
  48. * 取后台令牌色值(品牌主色 / 语义色 / 五维色)
  49. * @param {String} key 'primary'|'success'|'warning'|'danger'|'info',或五维 code(body/wisdom/wealth/action/mind)
  50. * @return {String} 实际色值,未识别的 key 返回空串
  51. */
  52. export function adminColor(key) {
  53. if (!key) return ''
  54. if (Object.prototype.hasOwnProperty.call(DIMENSION_COLORS, key)) return DIMENSION_COLORS[key]
  55. const varName = TOKEN_VAR_MAP[key]
  56. if (!varName) return ''
  57. // 兜底值独立于五维品牌色:后台主色加深后与「智」解耦,两者互不影响
  58. const fallback = key === 'primary' ? ADMIN_PRIMARY_FALLBACK : ''
  59. return readCssVar(varName, fallback)
  60. }
  61. /**
  62. * 取五维色值,未命中时用调用方兜底值
  63. * @param {String} code 五维 code
  64. * @param {String} [fallback] 兜底色值(可传 CSS 变量)
  65. * @return {String}
  66. */
  67. export function dimensionColor(code, fallback) {
  68. if (code && Object.prototype.hasOwnProperty.call(DIMENSION_COLORS, code)) return DIMENSION_COLORS[code]
  69. return fallback || ''
  70. }
  71. export default {
  72. DIMENSION_COLORS: DIMENSION_COLORS,
  73. adminColor: adminColor,
  74. dimensionColor: dimensionColor
  75. }