diff --git a/Merge/back_wzy/routes/posts.py b/Merge/back_wzy/routes/posts.py
index e01bdd8..14ff64c 100644
--- a/Merge/back_wzy/routes/posts.py
+++ b/Merge/back_wzy/routes/posts.py
@@ -1,4 +1,5 @@
 # routes/posts.py
+
 from flask import Blueprint, request, jsonify, abort
 from extensions    import db
 from models.post   import Post
@@ -16,10 +17,24 @@
 
 @posts_bp.route('', methods=['GET'])
 def list_posts():
-    posts = Post.query.filter_by(status='published').all()
+    """
+    获取帖子列表，支持：
+      - GET /posts              返回所有已发布帖子
+      - GET /posts?user_id=123  返回指定用户 user_id 的所有帖子
+    """
+    user_id = request.args.get('user_id', type=int)
+    query = Post.query
+    if user_id is not None:
+        query = query.filter_by(user_id=user_id)
+    else:
+        query = query.filter_by(status='published')
+
+    posts = query.all()
+
     return jsonify([{
         'id': p.id,
         'title': p.title,
+        'status': p.status,                     # 新增 status 字段
         'heat': p.heat,
         'created_at': p.created_at.isoformat()
     } for p in posts])
@@ -30,6 +45,7 @@
     return jsonify({
         'id': post.id,
         'user_id': post.user_id,
+        'topic_id': post.topic_id,
         'title': post.title,
         'content': post.content,
         'media_urls': post.media_urls,
@@ -42,20 +58,11 @@
 @posts_bp.route('/<int:post_id>', methods=['PUT'])
 def update_post(post_id):
     """
-    修改帖子
-    URL 参数：
-      post_id - 要修改的帖子 ID
-    JSON Body 可选字段：
-      title       (string)
-      content     (string)
-      topic_id    (int)     — 必须是 topics 表中已有的 ID
-      media_urls  (list)    — 字符串数组
-      status      (string)  — 'draft','pending','published','deleted','rejected'
+    修改帖子字段（可选字段：title, content, topic_id, media_urls, status）
     """
     post = Post.query.get_or_404(post_id)
     data = request.get_json() or {}
-    # 只更新客户端传来的字段
-    for key in ('title','content','topic_id','media_urls','status'):
+    for key in ('title', 'content', 'topic_id', 'media_urls', 'status'):
         if key in data:
             setattr(post, key, data[key])
     db.session.commit()
@@ -68,7 +75,6 @@
     db.session.commit()
     return '', 204
 
-
 @posts_bp.route('/<int:post_id>/<action>', methods=['POST'])
 def post_action(post_id, action):
     """
@@ -104,8 +110,6 @@
     db.session.commit()
     return '', 201
 
-
-# 取消点赞
 @posts_bp.route('/<int:post_id>/like', methods=['DELETE'])
 def unlike(post_id):
     user_id = request.get_json(silent=True) and request.get_json().get('user_id')
@@ -127,7 +131,6 @@
     db.session.commit()
     return '', 204
 
-# 取消收藏
 @posts_bp.route('/<int:post_id>/favorite', methods=['DELETE'])
 def unfavorite(post_id):
     user_id = request.get_json(silent=True) and request.get_json().get('user_id')
