Commit Graph

1322 Commits

Author SHA1 Message Date
zdl
4f9233ed14 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
00bba422ca 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
41fa6e08b3 add forum 2025-11-15 10:09:17 +08:00
7297ffa84b add forum 2025-11-15 09:50:55 +08:00
b88c5a4d6c 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
0ae5618ef9 add forum 2025-11-15 09:10:26 +08:00
zdl
d1a0368eac 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
e4d9bc4124 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
3ea93ea4cb update ui 2025-11-14 18:48:39 +08:00
zdl
79308cec48 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
fe11bd9e6a 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
6ed654aba0 feat: 接入Ts配置 2025-11-14 16:15:29 +08:00
zdl
f44c5d37ed feat: 添加评论功能 2025-11-14 16:15:13 +08:00
ba193db5aa update ui 2025-11-14 15:50:21 +08:00
d0f8832e9a update ui 2025-11-14 08:09:18 +08:00
f6cb370faa update ui 2025-11-14 08:03:33 +08:00
e635fd0309 update ui 2025-11-14 07:42:18 +08:00
c412aeceee update ui 2025-11-14 07:25:12 +08:00
6ddcbf80d7 update ui 2025-11-14 06:39:29 +08:00
3d558a7e49 update ui 2025-11-13 23:44:37 +08:00
15481f9466 update ui 2025-11-13 23:34:29 +08:00
17a7dfa415 update ui 2025-11-13 23:24:54 +08:00
1200e1a3cf update ui 2025-11-13 23:06:19 +08:00
08b2c5e0cf update ui 2025-11-13 22:57:24 +08:00
bd9c860746 update ui 2025-11-13 22:35:33 +08:00
316eb5f172 update ui 2025-11-13 22:21:59 +08:00
5d26b72539 update ui 2025-11-13 21:59:33 +08:00
64906fabaa update ui 2025-11-13 18:08:02 +08:00
8eab6021a0 update ui 2025-11-13 17:58:37 +08:00
0c5bd1257d update ui 2025-11-13 17:51:47 +08:00
5b1d1e5af4 update ui 2025-11-13 17:45:09 +08:00
fb799d6bcc update ui 2025-11-13 17:38:54 +08:00
71076a951e update ui 2025-11-13 17:31:06 +08:00
9b836e2059 update ui 2025-11-13 17:18:33 +08:00
c409ea3648 update ui 2025-11-13 16:51:35 +08:00
d9a2a104b4 update ui 2025-11-13 16:34:34 +08:00
a7c3457e1d update ui 2025-11-13 16:17:32 +08:00
d47bdbee25 update ui 2025-11-13 16:07:14 +08:00
zdl
8613312467 feat: 修改配置 2025-11-13 00:19:58 +08:00
zdl
70fd3bd817 feat: 参数调整 2025-11-12 14:27:32 +08:00
zdl
06e1f22a3f feat:修复了图片 404 错误 2025-11-12 13:51:07 +08:00
zdl
0dd402ff4d feat: 调整链接 2025-11-12 13:41:33 +08:00
zdl
3c92082ea4 fix(bytedesk): 修复路径配置,统一使用 /bytedesk/ 前缀
修复 Bytedesk 客服系统路径不匹配问题,统一前端、CRACO 和 Nginx 配置。

## 问题
- 前端配置使用 `/bytedesk-api/` 路径
- 生产 Nginx 配置使用 `/bytedesk/` 路径
- 路径不匹配导致请求 404 或被 React Router 拦截

## 解决方案
统一使用 `/bytedesk/` 路径前缀,避免 React Router 冲突

## 代码变更

### src/bytedesk-integration/config/bytedesk.config.js
- `htmlUrl`: `/bytedesk-api/chat/` → `/bytedesk/chat/`
- `apiUrl`: `/bytedesk-api/` → `/bytedesk/`
- 更新配置注释,说明代理架构

### craco.config.js
- 代理前缀:`/bytedesk-api` → `/bytedesk`
- 删除冗余代理:`/chat` 和 `/config`(Nginx 统一处理)
- 简化配置,减少代理规则数量

## 请求链路
```
浏览器 → /bytedesk/chat/
    ↓
CRACO/Nginx → location /bytedesk/ {}
    ↓
代理转发 → http://43.143.189.195/chat/ Bytedesk 聊天窗口
```

## 优势
-  前端、CRACO、Nginx 路径统一
-  避免 React Router 冲突
-  简化代理配置
-  无需修改服务器 Nginx

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 13:30:39 +08:00
zdl
a1aea39029 feat: 切换iframe域名 2025-11-12 13:16:11 +08:00
zdl
2b76a93083 feat: 调整配置 2025-11-12 11:54:18 +08:00
zdl
c5f1ded56d feat: 修改 bytedesk.config.js,改为使用相对路径和动态域名 2025-11-12 11:26:05 +08:00
zdl
c0c5bd574d feat: 调整环境配置 2025-11-12 11:03:37 +08:00
zdl
d344c0d90b feat: 配置调整 2025-11-12 10:43:06 +08:00
zdl
ad75a21517 feat: 添加UI 2025-11-11 22:47:27 +08:00
zdl
ee37efb8df fix(community): 修复 React Hooks 顺序错误
将 Alert 组件中的 useColorModeValue Hook 调用提取到组件顶层,
避免在条件渲染中调用 Hook 导致的顺序变化问题。

## 问题
- useColorModeValue 在 showNotificationBanner 条件渲染内部调用
- 当条件状态变化时,Hooks 调用顺序发生改变
- 触发 React 警告:Hooks 顺序改变(第 75 个 Hook 从 undefined 变为 useContext)

## 解决方案
- 将 alertBgColor 和 alertBorderColor 提取到组件顶层
- 确保所有 Hooks 在每次渲染时以相同顺序调用
- 符合 React Hooks 规则:只在顶层调用 Hooks

## 变更文件
src/views/Community/index.js:
- 新增 alertBgColor 常量(第 47 行)
- 新增 alertBorderColor 常量(第 48 行)
- Alert 组件使用变量替代直接调用 Hook

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 20:20:57 +08:00