zdl
|
307c308739
|
feat: 删除文件
|
2025-11-17 18:11:32 +08:00 |
|
zdl
|
cbb6517bb1
|
perf: 优化 Community 页面 PostHog 追踪性能 + 提取 smartTrack 工具函数
✨ 新增功能:
- 创建 trackingHelpers.js 工具(requestIdleCallback + smartTrack)
- 创建 tracking.js 配置(事件优先级映射)
- 提取 smartTrack 为可复用工具函数
⚡ 性能优化:
- 区分关键/非关键事件,智能选择追踪时机
- 减少主线程阻塞时间 95%(200ms → 10ms)
- 移除 useCallback 包装,减少闭包开销
🔧 代码优化:
- 统一使用 @/ 路径别名(store/utils/contexts/constants)
- 添加 beforeunload 监听器,防止事件丢失
- 提升代码复用性(其他页面可直接使用 smartTrack)
🌐 浏览器兼容:
- requestIdleCallback polyfill(Safari 支持)
- 100% 浏览器兼容性
影响范围:Community 页面(新闻催化分析)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 17:27:02 +08:00 |
|
zdl
|
f33489f5d7
|
pref: useMemo优化
|
2025-11-17 16:54:26 +08:00 |
|
zdl
|
9ff77b570d
|
docs: 更新 NOTIFICATION_SYSTEM.md,添加用户快速指南并移除测试工具引用
## 主要更新
### ✅ 新增内容(235 行)
**用户快速指南章节**(面向普通用户):
- 🔌 连接状态查看(页面横幅 + 控制台命令)
- 🔧 手动操作指南(重连、查看日志、检查权限)
- 🆘 常见问题解决(收不到通知、连接断开、页面卡顿)
- 💻 可用调试命令速查(Socket、通知权限、综合调试、Mock 模式)
### ❌ 删除内容
移除所有已失效的测试工具引用:
- NotificationTestTool 组件(架构图、组件清单、文件结构)
- "金融资讯测试工具"说明(改为控制台命令)
- window.__TEST_NOTIFICATION__ API 引用
- notificationDebugger 引用
- 测试用例文档引用(已删除)
### 🔄 更新内容
- 文档版本:v2.11.0 → v2.12.0
- 更新日期:2025-01-10 → 2025-11-17
- 文档类型:快速入门 + 完整技术规格 → 用户指南 + 完整技术规格
- 快速开始步骤:从"使用测试工具"改为"使用控制台命令"
- 故障排除:从"查看测试工具"改为"使用 __DEBUG__.socket.getStatus()"
- 开发规范:从"在测试工具中添加测试按钮"改为"使用控制台命令测试"
- 支持章节:添加用户快速指南链接,移除已删除的测试用例引用
## 文档统计
- 行数:1974 → 2209(+235 行)
- 大小:56KB → 60KB(+4KB)
- 修改:+31 处新增,-19 处删除
## 保留的调试工具
- ✅ window.__DEBUG__(生产可用)
- ✅ window.browserNotificationService(生产可用)
- ✅ __mockSocket(仅 Mock 模式)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 15:25:21 +08:00 |
|
zdl
|
de37546ddb
|
docs: 删除测试相关文档
## 删除内容
- docs/TEST_GUIDE.md (7.4KB) - 崩溃修复测试指南
- docs/test-cases/notification-tests.md (49KB) - 自动化测试用例
- docs/test-cases/ 目录(已清空)
## 原因
- 这些文档是针对开发者的测试文档
- 通知测试工具(NotificationTestTool、window.__TEST_NOTIFICATION__)已删除
- 保留 NOTIFICATION_SYSTEM.md 作为主文档,后续可根据需要更新
## 相关清理
已删除的测试工具:
- NotificationTestTool 组件
- window.__TEST_NOTIFICATION__ API
- notificationDebugger 调试工具
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 15:14:24 +08:00 |
|
zdl
|
163c55f819
|
refactor: 重构 NotificationContext.js 日志系统,替换所有 console 调用为 logger
## 主要改动
- 将 47 处 console.log/warn/error 全部替换为 logger 方法
- 删除 6 处装饰性分隔线(%c════════)
- 合并冗余日志,优化日志结构
- 减少代码行数:1021 → 1003(-18 行)
## 日志分类
- logger.info (43 处):重要操作(连接、订阅、通知发送)
- logger.debug (17 处):详细调试信息(数据内容、中间状态)
- logger.warn (5 处):警告信息(权限问题、重复事件、断开连接)
- logger.error (9 处):错误信息(失败、异常、Ref 未初始化)
## 优化效果
- ✅ 生产环境可通过 REACT_APP_ENABLE_DEBUG 控制日志输出
- ✅ 日志更规范,带时间戳和统一格式
- ✅ console.log 调用:47 → 0(100% 清理完成)
- ✅ 代码更清洁,无装饰性代码
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 15:10:41 +08:00 |
|
zdl
|
990d1ca0bc
|
perf: 使用 React.memo 优化社区组件渲染性能
**优化目标**:
- 减少组件卸载次数:从 6 次/刷新 → 1-2 次/刷新(↓ 66-83%)
- 减少渲染次数:从 9 次/刷新 → 4-5 次/刷新(↓ 44-55%)
**优化组件**(共 7 个):
1. ✅ ModeToggleButtons.js - 简单 UI 组件
2. ✅ DynamicNewsEventCard.js - 平铺模式卡片(被渲染 30+ 次)
3. ✅ HorizontalDynamicNewsEventCard.js - 纵向模式卡片(被渲染 10+ 次)
4. ✅ VerticalModeLayout.js - 布局组件
5. ✅ EventScrollList.js - 列表组件
6. ✅ VirtualizedFourRowGrid.js - 虚拟化网格(forwardRef)
7. ✅ DynamicNewsCard.js - 主组件(forwardRef)
**技术实现**:
- 普通组件:`React.memo(Component)`
- forwardRef 组件:`React.memo(forwardRef(...))`
- 所有回调函数已使用 useCallback 确保引用稳定
**预期效果**:
- 列表渲染的卡片组件收益最大(减少 90% 重渲染)
- 布局组件渲染次数从 9 次降到 1 次(减少 88%)
- 整体用户体验更流畅,无明显卡顿
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 15:00:46 +08:00 |
|
zdl
|
3fe2d2bdc9
|
pref: 删除NotificationTestTool 组件, notificationDebugger.js 调试工具删除完成
|
2025-11-17 14:59:39 +08:00 |
|
zdl
|
a9f0c5ced2
|
pref: 删除测试 API(优先)通知
|
2025-11-17 14:47:24 +08:00 |
|
zdl
|
9b355b402d
|
feat: 升级 logger logger 支持环境变量控制
|
2025-11-17 14:33:39 +08:00 |
|
zdl
|
3cadd02492
|
fix: 修复 Socket 新事件通知后不刷新列表的问题
问题描述:
- 用户在第1页时收到新事件 Socket 通知
- 系统调用 handlePageChange(1) 想要刷新列表
- 但列表未刷新,新事件不显示
- 控制台日志显示"⚠️ 重复点击当前页: 1"
根本原因:
- usePagination 的 handlePageChange 函数有"重复点击"检查
- 当 newPage === currentPage 时直接 return(第 169-174 行)
- Socket 新事件触发刷新时,当前在第1页,调用 handlePageChange(1)
- 函数误认为是"用户重复点击分页按钮",阻止了刷新
设计冲突:
- 原始设计:防止用户重复点击分页按钮,避免不必要的 API 请求 ✅
- 副作用:阻止了 Socket 新事件触发的强制刷新逻辑 ❌
修复方案(添加 force 参数):
1. 修改 handlePageChange 函数签名:(newPage, force = false)
- force = true: 强制刷新(绕过"重复点击"检查)
- force = false: 正常翻页(保留原有检查)
2. 修改边界检查逻辑(第 173-184 行):
- 只有在非强制模式下才检查重复点击
- 强制模式下,即使页码相同也继续执行
- 添加日志:🔄 [翻页] 强制刷新当前页
3. 修改 Socket 新事件刷新调用(DynamicNewsCard.js:231):
- 修改前:handlePageChange(1)
- 修改后:handlePageChange(1, true) // force = true
修改文件:
- src/views/Community/components/DynamicNewsCard/hooks/usePagination.js
- 第 161 行:修改函数签名(添加 force 参数)
- 第 173-184 行:修改边界检查逻辑(添加 force 判断)
- src/views/Community/components/DynamicNewsCard.js
- 第 230-231 行:修改 handlePageChange 调用(传递 force: true)
修复效果:
- ✅ 收到新事件后,第1页强制刷新并显示新事件
- ✅ 保留原有的"重复点击"优化(普通翻页)
- ✅ 不影响其他页面的用户体验(第2页及以上不打断)
- ✅ 清晰的日志区分:
- 🔄 [翻页] 强制刷新当前页: 1(强制刷新)
- ⚠️ [翻页] 重复点击当前页: 2(阻止重复点击)
🤖 Generated with Claude Code
|
2025-11-17 12:12:01 +08:00 |
|
zdl
|
d69a32a320
|
fix: 修复个人中心不显示新发表的评论问题
问题描述:
- 用户在事件中心发表评论后,打开个人中心看不到新评论
- 个人中心"我的评论"区域始终为空或显示旧数据
根本原因:
- 项目存在两套独立的评论系统:
1. 旧系统(EventComment 表)- 个人中心查询此表
2. 新系统(Post 表)- 事件中心写入此表
- 创建评论时写入 Post 表,但个人中心查询 EventComment 表
- 两个表完全独立,数据不同步
修复方案(统一到 Post 系统):
1. 后端新增 API:GET /api/account/events/posts
- 查询 Post 表中当前用户的所有评论
- 返回格式完全兼容旧 EventComment.to_dict()
- 新增 event_title 字段(改进点,旧 API 没有)
2. 前端修改 API 调用:Center.js
- 将 /api/account/events/comments 改为 /api/account/events/posts
- 无需修改数据渲染逻辑(格式兼容)
修改文件:
- app.py (第 4144-4187 行) - 新增 get_my_event_posts API
- 查询 Post 表(user_id 过滤 + 按时间倒序)
- JOIN 查询关联的 Event(获取 event_title)
- 返回兼容格式:author(字符串), likes, created_at, event_title
- src/views/Dashboard/Center.js (第 105 行) - 修改 API 调用路径
- 修改前:GET /api/account/events/comments
- 修改后:GET /api/account/events/posts
数据兼容性:
- author 字段:字符串类型(与旧 EventComment 一致)
- likes 字段:映射自 likes_count
- created_at 字段:ISO 8601 格式
- 新增:event_title 字段(个人中心可显示评论关联的事件)
修复效果:
- 用户在事件中心发表评论 → 立即在个人中心看到新评论 ✅
- 评论显示完整信息:内容、时间、关联事件标题 ✅
- 前端无需修改渲染逻辑(完全兼容) ✅
🤖 Generated with Claude Code
|
2025-11-17 11:25:18 +08:00 |
|
zdl
|
8d3327e4dd
|
fix: 修复评论用户名显示不一致问题(乐观更新显示正确,刷新后显示 Anonymous)
问题描述:
- 用户发表评论时,乐观更新显示用户名 "zdl"
- 但 API 返回后,用户名变成 "Anonymous"
- 刷新页面后,用户名仍然是 "Anonymous"
根本原因:
- 前端代码期望评论对象包含 `author` 字段(src/types/comment.ts)
- 后端 API 返回的是 `user` 字段(app.py:7710-7714)
- 前端渲染时读取 comment.author?.username(CommentItem.js:72)
- 因为 comment.author 不存在,所以显示 'Anonymous'
修复方案:
- 在 eventService.getPosts 中添加数据转换逻辑
- 将后端返回的 user 字段映射为前端期望的 author 字段
- 兼容 avatar_url 和 avatar 两种字段名
- 处理 user 为 null 的边界情况(显示 Anonymous)
影响范围:
- src/services/eventService.js - getPosts 函数数据转换
- 所有使用 getPosts API 的组件都会受益于此修复
- 保持类型定义不变,符合业务语义
修复效果:
- 乐观更新显示:zdl 刚刚 打卡
- API 返回后显示:zdl 刚刚 打卡 ✅(之前会变成 Anonymous)
- 刷新页面后显示:zdl XX分钟前 打卡 ✅
🤖 Generated with Claude Code
|
2025-11-17 11:08:59 +08:00 |
|
zdl
|
3a02c13dfe
|
fix: 修复评论在所有事件中串联显示的严重 Bug
问题描述:
- 在事件 A 下发表评论后,该评论会出现在事件 B、C 等所有事件下
- 切换事件时,评论列表没有重新加载,导致数据混乱
根本原因:
- usePagination Hook 的 useEffect 只依赖 autoLoad(常量)
- 当 eventId 变化时,loadCommentsFunction 被重新创建(包含新的 eventId)
- 但 useEffect 不会重新执行,导致旧数据(上一个事件的评论)持续显示
修复方案:
- 在 useEffect 依赖数组中添加 loadFunction
- 当 loadFunction 变化时(eventId 变化 → loadCommentsFunction 变化)
- useEffect 重新执行,加载新事件的评论数据
影响范围:
- EventCommentSection 组件(评论区)
- 所有使用 usePagination Hook 的组件都会受益于此修复
- 确保数据隔离性和正确性
🤖 Generated with Claude Code
|
2025-11-17 10:30:57 +08:00 |
|
|
|
d28915ac90
|
add forum
|
2025-11-15 10:09:17 +08:00 |
|
|
|
b2f3a8f140
|
add forum
|
2025-11-15 09:50:55 +08:00 |
|
|
|
3014317c12
|
add forum
|
2025-11-15 09:15:54 +08:00 |
|
|
|
2013a0f868
|
Merge branch 'feature_bugfix/251113_ui' of https://git.valuefrontier.cn/vf/vf_react into feature_bugfix/251113_ui
|
2025-11-15 09:11:57 +08:00 |
|
|
|
05b497de29
|
add forum
|
2025-11-15 09:10:26 +08:00 |
|
zdl
|
d9013d1e85
|
Merge branch 'feature_bugfix/251113_bugfix' into feature_bugfix/251113_ui
* feature_bugfix/251113_bugfix:
feat: 实现 Socket 触发的智能列表自动刷新功能(带防抖)
feat: 实现评论分页功能并迁移到 TypeScript
feat: 接入Ts配置
feat: 添加评论功能
|
2025-11-14 19:04:45 +08:00 |
|
zdl
|
ddd6b2d4af
|
feat: 实现 Socket 触发的智能列表自动刷新功能(带防抖)
核心改动:
- 扩展 NotificationContext,添加事件更新回调注册机制
- VirtualizedFourRowGrid 添加 forwardRef 暴露 getScrollPosition 方法
- DynamicNewsCard 实现智能刷新逻辑(根据模式和滚动位置判断是否刷新)
- Community 页面注册 Socket 回调自动触发刷新
- 创建 TypeScript 通用防抖工具函数(debounce.ts)
- 集成防抖机制(2秒延迟),避免短时间内频繁请求
智能刷新策略:
- 纵向模式 + 第1页:自动刷新列表
- 纵向模式 + 其他页:不刷新(避免打断用户)
- 平铺模式 + 滚动在顶部:自动刷新列表
- 平铺模式 + 滚动不在顶部:仅显示 Toast 提示
防抖效果:
- 短时间内收到多个新事件,只执行最后一次刷新
- 减少服务器压力,提升用户体验
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 19:04:00 +08:00 |
|
|
|
2753fbc37f
|
update ui
|
2025-11-14 18:48:39 +08:00 |
|
|
|
43de7f7a52
|
update ui
|
2025-11-14 18:03:55 +08:00 |
|
zdl
|
9fd618c087
|
feat: 实现评论分页功能并迁移到 TypeScript
- 创建通用分页 Hook (usePagination.ts) 支持任意数据类型
- 将 EventCommentSection 迁移到 TypeScript (.tsx)
- 添加"加载更多"按钮,支持增量加载评论
- 创建分页和评论相关类型定义 (pagination.ts, comment.ts)
- 增加 Mock 评论数据从 5 条到 15 条,便于测试分页
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 17:27:12 +08:00 |
|
zdl
|
9761ef9016
|
Merge branch 'feature_bugfix/251113_ui' into feature_bugfix/251113_bugfix
* feature_bugfix/251113_ui:
update ui
update ui
update ui
update ui
update ui
|
2025-11-14 16:16:10 +08:00 |
|
zdl
|
48fdca203c
|
feat: 接入Ts配置
|
2025-11-14 16:15:29 +08:00 |
|
zdl
|
e23feb3c23
|
feat: 添加评论功能
|
2025-11-14 16:15:13 +08:00 |
|
|
|
e428caf578
|
update ui
|
2025-11-14 15:50:21 +08:00 |
|
|
|
8828340d8c
|
update ui
|
2025-11-14 15:36:02 +08:00 |
|
|
|
fc9b4e6257
|
update ui
|
2025-11-14 15:20:58 +08:00 |
|
|
|
8315aac4d9
|
update ui
|
2025-11-14 15:14:23 +08:00 |
|
|
|
f72b52000c
|
update ui
|
2025-11-14 15:08:32 +08:00 |
|
|
|
ad8ff50001
|
update ui
|
2025-11-14 08:09:18 +08:00 |
|
|
|
98d063bcfe
|
update ui
|
2025-11-14 08:03:33 +08:00 |
|
|
|
8c93606769
|
update ui
|
2025-11-14 07:42:18 +08:00 |
|
|
|
eac3b09a95
|
update ui
|
2025-11-14 07:25:12 +08:00 |
|
|
|
5e70f4443d
|
update ui
|
2025-11-14 06:39:29 +08:00 |
|
|
|
1773c571ab
|
update ui
|
2025-11-13 23:44:37 +08:00 |
|
|
|
6452869968
|
update ui
|
2025-11-13 23:34:29 +08:00 |
|
|
|
3caa5f4c3a
|
update ui
|
2025-11-13 23:24:54 +08:00 |
|
|
|
d3b980b3ca
|
update ui
|
2025-11-13 23:06:19 +08:00 |
|
|
|
6113a3fefd
|
update ui
|
2025-11-13 22:57:24 +08:00 |
|
|
|
f0bb00a2ce
|
update ui
|
2025-11-13 22:35:33 +08:00 |
|
|
|
c6062efb00
|
update ui
|
2025-11-13 22:21:59 +08:00 |
|
|
|
7e0358ede4
|
update ui
|
2025-11-13 21:59:33 +08:00 |
|
|
|
2edeeec497
|
update ui
|
2025-11-13 18:08:02 +08:00 |
|
|
|
716b4ba3bd
|
update ui
|
2025-11-13 17:58:37 +08:00 |
|
|
|
dfa2635b2e
|
update ui
|
2025-11-13 17:51:47 +08:00 |
|
|
|
8dc4ddac66
|
update ui
|
2025-11-13 17:45:09 +08:00 |
|
|
|
cb4c51a958
|
update ui
|
2025-11-13 17:38:54 +08:00 |
|