diff --git a/src/components/Administer.test.jsx b/src/components/Administer.test.jsx
index 7f446ed..598ed4e 100644
--- a/src/components/Administer.test.jsx
+++ b/src/components/Administer.test.jsx
@@ -23,7 +23,7 @@
   });
 
   test('renders user management tab by default', async () => {
-    mock.onGet('http://localhost:8088/user/allUser').reply(200, {
+    mock.onGet('/user/allUser').reply(200, {
       code: 200,
       data: { data: [] }
     });
@@ -53,7 +53,7 @@
       }
     ];
 
-    mock.onGet('http://localhost:8088/user/allUser').reply(200, {
+    mock.onGet('/user/allUser').reply(200, {
       code: 200,
       data: { data: mockUsers }
     });
@@ -77,7 +77,7 @@
       }
     ];
 
-    mock.onGet('http://localhost:8088/user/searchUser').reply(200, {
+    mock.onGet('/user/searchUser').reply(200, {
       code: 200,
       data: { data: mockUsers }
     });
@@ -99,12 +99,12 @@
   });
 
   test('switches between tabs', async () => {
-    mock.onGet('http://localhost:8088/user/allUser').reply(200, {
+    mock.onGet('/user/allUser').reply(200, {
       code: 200,
       data: { data: [] }
     });
 
-    mock.onGet('http://localhost:8088/discount/all').reply(200, {
+    mock.onGet('/discount/all').reply(200, {
       code: 200,
       data: { data: [] }
     });
diff --git a/src/components/Dashboard.jsx b/src/components/Dashboard.jsx
index 40bd19d..61111f3 100644
--- a/src/components/Dashboard.jsx
+++ b/src/components/Dashboard.jsx
@@ -7,8 +7,10 @@
 import { message } from 'antd'; // 用于显示提示消息
 import { getAnnouncements,getLatestAnnouncements,getAnnouncementDetail } from '../api/announcement'; 
 import { getAllDiscounts } from '../api/administer'; 
-   import { getUserInfo, isAdmin } from '../api/auth';
+import { getUserInfo, isAdmin } from '../api/auth';
 import { api } from '../api/auth'; 
+import { getRecommendations, markRecommendationShown, markRecommendationClicked } from '../api/recommend';
+
 
 
 const Dashboard = ({onLogout}) => {
@@ -67,6 +69,10 @@
     const [shareSearch, setShareSearch] = useState('');
     const [requestSearch, setRequestSearch] = useState('');
     const [helpSearch, setHelpSearch] = useState('');
+    const [recommendations, setRecommendations] = useState([]);
+    const [recommendLoading, setRecommendLoading] = useState(false);
+    const [recommendError, setRecommendError] = useState(null);
+
 
 
     const activeTab = tab || 'announcement'; // 如果没有tab参数，则默认为announcement
@@ -99,6 +105,7 @@
         if (activeTab === 'announcement') {
             fetchAnnouncements();
             fetchDiscountsForCarousel();
+            fetchRecommendations();
         }
     }, [activeTab]);
 
@@ -143,6 +150,23 @@
         }
     };
 
+    const handleRecommendClick = async (torrent) => {
+        try {
+            // 标记为已点击
+            await markRecommendationClicked(torrent.id);
+            
+            // 导航到种子详情页
+            navigate(`/torrent/${torrent.id}`, {
+            state: {
+                fromTab: 'announcement',
+                scrollPosition: window.scrollY
+            }
+            });
+        } catch (error) {
+            console.error('标记推荐点击失败:', error);
+        }
+    };
+
     
    // 公告区搜索处理
     const handleSearchAnnouncement = (e) => {
@@ -515,7 +539,7 @@
         
         const response = (shareSearch && !isReset) 
             ? await searchTorrents(shareSearch, page)
-            : await api.get('http://localhost:8088/torrent', { params });
+            : await api.get('/torrent', { params });
             
         if (response.data.code === 200) {
             setTorrentPosts(response.data.data.records);
@@ -614,7 +638,26 @@
         } finally {
           setHelpLoading(false);
         }
-      };
+    };
+
+    const fetchRecommendations = async () => {
+        try {
+            setRecommendLoading(true);
+            const response = await getRecommendations(5);
+            if (response.code === 200) {
+            setRecommendations(response.data || []);
+            
+            // 标记这些推荐为已显示
+            response.data.forEach(torrent => {
+                markRecommendationShown(torrent.id);
+            });
+            }
+        } catch (error) {
+            setRecommendError(error.message || '获取推荐失败');
+        } finally {
+            setRecommendLoading(false);
+        }
+    };
 
 
     useEffect(() => {
@@ -719,7 +762,7 @@
             }
             
             // 调用API获取筛选结果
-            const response = await api.get('http://localhost:8088/torrent', { params });
+            const response = await api.get('/torrent', { params });
             
             if (response.data.code === 200) {
                 setTorrentPosts(response.data.data.records);
@@ -857,6 +900,45 @@
                                 </div>
                             ))}
                         </div>
+                        {/* 新增的为你推荐区域 */}
+                        <div className="recommend-section">
+                            <h2 className="section-title">为你推荐</h2>
+                            
+                            {recommendLoading && <div className="loading">加载推荐中...</div>}
+                            {recommendError && <div className="error">{recommendError}</div>}
+                            
+                            <div className="recommend-grid">
+                            {recommendations.map(torrent => (
+                                <div 
+                                key={torrent.id}
+                                className="recommend-card"
+                                onClick={() => handleRecommendClick(torrent)}
+                                >
+                                <div className="card-poster">
+                                    <div className="poster-image gray-bg">
+                                    {torrent.torrentName.charAt(0)}
+                                    </div>
+                                </div>
+                                <div className="card-info">
+                                    <h3 className="card-title">{torrent.torrentName}</h3>
+                                    <p className="card-meta">
+                                    {torrent.resolution} | {torrent.region} | {torrent.category}
+                                    </p>
+                                    <p className="card-subtitle">字幕: {torrent.subtitle}</p>
+                                </div>
+                                <div className="card-stats">
+                                    <span className="stat">👍 {torrent.likeCount || 0}</span>
+                                </div>
+                                </div>
+                            ))}
+                            
+                            {!recommendLoading && recommendations.length === 0 && (
+                                <div className="no-recommendations">
+                                暂无推荐，请先下载一些资源以获取个性化推荐
+                                </div>
+                            )}
+                            </div>
+                        </div>
                     </div>
                 );
             case 'share':
