diff --git a/src/views/forum/index.tsx b/src/views/forum/index.tsx
index 13c369f..d2e7c5a 100644
--- a/src/views/forum/index.tsx
+++ b/src/views/forum/index.tsx
@@ -12,7 +12,12 @@
 import ad2 from '&/assets/ad2.png'
 import { useEffect } from "react";
 
+
+
 export default function Forum() {
+
+
+    
     useEffect(() => {
         // 禁止滚动
         document.body.style.overflow = 'hidden';
diff --git a/src/views/homepage/homepage.tsx b/src/views/homepage/homepage.tsx
index 165ed67..697ed8f 100644
--- a/src/views/homepage/homepage.tsx
+++ b/src/views/homepage/homepage.tsx
@@ -1,7 +1,7 @@
 import React, { useCallback, useEffect,useState,useRef } from 'react';
 import styles from './homepage.module.css';
 import { useApi } from '@/hooks/request';
-import { useSelector } from 'react-redux';
+import { useAppSelector } from '@/hooks/store';
 import { RootState } from '@/store';
 import { useNavigate } from 'react-router';
 import  Logo  from '&/assets/logo.png';
@@ -46,37 +46,40 @@
   const [works, setWorks] = useState<WorkItem[]>([]);
   const worksRef = useRef<WorkItem[]>([]);
 
-
   const navigate = useNavigate();
-  const userInfo = useSelector((state: RootState) => state.user);
+  const userInfo = useAppSelector((state: RootState) => state.user);
   const userId = userInfo.userId; // 从Redux获取当前用户ID
 
+
   const { data:userdata, loading:userloading, error:usererror, refresh: getUserDetailRefresh } = useApi(
-    () => request.get(getUserDetail, {params: {userId}}).then(res => res.data.data),
+    () => request.get(getUserDetail, {params: {userId}}),
+    false
   );
 
-  const { data:workdata, loading:workloading, error:workerror, refresh: getUserMessageRefresh } = useApi(
-    () => request.get(getUserMessage, { params: { userId } }).then(res => res.data.data),
+  const { data: workdata, loading: workloading, error: workerror, refresh: getUserMessageRefresh } = useApi(
+    () => request.get(`${getUserMessage}/${userId}`), // 注意这里拼接了 userId
     false
   );
 
   const getUserDetails = debounce(async () => {
     try{
-      const res = await  getUserDetailRefresh({userId});
-      console.log("res", res);
-      const data = res?.userInfo;
-
+      // const res = await  getUserDetailRefresh({userId});
+      const res = await  getUserDetailRefresh();
+      const data_1 = res?.userInfo;
+      const data_2 = res?.statistics;
+      console.log('data', data_1)
       const formatted: UserStats = {
-      username: data.username,
-      uploadAmount: data.uploadAmount,
-      level: data.level,
-      likes: data.likes,
-      following: data.following,
-      followers: data.followers,
-      mutualFollows: data.mutualFollows
+        username: data_1.userName,
+        uploadAmount: data_1.uploadAmount,
+        level: data_1.userLevel,
+        likes: data_2.likes,
+        following: data_2.followingCount,
+        followers: data_2.followersCount,
+        mutualFollows: data_2.mutualFollows
       };
 
       setUserStats(formatted);
+      console.log('formatted:',formatted)
     }catch(error){
       console.error('获取用户信息错误', error);
     }
@@ -84,19 +87,21 @@
 
 
   const getUserPost = debounce(async () => {
-    try{
-
-      const url = `${getUserMessage}?userId=${userId}`;
+    try {
+      const url = `${getUserMessage}/${userId}`; // ✅ 正确的 URL 拼接方式
       console.log("请求发送:", url);
 
-      const res = await getUserMessageRefresh({userId});
+      // 不需要传 userId 参数了，因为 URL 已包含它
+      const res = await getUserMessageRefresh();
       console.log("res", res);
+
       worksRef.current = res;
       setWorks(res);
-    }catch(error) {
+    } catch (error) {
       console.error('获取帖子列表错误', error);
     }
-  },1000) as () => void;
+  }, 1000) as () => void;
+
 
   useEffect(() => {
     if (!userId) {
diff --git a/src/views/login/login.tsx b/src/views/login/login.tsx
index fef6e32..d3414ec 100644
--- a/src/views/login/login.tsx
+++ b/src/views/login/login.tsx
@@ -48,7 +48,7 @@
             if (userInfo == null || (userInfo as any).error) {
                 throw new Error('获取用户信息失败');
             }
-            dispatch({ type: "user/getUserInfo", payload: userInfo });
+            dispatch({ type: "user/getUserInfo", payload: userInfo.userInfo });
             nav('/');
         } catch (error) {
             showErrorMessage('登录失败，请检查您的用户名和密码');
diff --git a/src/views/postDetail/postDetail.tsx b/src/views/postDetail/postDetail.tsx
index d6029a8..202907b 100644
--- a/src/views/postDetail/postDetail.tsx
+++ b/src/views/postDetail/postDetail.tsx
@@ -65,6 +65,8 @@
       const commentsRes = await getPostCommentsRefresh();
       setComments(commentsRes as CommentResponse[]);
       setLoading(false);
+      console.log("postRes:", postRes);
+      console.log("commentsRes:", commentsRes);
     };
     fetchData();
   }, [postId]);
diff --git a/src/views/upload/upload.tsx b/src/views/upload/upload.tsx
index 1bf096a..19e1197 100644
--- a/src/views/upload/upload.tsx
+++ b/src/views/upload/upload.tsx
@@ -71,7 +71,7 @@
     try {
       const res = await instance.post(Upload, payload);
 
-      console.log('mock返回内容：', res.code);
+      console.log('后端返回内容：', res.code);
 
       // 判断返回内容是否成功（根据你 mock 接口返回的 code 字段）
       if (res.code !== 0) throw new Error('发布失败');
