From d69a32a3202a6bb7cf61a2f4990512c9db8d7ed5 Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Mon, 17 Nov 2025 11:25:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E4=B8=8D=E6=98=BE=E7=A4=BA=E6=96=B0=E5=8F=91?= =?UTF-8?q?=E8=A1=A8=E7=9A=84=E8=AF=84=E8=AE=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题描述: - 用户在事件中心发表评论后,打开个人中心看不到新评论 - 个人中心"我的评论"区域始终为空或显示旧数据 根本原因: - 项目存在两套独立的评论系统: 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 --- app.py | 46 +++++++++++++++++++++++++++++++++++ src/views/Dashboard/Center.js | 2 +- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index 7e259031..39c37f34 100755 --- a/app.py +++ b/app.py @@ -4141,6 +4141,52 @@ def get_my_event_comments(): return jsonify({'success': True, 'data': [c.to_dict() for c in comments]}) +@app.route('/api/account/events/posts', methods=['GET']) +def get_my_event_posts(): + """获取我在事件上的帖子(Post)- 用于个人中心显示""" + if 'user_id' not in session: + return jsonify({'success': False, 'error': '未登录'}), 401 + + try: + # 查询当前用户的所有 Post(按创建时间倒序) + posts = Post.query.filter_by( + user_id=session['user_id'], + status='active' + ).order_by(Post.created_at.desc()).limit(100).all() + + posts_data = [] + for post in posts: + # 获取关联的事件信息 + event = Event.query.get(post.event_id) + event_title = event.title if event else '未知事件' + + # 获取用户信息 + user = User.query.get(post.user_id) + author = user.username if user else '匿名用户' + + # ⚡ 返回格式兼容旧 EventComment.to_dict() + posts_data.append({ + 'id': post.id, + 'event_id': post.event_id, + 'event_title': event_title, # ⚡ 新增字段(旧 API 没有) + 'user_id': post.user_id, + 'author': author, # ⚡ 兼容旧格式(字符串类型) + 'content': post.content, + 'title': post.title, # Post 独有字段(可选) + 'content_type': post.content_type, # Post 独有字段 + 'likes': post.likes_count, # ⚡ 兼容旧字段名 + 'created_at': post.created_at.isoformat(), + 'updated_at': post.updated_at.isoformat(), + 'status': post.status, + }) + + return jsonify({'success': True, 'data': posts_data}) + + except Exception as e: + print(f"获取用户帖子失败: {e}") + return jsonify({'success': False, 'error': '获取帖子失败'}), 500 + + @app.route('/api/account/future-events/following', methods=['GET']) def get_my_following_future_events(): """获取当前用户关注的未来事件""" diff --git a/src/views/Dashboard/Center.js b/src/views/Dashboard/Center.js index e425982d..cc81bc3b 100644 --- a/src/views/Dashboard/Center.js +++ b/src/views/Dashboard/Center.js @@ -102,7 +102,7 @@ export default function CenterDashboard() { const [w, e, c] = await Promise.all([ fetch(base + `/api/account/watchlist?_=${ts}`, { credentials: 'include', cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } }), fetch(base + `/api/account/events/following?_=${ts}`, { credentials: 'include', cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } }), - fetch(base + `/api/account/events/comments?_=${ts}`, { credentials: 'include', cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } }), + fetch(base + `/api/account/events/posts?_=${ts}`, { credentials: 'include', cache: 'no-store', headers: { 'Cache-Control': 'no-cache' } }), ]); const jw = await w.json(); const je = await e.json();