diff --git a/src/api/administer.js b/src/api/administer.js
index 5f28e45..d90bffa 100644
--- a/src/api/administer.js
+++ b/src/api/administer.js
@@ -1,10 +1,10 @@
 import axios from 'axios';
 
-const API_BASE_URL = 'http://localhost:8088'; // 替换为你的后端API基础URL
+// const API_BASE_URL = 'http://team2.10813352.xyz:8088'; // 替换为你的后端API基础URL
 
 export const getAllUsers = async () => {
   try {
-    const response = await axios.get(`${API_BASE_URL}/user/allUser`, {
+    const response = await axios.get(`/user/allUser`, {
       headers: {
         Authorization: localStorage.getItem('token')
       }
@@ -27,7 +27,7 @@
 
 export const searchUsers = async (key) => {
   try {
-    const response = await axios.get(`${API_BASE_URL}/user/searchUser`, {
+    const response = await axios.get(`/user/searchUser`, {
       params: { key },
       headers: {
         Authorization: localStorage.getItem('token')
@@ -50,7 +50,7 @@
 // 修改用户权限
 export const updateUserAuthority = async (username, authority) => {
   try {
-    const response = await axios.put(`${API_BASE_URL}/user/changeAuthority`, 
+    const response = await axios.put(`/user/changeAuthority`, 
       { 
         changeUsername: username, 
         authority: authority 
@@ -113,7 +113,7 @@
 // 修改 getAllDiscounts 和 getCurrentDiscount 方法
 export const getAllDiscounts = async () => {
   try {
-    const response = await axios.get(`${API_BASE_URL}/discount/all`, {
+    const response = await axios.get(`/discount/all`, {
       headers: {
         Authorization: localStorage.getItem('token')
       }
@@ -133,7 +133,7 @@
 
 export const getCurrentDiscount = async () => {
   try {
-    const response = await axios.get(`${API_BASE_URL}/discount/current`, {
+    const response = await axios.get(`/discount/current`, {
       headers: {
         Authorization: localStorage.getItem('token')
       }
@@ -156,7 +156,7 @@
 // 添加折扣
 export const addDiscount = async (discountData) => {
   try {
-    const response = await axios.post(`${API_BASE_URL}/discount/add`, discountData, {
+    const response = await axios.post(`/discount/add`, discountData, {
       headers: {
         Authorization: localStorage.getItem('token')
       }
@@ -176,7 +176,7 @@
 // 删除折扣
 export const deleteDiscount = async (id) => {
   try {
-    const response = await axios.delete(`${API_BASE_URL}/discount/delete/${id}`, {
+    const response = await axios.delete(`/discount/delete/${id}`, {
       headers: {
         Authorization: localStorage.getItem('token')
       }
diff --git a/src/api/administer.test.js b/src/api/administer.test.js
index beb1e11..e5e785e 100644
--- a/src/api/administer.test.js
+++ b/src/api/administer.test.js
@@ -37,7 +37,7 @@
       }
     ];
 
-    mock.onGet('http://localhost:8088/user/allUser').reply(200, {
+    mock.onGet('/user/allUser').reply(200, {
       code: 200,
       data: { data: mockUsers }
     });
@@ -47,7 +47,7 @@
   });
 
   it('should return empty array when no users', async () => {
-    mock.onGet('http://localhost:8088/user/allUser').reply(200, {
+    mock.onGet('/user/allUser').reply(200, {
       code: 200,
       data: { data: [] }
     });
@@ -57,7 +57,7 @@
   });
 
   it('should handle error when fetching users', async () => {
-    mock.onGet('http://localhost:8088/user/allUser').reply(500, {
+    mock.onGet('/user/allUser').reply(500, {
       message: 'Request failed with status code 500'
     });
 
@@ -74,7 +74,7 @@
         }
       ];
 
-      mock.onGet('http://localhost:8088/user/searchUser', { params: { key: 'user' } })
+      mock.onGet('/user/searchUser', { params: { key: 'user' } })
         .reply(200, {
           code: 200,
           data: { data: mockUsers }
@@ -92,7 +92,7 @@
         }
       ];
 
-      mock.onGet('http://localhost:8088/user/searchUser', { params: { key: '' } })
+      mock.onGet('/user/searchUser', { params: { key: '' } })
         .reply(200, {
           code: 200,
           data: { data: mockUsers }
@@ -108,7 +108,7 @@
       const username = 'user1';
       const authority = 'ADMIN';
 
-      mock.onPut('http://localhost:8088/user/changeAuthority', {
+      mock.onPut('/user/changeAuthority', {
         changeUsername: username,
         authority: authority
       }).reply(200, {
@@ -133,7 +133,7 @@
         }
       ];
 
-      mock.onGet('http://localhost:8088/discount/all').reply(200, {
+      mock.onGet('/discount/all').reply(200, {
         code: 200,
         data: { data: mockDiscounts }
       });
@@ -153,7 +153,7 @@
       endTime: '2023-05-07T23:59:59'
     };
 
-    mock.onGet('http://localhost:8088/discount/current').reply(200, {
+    mock.onGet('/discount/current').reply(200, {
       code: 200,
       data: { data: mockDiscount }
     });
@@ -163,7 +163,7 @@
   });
 
   it('should return null when no current discount', async () => {
-    mock.onGet('http://localhost:8088/discount/current').reply(200, {
+    mock.onGet('/discount/current').reply(200, {
       code: 200,
       message: '目前没有进行中的折扣',
       data: null
@@ -174,7 +174,7 @@
   });
 
   it('should handle error when fetching current discount', async () => {
-    mock.onGet('http://localhost:8088/discount/current').reply(500);
+    mock.onGet('/discount/current').reply(500);
 
     await expect(getCurrentDiscount()).rejects.toThrow();
   });
@@ -189,7 +189,7 @@
         endTime: '2023-06-07T23:59:59'
       };
 
-      mock.onPost('http://localhost:8088/discount/add', newDiscount).reply(200, {
+      mock.onPost('/discount/add', newDiscount).reply(200, {
         code: 200,
         data: { data: { id: 2, ...newDiscount } }
       });
@@ -203,7 +203,7 @@
     it('should delete discount successfully', async () => {
       const discountId = 1;
 
-      mock.onDelete(`http://localhost:8088/discount/delete/${discountId}`).reply(200, {
+      mock.onDelete(`/discount/delete/${discountId}`).reply(200, {
         code: 200,
         message: '删除成功'
       });
diff --git a/src/api/auth.js b/src/api/auth.js
index c094a44..a779af2 100644
--- a/src/api/auth.js
+++ b/src/api/auth.js
@@ -3,7 +3,7 @@
 
 // 创建并导出 axios 实例
 export const api = axios.create({
-  baseURL: 'http://localhost:8088',
+  baseURL: 'http://team2.10813352.xyz:8088',
   timeout: 5000,
 });
 
diff --git a/src/api/recommend.js b/src/api/recommend.js
new file mode 100644
index 0000000..13c9f94
--- /dev/null
+++ b/src/api/recommend.js
@@ -0,0 +1,30 @@
+// src/api/recommend.js
+import { api } from './auth';
+
+export const getRecommendations = async (limit = 5) => {
+  try {
+    const response = await api.get('/recommend/for-user', {
+      params: { limit }
+    });
+    return response.data;
+  } catch (error) {
+    console.error('获取推荐失败:', error);
+    throw error;
+  }
+};
+
+export const markRecommendationShown = async (torrentId) => {
+  try {
+    await api.post(`/recommend/mark-shown/${torrentId}`);
+  } catch (error) {
+    console.error('标记推荐为已显示失败:', error);
+  }
+};
+
+export const markRecommendationClicked = async (torrentId) => {
+  try {
+    await api.post(`/recommend/mark-clicked/${torrentId}`);
+  } catch (error) {
+    console.error('标记推荐为已点击失败:', error);
+  }
+};
\ No newline at end of file
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':
diff --git a/src/config/config.js b/src/config/config.js
index 365cc9e..1da40df 100644
--- a/src/config/config.js
+++ b/src/config/config.js
@@ -2,6 +2,6 @@
 
     //serverIP后端服务器地址
 
-    serverIP:'http://team2.10813352.xyz:8088'
+    serverIP:'http://team2.10813352.xyz:8088',
   
   }
\ No newline at end of file
