From 8d3327e4dd59b4755870dd7d7ddcf336a86e1ac0 Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Mon, 17 Nov 2025 11:08:59 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=AF=84=E8=AE=BA?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=8D=E6=98=BE=E7=A4=BA=E4=B8=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E9=97=AE=E9=A2=98=EF=BC=88=E4=B9=90=E8=A7=82=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=98=BE=E7=A4=BA=E6=AD=A3=E7=A1=AE=EF=BC=8C=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E5=90=8E=E6=98=BE=E7=A4=BA=20Anonymous=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题描述: - 用户发表评论时,乐观更新显示用户名 "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 --- src/services/eventService.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/services/eventService.js b/src/services/eventService.js index 87c76ecd..6f577cea 100755 --- a/src/services/eventService.js +++ b/src/services/eventService.js @@ -166,7 +166,27 @@ export const eventService = { // 帖子相关API getPosts: async (eventId, sortType = 'latest', page = 1, perPage = 20) => { try { - return await apiRequest(`/api/events/${eventId}/posts?sort=${sortType}&page=${page}&per_page=${perPage}`); + const result = await apiRequest(`/api/events/${eventId}/posts?sort=${sortType}&page=${page}&per_page=${perPage}`); + + // ⚡ 数据转换:将后端的 user 字段映射为前端期望的 author 字段 + if (result.success && Array.isArray(result.data)) { + result.data = result.data.map(post => ({ + ...post, + author: post.user ? { + id: post.user.id, + username: post.user.username, + avatar: post.user.avatar_url || post.user.avatar // 兼容 avatar_url 和 avatar + } : { + id: 'anonymous', + username: 'Anonymous', + avatar: null + } + // 保留原始的 user 字段(如果其他地方需要) + // user: post.user + })); + } + + return result; } catch (error) { logger.error('eventService', 'getPosts', error, { eventId, sortType, page }); return { success: false, data: [], pagination: {} };