增加异步加载图片功能

Change-Id: I36f2473c83926f759c8298d7d70d6809b9685644
diff --git a/Merge/back_rhj/app/user_post_graph.txt b/Merge/back_rhj/app/user_post_graph.txt
index 23da7af..f8ef7df 100644
--- a/Merge/back_rhj/app/user_post_graph.txt
+++ b/Merge/back_rhj/app/user_post_graph.txt
@@ -1,11 +1,12 @@
-0	0 0 1 1 0 1 0 41 31 61 51 11 21	1749827292 1749953091 1749953091 1749953480 1749953480 1749954059 1749954059 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	1 1 2 2 1 2 1 5 2 2 1 5 1
-1	1 42 32 52 0 4 12 22	1749827292 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	5 1 5 2 2 5 1 2
-2	6 5 6 5 43 33 53 1 13 23	1749953091 1749953091 1749953480 1749953480 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	2 1 2 1 2 1 5 5 2 5
-3	2 2 0 44 34 54 14 24	1749953091 1749953480 1749954059 1749955282 1749955282 1749955282 1749955282 1749955282	2 2 2 5 2 1 5 1
-4	1 45 35 55 15 5 25	1749954059 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	5 1 5 2 1 5 2
-5	36 46 56 2 6 16 26	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	1 2 5 5 1 2 5
-6	37 47 57 7 17 27	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	2 5 1 2 5 1
-7	38 48 58 3 8 18 28	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	5 1 2 2 5 1 2
-8	39 49 59 9 19 29	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	1 2 5 1 2 5
-9	40 50 60 10 30 20	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	2 5 1 2 1 5
+0	0 0 1 1 0 1 0 11	1749827292 1749953091 1749953091 1749953480 1749953480 1749954059 1749954059 1749955282	1 1 2 2 1 2 1 5
+1	1 4 0 12	1749827292 1749955282 1749955282 1749955282	5 5 2 1
+2	6 5 6 5 13 1 0 0 1 1 2	1749953091 1749953091 1749953480 1749953480 1749955282 1749955282 1750372189 1750372215 1750372231 1750372241 1750372258	2 1 2 1 2 5 3 2 3 2 2
+3	2 2 0	1749953091 1749953480 1749954059	2 2 2
+4	1 5	1749954059 1749955282	5 5
+5	2 6	1749955282 1749955282	5 1
+6	7	1749955282	2
+7	3 8	1749955282 1749955282	2 5
+8	9	1749955282	1
+9	10	1749955282	2
 10	12	1749894174	5
+11	1 4 7 0 2 13 4 11	1750372862 1750372873 1750373008 1750373592 1750373596 1750374164 1750374867 1750374871	3 3 3 2 2 2 2 2
diff --git a/WZY/xhs_front/src/components/HomeFeed.jsx b/WZY/xhs_front/src/components/HomeFeed.jsx
index d906e33..382c942 100644
--- a/WZY/xhs_front/src/components/HomeFeed.jsx
+++ b/WZY/xhs_front/src/components/HomeFeed.jsx
@@ -20,24 +20,50 @@
     async function loadPosts() {
       try {
         const list = await fetchPosts()  // [{id, title, heat, created_at}, …]
-        // 为了拿到 media_urls 和 user_id,这里再拉详情
-        const detailed = await Promise.all(
-          list.map(async p => {
-            const d = await fetchPost(p.id)
-            return {
-              id:     d.id,
-              title:  d.title,
-              author: `作者 ${d.user_id}`,
-              avatar: `https://i.pravatar.cc/40?img=${d.user_id}`,
-              img:    d.media_urls?.[0] || '', // 用第一张媒体作为封面
-              likes:  d.heat
-            }
-          })
-        )
-        setItems(detailed)
+        
+        // 第一轮:立即展示基础信息
+        const basicItems = list.map(p => ({
+          id:     p.id,
+          title:  p.title,
+          author: `作者 ${p.user_id || 'unknown'}`,
+          avatar: `https://i.pravatar.cc/40?img=${p.user_id || 1}`,
+          img:    '', // 暂时为空
+          likes:  p.heat || 0,
+          loading: true // 标记图片正在加载
+        }))
+        
+        setItems(basicItems)
+        setLoading(false) // 基础内容已加载完成
+        
+        // 第二轮:异步加载详情和图片
+        basicItems.forEach(async (item, index) => {
+          try {
+            const detail = await fetchPost(item.id)
+            setItems(prevItems => 
+              prevItems.map(prevItem => 
+                prevItem.id === item.id 
+                  ? {
+                      ...prevItem,
+                      img: detail.media_urls?.[0] || '',
+                      loading: false
+                    }
+                  : prevItem
+              )
+            )
+          } catch (e) {
+            // 单个图片加载失败不影响其他
+            setItems(prevItems => 
+              prevItems.map(prevItem => 
+                prevItem.id === item.id 
+                  ? { ...prevItem, loading: false }
+                  : prevItem
+              )
+            )
+          }
+        })
+        
       } catch (e) {
         setError(e.message)
-      } finally {
         setLoading(false)
       }
     }
@@ -69,7 +95,11 @@
         <div className="feed-grid">
           {items.map(item => (
             <div key={item.id} className="feed-card">
-              <img className="card-img" src={item.img} alt={item.title} />
+              {item.loading ? (
+                <div className="card-img-placeholder">图片加载中...</div>
+              ) : (
+                <img className="card-img" src={item.img} alt={item.title} />
+              )}
               <h3 className="card-title">{item.title}</h3>
               <div className="card-footer">
                 <div className="card-author">