diff --git a/react-ui/src/pages/Message/service.ts b/react-ui/src/pages/Message/service.ts
index 958290e..c5bc356 100644
--- a/react-ui/src/pages/Message/service.ts
+++ b/react-ui/src/pages/Message/service.ts
@@ -9,57 +9,40 @@
 
 // API 路径配置 - 可根据实际后端接口调整
 const API_CONFIG = {
-    CHAT_CONTACTS: '/api/system/message/contacts',  // 可改为: '/api/message/contacts' 或其他路径
-    CHAT_HISTORY: '/api/system/message/list',    // 可改为: '/api/message/history' 或其他路径
-    SEND_MESSAGE: '/api/system/message',       // 可改为: '/api/message/send' 或其他路径
-    USER_INFO: '/api/system/user',                  // 可改为: '/api/user' 或其他路径
+    CHAT_CONTACTS: '/api/system/user/message/chat/users',
+    CHAT_HISTORY: '/api/system/user/message/list',
+    SEND_MESSAGE: '/api/system/user/message',
+    USER_INFO: '/api/system/user'
 };
 
 /** 获取聊天对象列表 */
-export async function getChatContactList(params?: ChatContactListParams) {
+export async function getChatContactList() {
     // 默认数据
     const defaultData = [
         {
             userId: 2,
-            userName: '张三',
-            avatar: '',
-            lastMessage: '你好，请问有什么可以帮助你的吗？',
-            lastMessageTime: new Date(Date.now() - 1000 * 60 * 30),
-            unreadCount: 2
+            nickName: '张三'
         },
         {
             userId: 3,
-            userName: '李四',
-            avatar: '',
-            lastMessage: '关于最近的活动，我想了解更多细节。',
-            lastMessageTime: new Date(Date.now() - 1000 * 60 * 60 * 2),
-            unreadCount: 0
+            nickName: '李四'
         },
         {
             userId: 4,
-            userName: '王五',
-            avatar: '',
-            lastMessage: '好的，我知道了，谢谢！',
-            lastMessageTime: new Date(Date.now() - 1000 * 60 * 60 * 24),
-            unreadCount: 1
+            nickName: '王五'
         }
     ];
 
     try {
-        const queryString = params
-            ? `?${new URLSearchParams(params as Record<string, any>).toString()}`
-            : '';
-        const response = await request(`${API_CONFIG.CHAT_CONTACTS}${queryString}`, {
-            method: 'get',
+        const response = await request('/api/system/user/message/chat/users', {
+            method: 'get'
         });
 
-        // 如果接口返回空数据，使用默认数据
-        if (!response || response.length === 0) {
+        if (!response) {
             return defaultData;
         }
-        return response;
+        return response.data;
     } catch (error) {
-        // 接口报错时返回默认数据
         console.warn('获取聊天对象列表接口异常，使用默认数据:', error);
         return defaultData;
     }
@@ -96,23 +79,23 @@
         }
     ];
 
-    // try {
-    //     const queryString = `?${new URLSearchParams(params as Record<string, any>).toString()}`;
-    //     const response = await request(`${API_CONFIG.CHAT_HISTORY}${queryString}`, {
-    //         method: 'get',
-    //     });
-
-    //     // 如果接口返回空数据，使用默认数据
-    //     if (!response || response.length === 0) {
-    //         return defaultData;
-    //     }
-    //     return response;
-    // } catch (error) {
-    //     // 接口报错时返回默认数据
-    //     console.warn('获取聊天记录接口异常，使用默认数据:', error);
-    //     return defaultData;
-    // }
-    return defaultData;
+    try {
+        const response = await request(`${API_CONFIG.CHAT_HISTORY}`, {
+            method: 'get',
+            params: {
+                userId1: params.currentUserId,
+                userId2: params.userId
+            }
+        });
+        console.log(response);
+        if (!response || !response.data) {
+            return defaultData;
+        }
+        return response.data;
+    } catch (error) {
+        console.warn('获取聊天记录接口异常，使用默认数据:', error);
+        return defaultData;
+    }
 }
 
 /** 发送消息 */
@@ -134,7 +117,7 @@
     // 默认用户信息
     const defaultUserInfo = {
         userId,
-        userName: `用户${userId}`,
+        nickName: `用户${userId}`,
         avatar: ''
     };
 
@@ -143,10 +126,10 @@
             method: 'get',
         });
 
-        if (!response) {
+        if (!response || !response.data) {
             return defaultUserInfo;
         }
-        return response;
+        return response.data;
     } catch (error) {
         // 接口报错时返回默认用户信息
         console.warn(`获取用户${userId}信息接口异常，使用默认数据:`, error);
