Files
vf_react/docs/DARK_MODE_TEST.md
zdl 09db05c448 docs: 将所有文档迁移到 docs/ 目录
- 移动42个文档文件到 docs/ 目录
  - 更新 .gitignore 允许 docs/ 下的 .md 文件
  - 删除根目录下的重复文档文件

  📁 文档分类:
  - StockDetailPanel 重构文档(3个)
  - PostHog 集成文档(6个)
  - 系统架构和API文档(33个)

  🤖 Generated with [Claude Code](https://claude.com/claude-code)

  Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 14:51:22 +08:00

7.9 KiB
Raw Blame History

🌙 暗色模式适配 - 测试指南

完成的修改

修改文件

  1. src/constants/notificationTypes.js - 添加暗色模式配置
  2. src/components/NotificationContainer/index.js - 更新颜色逻辑

新增配置

为每种通知类型添加了暗色模式专属配置:

配置项 亮色值 暗色值 说明
bg {color}.50 rgba(..., 0.15) 背景色15% 透明度
borderColor {color}.400 {color}.400 边框色:保持一致
iconColor {color}.500 {color}.300 图标色:降低饱和度
hoverBg {color}.100 rgba(..., 0.25) Hover背景25% 透明度

🧪 测试步骤

1. 启动应用

npm start

2. 切换到暗色模式

方法 A通过浏览器开发者工具

  1. 打开浏览器开发者工具F12
  2. 切换到 "渲染" 或 "Rendering" 标签
  3. 找到 "Emulate CSS media feature prefers-color-scheme"
  4. 选择 "prefers-color-scheme: dark"

方法 B系统设置

  1. 将你的操作系统切换到暗色模式
  2. 刷新页面

方法 CChakra UI Color Mode Toggle

如果你的应用有主题切换按钮,直接点击切换即可。

3. 触发通知

Mock 模式(默认):

  • 等待 60 秒,会自动推送 1-2 条通知
  • 或在控制台执行:
    import { mockSocketService } from './services/mockSocketService.js';
    mockSocketService.sendTestNotification();
    

Real 模式

  • 创建测试事件(运行后端测试脚本)

4. 验证效果

检查以下项目:

背景色

  • 半透明效果:背景应该是半透明的,能看到底层背景
  • 类型区分:蓝、橙、紫、红、绿应该清晰可辨
  • 不刺眼:不应该有过深的背景色

文字颜色

  • 主标题gray.100(浅灰,不是纯白)
  • 副文本gray.300(更淡的灰)
  • 元信息gray.500(中等灰)

图标颜色

  • 图标应该是 .300 色阶(柔和但清晰)
  • 不同类型有不同颜色

边框

  • 边框清晰可见(.400 色阶)
  • 保持类型区分

Hover 效果

  • 鼠标悬停时背景加深25% 透明度)
  • 有平滑过渡动画

🎨 视觉对比

亮色模式

┌─────────────────────────────────┐
│ 🔵 蓝色浅背景 (blue.50)          │
│    深色文字 (gray.800)           │
│    明亮图标 (blue.500)           │
│    边框清晰 (blue.400)           │
└─────────────────────────────────┘

暗色模式(修改后)

┌─────────────────────────────────┐
│ 🔵 半透明蓝背景 (15% opacity)    │
│    浅灰文字 (gray.100)           │
│    柔和图标 (blue.300)           │
│    边框可见 (blue.400)           │
└─────────────────────────────────┘

📋 各类型通知配色

公告通知(蓝色)

  • 亮色blue.50 背景
  • 暗色rgba(59, 130, 246, 0.15) 半透明蓝

股票涨(红色)

  • 亮色red.50 背景
  • 暗色rgba(239, 68, 68, 0.15) 半透明红

股票跌(绿色)

  • 亮色green.50 背景
  • 暗色rgba(34, 197, 94, 0.15) 半透明绿

事件动向(橙色)

  • 亮色orange.50 背景
  • 暗色rgba(249, 115, 22, 0.15) 半透明橙

分析报告(紫色)

  • 亮色purple.50 背景
  • 暗色rgba(168, 85, 247, 0.15) 半透明紫

🔍 在浏览器控制台测试

手动触发各类型通知

// 引入服务
import { mockSocketService } from './services/mockSocketService.js';
import { NOTIFICATION_TYPES, PRIORITY_LEVELS } from './constants/notificationTypes.js';

// 测试公告通知(蓝色)
mockSocketService.sendTestNotification({
  type: NOTIFICATION_TYPES.ANNOUNCEMENT,
  priority: PRIORITY_LEVELS.IMPORTANT,
  title: '测试公告通知',
  content: '这是暗色模式下的蓝色通知',
  timestamp: Date.now(),
  autoClose: 0,
});

// 测试股票上涨(红色)
mockSocketService.sendTestNotification({
  type: NOTIFICATION_TYPES.STOCK_ALERT,
  priority: PRIORITY_LEVELS.URGENT,
  title: '测试股票上涨',
  content: '宁德时代 +5.2%',
  extra: { priceChange: '+5.2%' },
  timestamp: Date.now(),
  autoClose: 0,
});

// 测试股票下跌(绿色)
mockSocketService.sendTestNotification({
  type: NOTIFICATION_TYPES.STOCK_ALERT,
  priority: PRIORITY_LEVELS.IMPORTANT,
  title: '测试股票下跌',
  content: '比亚迪 -3.8%',
  extra: { priceChange: '-3.8%' },
  timestamp: Date.now(),
  autoClose: 0,
});

// 测试事件动向(橙色)
mockSocketService.sendTestNotification({
  type: NOTIFICATION_TYPES.EVENT_ALERT,
  priority: PRIORITY_LEVELS.IMPORTANT,
  title: '测试事件动向',
  content: '央行宣布降准',
  timestamp: Date.now(),
  autoClose: 0,
});

// 测试分析报告(紫色)
mockSocketService.sendTestNotification({
  type: NOTIFICATION_TYPES.ANALYSIS_REPORT,
  priority: PRIORITY_LEVELS.NORMAL,
  title: '测试分析报告',
  content: '医药行业深度报告',
  timestamp: Date.now(),
  autoClose: 0,
});

🐛 常见问题

Q: 暗色模式下还是很深?

A: 检查配置是否正确应用:

  1. 清除浏览器缓存并刷新
  2. 确认 notificationTypes.js 包含 darkBg 等配置
  3. 在控制台查看元素的实际 background

Q: 不同类型看起来都一样?

A: 确认:

  1. 透明度配置是否生效(应该看到半透明效果)
  2. 不同类型的 RGB 值是否不同
  3. 浏览器是否支持 rgba() 颜色

Q: 文字看不清?

A: 调整文字颜色:

  • 主标题:gray.100(可调整为 gray.50white
  • 如果背景太淡可以增加透明度15% → 20%

Q: 如何微调透明度?

A:notificationTypes.js 中修改 rgba() 的第 4 个参数:

darkBg: 'rgba(59, 130, 246, 0.20)',  // 从 0.15 改为 0.20

🎯 预期效果截图对比

亮色模式下的通知

  • 背景明亮(.50 色阶)
  • 文字深色gray.800
  • 图标鲜艳(.500 色阶)

暗色模式下的通知

  • 背景半透明15% 透明度)
  • 文字浅色gray.100
  • 图标柔和(.300 色阶)
  • 保持类型区分度

📊 技术参数

透明度参数

状态 透明度 说明
默认 15% 背景色
Hover 25% 鼠标悬停

色阶选择

元素 亮色 暗色 原因
背景 .50 rgba 15% 保持通透感
边框 .400 .400 确保可见
图标 .500 .300 降低饱和度
文字 .800 .100 保持对比度

测试检查清单

  • 亮色模式下通知正常显示
  • 暗色模式下通知半透明效果
  • 5 种类型(蓝、红、绿、橙、紫)区分清晰
  • 文字在暗色背景上可读性良好
  • 图标颜色柔和但醒目
  • Hover 效果明显
  • 边框清晰可见
  • 亮色/暗色切换平滑

🚀 如果需要调整

如果效果不满意,可以调整以下参数:

调整透明度(notificationTypes.js

// 增加对比度(背景更明显)
darkBg: 'rgba(59, 130, 246, 0.25)',  // 15% → 25%

// 减少对比度(更柔和)
darkBg: 'rgba(59, 130, 246, 0.10)',  // 15% → 10%

调整文字颜色(NotificationContainer/index.js

// 更亮的文字
const textColor = useColorModeValue('gray.800', 'gray.50');  // gray.100 → gray.50

// 更柔和的文字
const textColor = useColorModeValue('gray.800', 'gray.200');  // gray.100 → gray.200

测试完成后,请反馈效果! 🎉