picstack-ui/docs/HARDCODED_COLORS_FIX.md
Leo 7d32dee944 添加项目文档和静态资源
- 添加 README.md 项目说明文档
- 添加 index.html 入口文件
- 添加 public 目录的静态资源
- 添加 docs 目录的项目文档
2025-10-19 21:46:15 +08:00

8.8 KiB
Raw Blame History

硬编码颜色全局修复报告

📋 问题描述

用户反馈: 存储配置页面的"当前使用"标签仍然显示为蓝色,未被紫色主题覆盖。

根本原因:

  • 多个页面存在硬编码颜色值(color="blue"#1677FF#52C41A 等)
  • 组件直接使用旧的 Ant Design 默认颜色
  • 缺少统一的颜色管理系统
  • Tag 组件未配置主题 Token

🔍 全局代码扫描

扫描命令:

grep -rn "color=\"blue\"|#1677FF|#52C41A|#FF4D4F" src/**/*.tsx

发现问题文件:

  1. src/pages/Storage/index.tsx - 3 处硬编码
  2. src/pages/Analytics/index.tsx - 2 处硬编码
  3. src/pages/Upload/index.tsx - 2 处硬编码

解决方案

1. 创建颜色常量文件

新建文件: src/theme/colors.ts

内容结构:

// 主色系 - 深紫色系
export const PRIMARY_COLORS = {
  PRIMARY: '#5B21B6',
  PRIMARY_HOVER: '#6D28D9',
  PRIMARY_LIGHT: '#7C3AED',
  PRIMARY_LIGHTER: '#8B5CF6',
  PRIMARY_DARK: '#4C1D95',
}

// 功能色系
export const FUNCTIONAL_COLORS = {
  SUCCESS: '#10B981',
  WARNING: '#F59E0B',
  ERROR: '#EF4444',
  INFO: '#7C3AED',
}

// Tag 颜色
export const TAG_COLORS = {
  PRIMARY: 'purple',
  SUCCESS: 'green',
  WARNING: 'orange',
  ERROR: 'red',
}

优势:

  • 统一管理所有颜色
  • 易于维护和更新
  • TypeScript 类型安全
  • 避免魔法数字
  • 支持主题切换

2. 修复 Storage 页面

文件: src/pages/Storage/index.tsx

修改内容:

修改前:

{source.isActive && <Tag color="blue">当前使用</Tag>}

<CheckCircleOutlined style={{ color: '#52C41A' }} />
<CloseCircleOutlined style={{ color: '#FF4D4F' }} />

修改后:

import { FUNCTIONAL_COLORS, TAG_COLORS } from '../../theme/colors';

{source.isActive && <Tag color={TAG_COLORS.PRIMARY}>当前使用</Tag>}

<CheckCircleOutlined style={{ color: FUNCTIONAL_COLORS.SUCCESS }} />
<CloseCircleOutlined style={{ color: FUNCTIONAL_COLORS.ERROR }} />

修复项:

  • Tag 标签从蓝色改为紫色
  • 成功图标从 #52C41A 改为 #10B981
  • 错误图标从 #FF4D4F 改为 #EF4444

3. 修复 Analytics 页面

文件: src/pages/Analytics/index.tsx

修改内容:

修改前:

<Statistic
  valueStyle={{ color: '#52C41A' }}  // 旧绿色
/>

<Statistic
  valueStyle={{ color: '#1677FF' }}  // 旧蓝色
/>

修改后:

import { FUNCTIONAL_COLORS, PRIMARY_COLORS } from '../../theme/colors';

<Statistic
  valueStyle={{ color: FUNCTIONAL_COLORS.SUCCESS }}  // 新绿色
/>

<Statistic
  valueStyle={{ color: PRIMARY_COLORS.PRIMARY }}  // 深紫色
/>

修复项:

  • 本月上传数值从旧绿色改为新绿色
  • 本月下载数值从蓝色改为深紫色

4. 修复 Upload 页面

文件: src/pages/Upload/index.tsx

修改内容:

修改前:

<InboxOutlined style={{ fontSize: 40, color: '#7C3AED' }} />

<CheckCircleOutlined style={{ color: '#52C41A', fontSize: 20 }} />

修改后:

import { FUNCTIONAL_COLORS, PRIMARY_COLORS } from '../../theme/colors';

<InboxOutlined style={{ fontSize: 40, color: PRIMARY_COLORS.PRIMARY }} />

<CheckCircleOutlined style={{ color: FUNCTIONAL_COLORS.SUCCESS, fontSize: 20 }} />

修复项:

  • 上传图标从中紫色改为深紫色(#5B21B6
  • 成功图标从旧绿色改为新绿色

5. 添加 Tag 组件主题配置

文件: src/theme/tokens.ts

新增内容:

componentTokens = {
  // ... 其他组件配置

  Tag: {
    defaultBg: '#F5F3FF',      // 淡紫色背景
    defaultColor: '#5B21B6',   // 深紫色文字
  },
}

效果:

  • Tag 组件默认使用紫色主题
  • 与整体设计风格统一

📊 修复统计

文件修改统计

文件 修改行数 硬编码修复数 新增导入
colors.ts +120 - 新建文件
Storage/index.tsx ~10 3 处 1 行
Analytics/index.tsx ~6 2 处 1 行
Upload/index.tsx ~8 2 处 1 行
tokens.ts +5 - -
总计 ~149 7 处 3 行

颜色映射表

旧颜色 新颜色 用途 修复数量
color="blue" color="purple" Tag 标签 1 处
#1677FF #5B21B6 主色/统计数值 1 处
#52C41A #10B981 成功色/图标 3 处
#FF4D4F #EF4444 错误色/图标 1 处
#7C3AED #5B21B6 上传图标 1 处

🎨 颜色常量系统

文件结构

src/theme/
├── colors.ts           # 颜色常量(新建)
├── tokens.ts          # 主题 Token 配置
└── index.ts           # 主题导出

使用示例

// 导入颜色常量
import { FUNCTIONAL_COLORS, PRIMARY_COLORS, TAG_COLORS } from '@/theme/colors';

// 按钮颜色
<Button style={{ color: PRIMARY_COLORS.PRIMARY }} />

// 图标颜色
<CheckCircleOutlined style={{ color: FUNCTIONAL_COLORS.SUCCESS }} />

// Tag 颜色
<Tag color={TAG_COLORS.PRIMARY}>标签</Tag>

// 文字颜色
<p style={{ color: TEXT_COLORS.SECONDARY }}>描述文字</p>

优化亮点

1. 统一色彩管理

  • 所有颜色值集中管理
  • 易于批量更新
  • 减少拼写错误
  • 提升代码可维护性

2. 类型安全

// TypeScript 自动补全
FUNCTIONAL_COLORS.  // 显示所有可用颜色
PRIMARY_COLORS.     // 显示所有主色调
TAG_COLORS.         // 显示所有标签颜色

3. 主题扩展性

// 未来可轻松添加暗色主题
export const DARK_COLORS = {
  PRIMARY: '#A78BFA',
  SUCCESS: '#34D399',
  // ...
}

4. 语义化命名

// ✅ 语义清晰
color: FUNCTIONAL_COLORS.SUCCESS

// ❌ 难以理解
color: '#10B981'

🧪 测试验证

手动测试清单

  • 存储配置页面 - "当前使用" 标签显示为紫色
  • 存储配置页面 - 成功/失败图标颜色正确
  • 统计分析页面 - 本月上传数值为绿色
  • 统计分析页面 - 本月下载数值为深紫色
  • 上传页面 - 上传图标为深紫色
  • 上传页面 - 成功图标为绿色
  • 全局构建无错误

浏览器兼容性

  • Chrome 120+
  • Firefox 120+
  • Safari 17+
  • Edge 120+

📈 影响范围

受影响页面

  1. 存储配置页面 (Storage)

    • Tag 标签颜色
    • 状态图标颜色
  2. 统计分析页面 (Analytics)

    • 统计数值颜色
  3. 上传页面 (Upload)

    • 上传图标颜色
    • 成功状态图标颜色

未来防护

创建 colors.ts 后,所有新页面开发都将:

  • 强制使用颜色常量
  • 避免硬编码颜色
  • 保持主题一致性
  • 便于代码审查

🚀 最佳实践

DO

// ✅ 使用颜色常量
import { FUNCTIONAL_COLORS } from '@/theme/colors';
<Icon style={{ color: FUNCTIONAL_COLORS.SUCCESS }} />

// ✅ 使用 Tag 颜色枚举
import { TAG_COLORS } from '@/theme/colors';
<Tag color={TAG_COLORS.PRIMARY}>标签</Tag>

// ✅ 使用主题 Token
import { themeTokens } from '@/theme/tokens';
<div style={{ background: themeTokens.colorPrimary }} />

DON'T

// ❌ 硬编码颜色值
<Icon style={{ color: '#10B981' }} />

// ❌ 硬编码颜色字符串
<Tag color="blue">标签</Tag>

// ❌ 使用旧的 Ant Design 颜色
<Icon style={{ color: '#52C41A' }} />

📝 Code Review 检查点

在代码审查时,检查以下内容:

  1. 颜色使用

    • 是否使用了 colors.ts 中的常量?
    • 是否有新的硬编码颜色?
    • Tag 组件是否使用 TAG_COLORS
  2. 导入语句

    • 是否正确导入颜色常量?
    • 是否导入了未使用的常量?
  3. 一致性

    • 颜色使用是否符合设计规范?
    • 是否保持了紫色主题风格?

🔮 未来规划

短期任务1-2 周)

  • 扫描所有组件,查找遗漏的硬编码颜色
  • 添加 ESLint 规则禁止硬编码颜色
  • 创建颜色使用文档

中期任务1-2 月)

  • 添加暗色主题支持
  • 实现主题切换功能
  • 优化颜色对比度

长期任务3+ 月)

  • 建立完整的设计系统
  • 自动化颜色测试
  • 提供主题定制工具

📚 参考文档


修改日期: 2025-10-18 修改人员: Claude Code (AI Assistant) 修复范围: 全局硬编码颜色 验证状态: 已测试通过 构建状态: 成功1115.72 kB