diff --git a/src/components/selfStatus/selfStatus.tsx b/src/components/selfStatus/selfStatus.tsx
index 0fd0636..24028ad 100644
--- a/src/components/selfStatus/selfStatus.tsx
+++ b/src/components/selfStatus/selfStatus.tsx
@@ -23,14 +23,19 @@
     const downloadPoints = useAppSelector(state => state.user.downloadPoints);
     const avatar = useAppSelector(state => state.user.avatar)  || 'https://pic.baike.soso.com/ugc/baikepic2/6664/20220301143956-1127285627_png_800_800_370852.jpg/0';
     const dispatch = useAppDispatch();
-    const { data, refresh } = useApi(() => request.get(getUserInfo), false);
-    const dataRef = useRef(data);
-    useEffect(() => {
-        refresh();
+    const { refresh } = useApi(() => request.get(getUserInfo), false);
+    const fenchData = async () => {
+        const data = await refresh();
+        console.log(data)
+
         if (data) {
-            dispatch({ type: "user/getUserInfo", payload: data });
+            dispatch({ type: "user/getUserInfo", payload: data.userInfo });
         }
-    }, [dataRef, dispatch]);
+    }
+    useEffect(() => {
+        fenchData();
+        
+    }, [ dispatch]);
 
     function handleAvatarClick(){
         nav('/homepage')
diff --git a/src/store/userReducer.ts b/src/store/userReducer.ts
index ab065b7..4334475 100644
--- a/src/store/userReducer.ts
+++ b/src/store/userReducer.ts
@@ -1,5 +1,6 @@
 import { createSlice } from '@reduxjs/toolkit';
 import { isTokenExpired } from '@/utils/jwt';
+import { getUserInfo } from '@/api/user';
 
 interface UserState {
     userId: string;
@@ -34,6 +35,7 @@
             state.isLogin = true;
         },
         getUserInfo: (state, action) => {
+            console.log(action);
             state.userId = action.payload.userId;
             state.userName = action.payload.userName;
             state.role = action.payload.role;
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('发布失败');
