diff --git "a/src/app/community/community-detail/\133communityId\135/page.tsx" "b/src/app/community/community-detail/\133communityId\135/page.tsx"
index 962cc0f..6beb423 100644
--- "a/src/app/community/community-detail/\133communityId\135/page.tsx"
+++ "b/src/app/community/community-detail/\133communityId\135/page.tsx"
@@ -23,9 +23,13 @@
 import axios from 'axios';
 // 防抖函数
 import { debounce } from 'lodash';
+import { useLocalStorage } from '../../../hook/useLocalStorage';
 // 样式
 import './resource-community.scss';
 
+interface User {
+  Id: number;
+}
 // 帖子列表数据
 interface Thread {
     threadId: number;
@@ -53,6 +57,8 @@
 
 // 社区详情页面
 export default function CommunityDetailPage() {
+    const user = useLocalStorage<User>('user');
+    const userId: number = user?.Id ?? -1;
     // 获取URL参数，页面跳转
     const params = useParams<{ communityId: string }>()
     const communityId = decodeURIComponent(params.communityId); // 防止中文路径乱码
@@ -111,7 +117,7 @@
             const option = selectedOption.name // 添加排序参数
             const response = await axios.get<ThreadList>(
                 process.env.PUBLIC_URL + `/community/threads`, {
-                params: { userId: 22301145, communityId, pageNumber, rows, option, searchValue }
+                params: { userId, communityId, pageNumber, rows, option, searchValue }
             }
             );
             console.log('获取帖子列表:', response.data.records);
@@ -139,7 +145,7 @@
         try {
             const currentDate = new Date().toISOString();
             const postData = {
-                userId: 22301145, // 记得用户登录状态获取
+                userId, // 记得用户登录状态获取
                 threadPicture: formData.threadPicture,
                 title: formData.title,
                 content: formData.content,
diff --git "a/src/app/community/thread-detail/\133threadId\135/page.tsx" "b/src/app/community/thread-detail/\133threadId\135/page.tsx"
index f998f64..0f3e5b2 100644
--- "a/src/app/community/thread-detail/\133threadId\135/page.tsx"
+++ "b/src/app/community/thread-detail/\133threadId\135/page.tsx"
@@ -16,8 +16,12 @@
 import { Paginator, type PaginatorPageChangeEvent } from 'primereact/paginator';
 // 消息提醒
 import { Toast } from 'primereact/toast';
+import { useLocalStorage } from '../../../hook/useLocalStorage';
 // 样式
 import './thread.scss';
+interface User {
+    Id: number;
+}
 
 
 // 评论信息
@@ -65,6 +69,9 @@
 
 //帖子详情界面
 export default function ThreadDetailPage() {
+    const user = useLocalStorage<User>('user');
+    const userId: number = user?.Id ?? -1;
+
     // 获取URL参数，页面跳转
     const params = useParams<{ threadId: string }>()
     const threadId = decodeURIComponent(params.threadId); // 防止中文路径乱码
@@ -104,7 +111,7 @@
             const { data } = await axios.get(process.env.PUBLIC_URL + `/thread`, {
                 params: {
                     threadId,
-                    userId: 22301145
+                    userId
                 }
             });
             setThreadInfo(data);
@@ -132,7 +139,7 @@
             try {
                 const response = await axios.post(
                     process.env.PUBLIC_URL + `/thread/like`, {
-                    params: { threadId, userId: 22301145 }
+                    params: { threadId, userId }
                 }
                 );
                 fetchThreadInfo(); // 刷新帖子信息
@@ -148,7 +155,7 @@
             try {
                 const response = await axios.delete(
                     process.env.PUBLIC_URL + `/thread/like`, {
-                    params: { threadId, userId: 22301145 }
+                    params: { threadId, userId }
                 }
                 );
                 fetchThreadInfo(); // 刷新帖子信息
@@ -216,7 +223,7 @@
         console.log('发布评论:', commentId);
         try {
             const newComment: NewComment = {
-                userId: 22301145,
+                userId,
                 threadId: threadInfo.threadId,
                 resourceId: 0,
                 replyId: commentId,
@@ -246,7 +253,7 @@
 
         try {
             const newComment: NewComment = {
-                userId: 22301145,
+                userId,
                 threadId: threadInfo.threadId,
                 resourceId: 0,
                 replyId: 0, // 直接评论，不是回复
@@ -373,7 +380,7 @@
                                     if (el) ops.current[index] = el;
                                 }}>
                                 <Button label="回复" text size="small" onClick={() => setVisibleReply(true)} />
-                                {comment.userId === 22301145 &&
+                                {comment.userId === userId &&
                                     <Button
                                         label="删除"
                                         text
diff --git a/src/app/hook/useLocalStorage.ts b/src/app/hook/useLocalStorage.ts
new file mode 100644
index 0000000..2b28b01
--- /dev/null
+++ b/src/app/hook/useLocalStorage.ts
@@ -0,0 +1,20 @@
+import { useEffect, useState } from 'react';
+
+export const useLocalStorage = <T>(key: string): T | null => {
+  const [value, setValue] = useState<T | null>(null);
+
+  useEffect(() => {
+    if (typeof window !== 'undefined') {
+      const item = localStorage.getItem(key);
+      if (item) {
+        try {
+          setValue(JSON.parse(item));
+        } catch (e) {
+          console.error(`解析 localStorage ${key} 失败`, e);
+        }
+      }
+    }
+  }, [key]);
+
+  return value;
+};
diff --git a/src/app/notification/page.tsx b/src/app/notification/page.tsx
index 9e83252..55f0ec5 100644
--- a/src/app/notification/page.tsx
+++ b/src/app/notification/page.tsx
@@ -11,9 +11,11 @@
 import { Paginator, PaginatorPageChangeEvent } from 'primereact/paginator';
 import { Card } from 'primereact/card';
 import { TabView, TabPanel } from 'primereact/tabview'; // ✅ TabView 导入
-
+import { useLocalStorage } from '../hook/useLocalStorage';
 import './notification.scss';
-
+interface User {
+  Id: number;
+}
 interface Notification {
   notificationId: number;
   title: string;
@@ -25,6 +27,8 @@
 }
 
 export default function NotificationPage() {
+  const user = useLocalStorage<User>('user');
+  const userId: number = user?.Id ?? -1;
   const toast = useRef<Toast>(null);
   const [notifications, setNotifications] = useState<Notification[]>([]);
   const [selectedNotification, setSelectedNotification] = useState<Notification | null>(null);
@@ -41,7 +45,7 @@
     try {
       const pageNumber = first / rows + 1;
       const res = await axios.get(process.env.PUBLIC_URL + '/notification', {
-        params: { pageNumber, rows, userId: 22301145 },
+        params: { pageNumber, rows, userId },
       });
       const { records, total } = res.data;
       setNotifications(records);
diff --git a/src/app/page.tsx b/src/app/page.tsx
index fb42dac..5076a0a 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -13,9 +13,14 @@
 import { Fire } from '@icon-park/react';
 // 接口传输
 import axios from 'axios';
-
+import { useLocalStorage } from './hook/useLocalStorage';
 // 样式
 import './main.scss';
+
+interface User {
+  Id: number;
+}
+
 // 模组列表数据
 interface Mod {
   resourceId: number;
@@ -88,6 +93,9 @@
 }
 // 主页
 export default function Home() {
+  const user = useLocalStorage<User>('user');
+  const userId: number = user?.Id ?? -1;
+  console.log(userId)
   // 模组列表
   const [mods, setMods] = useState<Mod[]>([]);
   // 悬赏列表
@@ -126,7 +134,7 @@
   // 获取悬赏列表
   const fetchRewards = async () => {
     try {
-      const response = await axios.get<RewardList>(process.env.PUBLIC_URL +`/reward`, {
+      const response = await axios.get<RewardList>(process.env.PUBLIC_URL + `/reward`, {
         params: { pageNumber: 1, rows: 5, searchValue: '', option: '' }
       });
       console.log('获取悬赏列表:', response.data.records);
@@ -140,7 +148,7 @@
   // 获取热门资源幻灯片
   const fetchHotResources = async () => {
     try {
-      const response = await axios.get<HotResourceList>(process.env.PUBLIC_URL +`/resource/hot/slide`);
+      const response = await axios.get<HotResourceList>(process.env.PUBLIC_URL + `/resource/hot/slide`);
       console.log('获取热门社区幻灯片:', response.data.records);
       setHotResources(response.data.records);
     } catch (err) {
@@ -152,7 +160,7 @@
   // 获取全站数据
   const fetchstats = async () => {
     try {
-      const response = await axios.get<Stats>(process.env.PUBLIC_URL +`/total/info`);
+      const response = await axios.get<Stats>(process.env.PUBLIC_URL + `/total/info`);
       console.log('获取全站数据:', response.data);
       setStats(response.data);
     } catch (err) {
@@ -165,8 +173,8 @@
   // 获取推荐模组、地图、整合包、材质包
   const fetchRecommendMods = async () => {
     try {
-      const response = await axios.get<ModList>(process.env.PUBLIC_URL +`/resource/recommend`, {
-        params: { userId: 22301145, pageNumber: 1, rows: 3, type: '模组' }
+      const response = await axios.get<ModList>(process.env.PUBLIC_URL + `/resource/recommend`, {
+        params: { userId, pageNumber: 1, rows: 3, classify: '模组', searchValue: ''  }
       });
       console.log('获取模组列表:', response.data.records);
       setMods(response.data.records);
@@ -177,8 +185,8 @@
   };
   const fetchRecommendMaps = async () => {
     try {
-      const response = await axios.get<MapList>(process.env.PUBLIC_URL +`/resource/recommend`, {
-        params: { userId: 22301145, pageNumber: 1, rows: 3, type: '地图' }
+      const response = await axios.get<MapList>(process.env.PUBLIC_URL + `/resource/recommend`, {
+        params: { userId, pageNumber: 1, rows: 3, classify: '地图', searchValue: '' }
       });
       console.log('获取模组列表:', response.data.records);
       setMaps(response.data.records);
@@ -189,8 +197,8 @@
   };
   const fetchRecommendModpacks = async () => {
     try {
-      const response = await axios.get<ModpackList>(process.env.PUBLIC_URL +`/resource/recommend`, {
-        params: { userId: 22301145, pageNumber: 1, rows: 3, type: '整合包' }
+      const response = await axios.get<ModpackList>(process.env.PUBLIC_URL + `/resource/recommend`, {
+        params: { userId, pageNumber: 1, rows: 3, classify: '整合包', searchValue: ''  }
       });
       console.log('获取模组列表:', response.data.records);
       setModpacks(response.data.records);
@@ -201,8 +209,8 @@
   };
   const fetchRecommendTextures = async () => {
     try {
-      const response = await axios.get<TextureList>(process.env.PUBLIC_URL +`/resource/recommend`, {
-        params: { userId: 22301145, pageNumber: 1, rows: 3, type: '材质包' }
+      const response = await axios.get<TextureList>(process.env.PUBLIC_URL + `/resource/recommend`, {
+        params: { userId, pageNumber: 1, rows: 3, classify: '材质包', searchValue: ''  }
       });
       console.log('获取模组列表:', response.data.records);
       setTextures(response.data.records);
diff --git a/src/app/resource/classification/page.tsx b/src/app/resource/classification/page.tsx
index 88d6629..f147ed2 100644
--- a/src/app/resource/classification/page.tsx
+++ b/src/app/resource/classification/page.tsx
@@ -20,11 +20,14 @@
 import { Sidebar } from 'primereact/sidebar';
 // 防抖函数
 import { debounce } from 'lodash';
+import { useLocalStorage } from '../../hook/useLocalStorage';
 // 样式
 import './classification.scss';
 
+interface User {
+  Id: number;
+}
 // 热门资源数据
-
 interface HotResource {
   resourceId: number;
   resourceName: string;
@@ -32,7 +35,7 @@
   resourceSummary: string;
   lastUpdateTime: string;
   hot: number;
-  gamePlayList: { gameplayName: string }[];
+  gameplayList: string[];
 }
 
 interface HotResourceList {
@@ -41,6 +44,9 @@
 }
 // 主页
 export default function ClassificationResource() {
+  const user = useLocalStorage<User>('user');
+  const userId: number = user?.Id ?? -1;
+
   // 热门资源列表
   const [hotResources, setHotResources] = useState<HotResource[]>([]);
   const [totalHotResource, setTotalHotResource] = useState(0);
@@ -70,7 +76,7 @@
   // 获取帖子列表
   useEffect(() => {
     handleSearch();
-  }, [first, rows,searchValue]);
+  }, [first, rows, searchValue]);
 
   const handleSearch = async () => {
     try {
@@ -78,7 +84,7 @@
       console.log(searchValue + " 当前页: " + pageNumber + "rows: " + rows + "selectedClassify: " + selectedClassify + "selectedGameplay: " + selectedGameplay + "selectedVersions: " + selectedVersions);
       const response = await axios.get<HotResourceList>(process.env.PUBLIC_URL + `/resource/search`, {
         params: {
-          userId: 22301145,
+          userId,
           pageNumber,
           rows,
           classify: selectedClassify,
@@ -114,8 +120,8 @@
               <div className="resource-content">
                 <h3>{hotResource.resourceName}</h3>
                 <div className="tags">
-                  {hotResource.gamePlayList.map((tag, index) => (
-                    <Tag key={index} value={tag.gameplayName} />
+                  {hotResource.gameplayList.map((tag, index) => (
+                    <Tag key={index} value={tag} />
                   ))}
                 </div>
               </div>
diff --git "a/src/app/resource/resource-detail/\133resourceId\135/page.tsx" "b/src/app/resource/resource-detail/\133resourceId\135/page.tsx"
index 8d28596..5e0a634 100644
--- "a/src/app/resource/resource-detail/\133resourceId\135/page.tsx"
+++ "b/src/app/resource/resource-detail/\133resourceId\135/page.tsx"
@@ -1,10 +1,10 @@
 'use client';
-import React, {useEffect, useRef, useState} from 'react';
-import {Image} from "primereact/image";
-import {Button} from "primereact/button";
-import {Avatar} from "primereact/avatar";
-import {ButtonGroup} from "primereact/buttongroup";
-import {InputText} from "primereact/inputtext";
+import React, { useEffect, useRef, useState } from 'react';
+import { Image } from "primereact/image";
+import { Button } from "primereact/button";
+import { Avatar } from "primereact/avatar";
+import { ButtonGroup } from "primereact/buttongroup";
+import { InputText } from "primereact/inputtext";
 import { Dialog } from 'primereact/dialog';
 // 引入图标
 import 'primeicons/primeicons.css';
@@ -24,22 +24,24 @@
 import { Sidebar } from 'primereact/sidebar';
 // 分页
 import { Paginator, PaginatorPageChangeEvent } from 'primereact/paginator';
-
+import { useLocalStorage } from '../../../hook/useLocalStorage';
 // 样式
 import './resource-detail.scss';
-
+interface User {
+  Id: number;
+}
 // 种子
 interface Torrent {
-  torrentRecordId:  number;
+  torrentRecordId: number;
   torrentUrl: string;
-  infoHash:  string;
-  uploadTime:  string;
-  uploaderUserId:  number;
+  infoHash: string;
+  uploadTime: string;
+  uploaderUserId: number;
 }
 
 // 资源版本
 interface ResourceVersion {
-  resourceVersionId:  string; // 资源版本id
+  resourceVersionId: string; // 资源版本id
   resourceVersionName: string; // 资源版本名称
   compatibleVersions: string[]; // 兼容的游戏版本列表
   torrentList: Torrent[]; // 种子列表
@@ -47,27 +49,27 @@
 
 // 资源信息
 interface Resource {
-  resourceId:  number;
+  resourceId: number;
   resourceName: string;   // 资源标题
-  resourcePicture:  string;   // 资源照片网址
+  resourcePicture: string;   // 资源照片网址
   resourceSummary: string;    // 资源简介（一句话）
-  resourceDetail:  string;    // 资源介绍
-  uploadTime:  string;     // 上传时间
+  resourceDetail: string;    // 资源介绍
+  uploadTime: string;     // 上传时间
   lastUpdateTime: string;     // 最近更新时间
-  price:  number;
+  price: number;
   downloads: number;  // 下载数
-  likes:  number;  // 点赞数
-  collections:   number;   // 收藏数
-  comments:  number;   // 评论数
-  seeds:   number;    // 种子数
-  classify:  string;  // 资源分类(材质包：resourcePack,模组：mod,整合包：modPack ,地图：map
+  likes: number;  // 点赞数
+  collections: number;   // 收藏数
+  comments: number;   // 评论数
+  seeds: number;    // 种子数
+  classify: string;  // 资源分类(材质包：resourcePack,模组：mod,整合包：modPack ,地图：map
   hot: number;     // 资源热度
   gameplayList: string[];  // 资源标签
-  resourceVersionList:  ResourceVersion[];     // 资源版本列表
-  isCollect:  boolean;     // 是否被收藏
-  isLike:  boolean;   // 是否被点赞
-  isPurchase:  boolean;   // 是否被购买
-  isUpload:  boolean;     // 是否是该用户上传的
+  resourceVersionList: ResourceVersion[];     // 资源版本列表
+  isCollect: boolean;     // 是否被收藏
+  isLike: boolean;   // 是否被点赞
+  isPurchase: boolean;   // 是否被购买
+  isUpload: boolean;     // 是否是该用户上传的
   userId: number;     // 资源上传者的id
 }
 
@@ -116,7 +118,7 @@
 // 关注
 interface Subscriber {
   userId: number;
-  username:  string;
+  username: string;
 }
 
 // 关注列表
@@ -125,6 +127,8 @@
 }
 
 export default function ResourceDetail() {
+  const user = useLocalStorage<User>('user');
+  const userId: number = user?.Id ?? -1;
   // 获取URL参数
   const params = useParams<{ resourceId: string }>();
   const resourceId = decodeURIComponent(params.resourceId); // 防止中文路径乱码
@@ -182,8 +186,8 @@
   const fetchResourceInfo = async () => {
     try {
       // console.log(resourceId);
-      const response = await axios.get<Resource>(process.env.PUBLIC_URL +`/resource/info`, {
-        params: { resourceId: resourceId, userId: 22301010 }
+      const response = await axios.get<Resource>(process.env.PUBLIC_URL + `/resource/info`, {
+        params: { resourceId: resourceId, userId }
       });
       console.log('获取资源信息：', response.data);
       setResource(response.data);
@@ -211,7 +215,7 @@
     try {
       // console.log(resourceId);
       // console.log(resourceAuthorId);
-      const response = await axios.get<ResourceAuthor>(process.env.PUBLIC_URL +`/user/info`, {
+      const response = await axios.get<ResourceAuthor>(process.env.PUBLIC_URL + `/user/info`, {
         params: { userId: resourceAuthorId }
       });
       console.log('获取资源作者信息：', response.data);
@@ -231,7 +235,7 @@
   const fetchSubscriber = async () => {
     try {
       const response = await axios.get<SubscriberList>(process.env.PUBLIC_URL + `/user/subscriber`, {
-        params: {userId: 223010100}
+        params: { userId }
       });
       console.log("关注列表：", response.data);
       setSubscriberList(response.data);
@@ -255,177 +259,110 @@
     // 资源作者 ID
     const authorId = resource?.userId;
     // 当前登录用户 ID
-    const currentUserId = 223010100;
+    const currentUserId = userId;
 
     // 资源作者与浏览用户是同一人，不显示按钮
-    if (!authorId || authorId == currentUserId){
+    if (!authorId || authorId == currentUserId) {
       return null;
     }
 
     return isSubscribed ? (
-        // 如果已关注，显示“取消关注”按钮
-        <Button
-            label="取消关注"
-            onClick={async () => {
-              try {
-                const response = await axios.delete(
-                    process.env.PUBLIC_URL + '/user/subscription',
-                    {
-                      params: { userId: currentUserId, followerId: authorId }
-                    }
-                );
-
-                if (response.status === 200) {
-                  setIsSubscribed(false); // 🔥立刻更新按钮状态
-                  toast.current?.show({
-                    severity: 'success',
-                    summary: '取消成功',
-                    detail: '已取消关注该用户',
-                  });
-
-                  fetchSubscriber(); // 重新拉取完整关注列表
-                }
-              } catch (error) {
-                console.error('取消关注失败:', error);
-                toast.current?.show({
-                  severity: 'error',
-                  summary: '错误',
-                  detail: '取消关注失败',
-                });
+      // 如果已关注，显示“取消关注”按钮
+      <Button
+        label="取消关注"
+        onClick={async () => {
+          try {
+            const response = await axios.delete(
+              process.env.PUBLIC_URL + '/user/subscription',
+              {
+                params: { userId: currentUserId, followerId: authorId }
               }
-            }}
-        />
+            );
+
+            if (response.status === 200) {
+              setIsSubscribed(false); // 🔥立刻更新按钮状态
+              toast.current?.show({
+                severity: 'success',
+                summary: '取消成功',
+                detail: '已取消关注该用户',
+              });
+
+              fetchSubscriber(); // 重新拉取完整关注列表
+            }
+          } catch (error) {
+            console.error('取消关注失败:', error);
+            toast.current?.show({
+              severity: 'error',
+              summary: '错误',
+              detail: '取消关注失败',
+            });
+          }
+        }}
+      />
     ) : (
-        // 若未关注，则显示关注按钮
-        <Button
-            label="关注"
-            onClick={async () => {
-              try {
-                const postData = {
-                  userId: currentUserId,
-                  followerId: authorId,
-                };
-                const response = await axios.post(
-                    process.env.PUBLIC_URL + '/user/subscription',
-                    postData
-                );
+      // 若未关注，则显示关注按钮
+      <Button
+        label="关注"
+        onClick={async () => {
+          try {
+            const postData = {
+              userId: currentUserId,
+              followerId: authorId,
+            };
+            const response = await axios.post(
+              process.env.PUBLIC_URL + '/user/subscription',
+              postData
+            );
 
-                if (response.status === 200) {
-                  setIsSubscribed(true);  // 🔥立刻更新按钮状态
-                  toast.current?.show({
-                    severity: 'success',
-                    summary: '关注成功',
-                    detail: '已成功关注该用户',
-                  });
+            if (response.status === 200) {
+              setIsSubscribed(true);  // 🔥立刻更新按钮状态
+              toast.current?.show({
+                severity: 'success',
+                summary: '关注成功',
+                detail: '已成功关注该用户',
+              });
 
-                  fetchSubscriber(); // 刷新列表
-                }
-              } catch (error) {
-                console.error('关注失败:', error);
-                toast.current?.show({
-                  severity: 'error',
-                  summary: '错误',
-                  detail: '关注失败',
-                });
-              }
-            }}
-        />
+              fetchSubscriber(); // 刷新列表
+            }
+          } catch (error) {
+            console.error('关注失败:', error);
+            toast.current?.show({
+              severity: 'error',
+              summary: '错误',
+              detail: '关注失败',
+            });
+          }
+        }}
+      />
     );
-
-
-    // if (isSubscribed) {
-    //     return (
-    //         <Button
-    //             label="取消关注"
-    //             onClick={async () => {
-    //                 try {
-    //                     const response = await axios.delete(
-    //                         process.env.PUBLIC_URL + '/user/subscription', {
-    //                             params: {userId: currentUserId, followerId: authorId}
-    //                         }
-    //                     );
-    //
-    //                     if (response.status === 200) {
-    //                         toast.current?.show({
-    //                             severity: 'success',
-    //                             summary: '取消成功',
-    //                             detail: '已取消关注该用户',
-    //                         });
-    //                         // 重新拉取关注列表
-    //                         fetchSubscriber();
-    //                     }
-    //                 } catch (error) {
-    //                     console.error('取消关注失败:', error);
-    //                     toast.current?.show({
-    //                         severity: 'error',
-    //                         summary: '错误',
-    //                         detail: '取消关注失败',
-    //                     });
-    //                 }
-    //             }}
-    //         />
-    //     );
-    // } else {
-    //     // 未关注，显示“关注”按钮
-    //     return (
-    //         <Button
-    //             label="关注"
-    //             onClick={async () => {
-    //                 try {
-    //                     const postData = {
-    //                         userId: currentUserId,
-    //                         followerId: authorId,
-    //                     };
-    //                     const response = await axios.post(
-    //                         process.env.PUBLIC_URL + '/user/subscription',
-    //                         postData
-    //                     );
-    //
-    //                     if (response.status === 200) {
-    //                         toast.current?.show({
-    //                             severity: 'success',
-    //                             summary: '关注成功',
-    //                             detail: '已成功关注该用户',
-    //                         });
-    //                         // 重新拉取关注列表
-    //                         fetchSubscriber();
-    //                     }
-    //                 } catch (error) {
-    //                     console.error('关注失败:', error);
-    //                     toast.current?.show({
-    //                         severity: 'error',
-    //                         summary: '错误',
-    //                         detail: '关注失败',
-    //                     });
-    //                 }
-    //             }}
-    //         />
-    //     );
-    // }
   }
 
   // 判断该资源是否已被购买， 返回不同的购买按钮
   const isPurchase = () => {
     // 作者本人查看资源，不显示购买按钮
-    if (resource?.userId == 223010100) {
-      return ;
+    if (resource?.userId == userId) {
+      return;
     }
 
     // 该资源已被购买
     if (resource?.isPurchase) {
       return (
-          <Button label="已购买" style={{width:"120px", height:"44px",
-            borderRadius:"20px 0 0 20px",}} disabled={true}/>
+        <Button label="已购买" style={{
+          width: "120px", height: "44px",
+          borderRadius: "20px 0 0 20px",
+        }} disabled={true} />
       )
     } else {
       // 该资源未被购买
       return (
-          <Button
-              label="立即购买"
-              style={{width:"120px", height:"44px",
-                borderRadius:"20px 0 0 20px",}}
-              onClick={() => setVisible(true)}
-          />
+        <Button
+          label="立即购买"
+          style={{
+            width: "120px", height: "44px",
+            borderRadius: "20px 0 0 20px",
+          }}
+          onClick={() => setVisible(true)}
+        />
       )
     }
   }
@@ -434,7 +371,7 @@
   const handlePurchase = async () => {
     try {
       const postData = {
-        userId: 223010100, // 记得用户登录状态获取
+        userId, // 记得用户登录状态获取
         resourceId: resource?.resourceId
       };
       // 发送POST请求
@@ -467,14 +404,14 @@
     try {
       if (newCollectionState) {
         // 收藏操作
-        await axios.post(process.env.PUBLIC_URL +`/resource/collection`, {
-          params: { resourceId: resourceId, userId: 22301010 }
+        await axios.post(process.env.PUBLIC_URL + `/resource/collection`, {
+          params: { resourceId: resourceId, userId }
         });
         console.log('收藏资源');
       } else {
         // 取消收藏操作
-        await axios.delete(process.env.PUBLIC_URL +`/resource/collection`, {
-          params: { resourceId: resourceId, userId: 22301010 }
+        await axios.delete(process.env.PUBLIC_URL + `/resource/collection`, {
+          params: { resourceId: resourceId, userId }
         });
         console.log('取消收藏资源');
       }
@@ -504,14 +441,14 @@
     try {
       if (newLikeState) {
         // 点赞操作
-        await axios.post(process.env.PUBLIC_URL +`/resource/like`, {
-          params: { resourceId: resourceId, userId: 22301010 }
+        await axios.post(process.env.PUBLIC_URL + `/resource/like`, {
+          params: { resourceId: resourceId, userId }
         });
         console.log('点赞资源');
       } else {
         // 取消点赞操作
-        await axios.delete(process.env.PUBLIC_URL +`/resource/like`, {
-          params: { resourceId: resourceId, userId: 22301010 }
+        await axios.delete(process.env.PUBLIC_URL + `/resource/like`, {
+          params: { resourceId: resourceId, userId }
         });
         console.log('取消点赞资源');
       }
@@ -538,8 +475,8 @@
     const format = (num: number, suffix: string) => {
       const fixed = num.toFixed(1);
       return fixed.endsWith('.0')
-          ? `${Math.floor(num)}${suffix}`
-          : `${fixed}${suffix}`;
+        ? `${Math.floor(num)}${suffix}`
+        : `${fixed}${suffix}`;
     };
 
     if (absCount >= 1e6) return format(count / 1e6, "m");
@@ -551,9 +488,9 @@
   useEffect(() => {
     if (!resource) return;
     // 发帖人
-    axios.get(process.env.PUBLIC_URL +`/user/info?userId=${resource?.userId}`)
-        .then(res => setUserInfo(res.data))
-        .catch(console.error);
+    axios.get(process.env.PUBLIC_URL + `/user/info?userId=${resource?.userId}`)
+      .then(res => setUserInfo(res.data))
+      .catch(console.error);
   }, [resource]);
 
   // 当 resourceId 或分页参数变化时重新拉评论
@@ -578,9 +515,9 @@
       const pageNumber = first / rows + 1;
       console.log("当前页" + pageNumber + "size" + rows);
       const response = await axios.get<CommentList>(
-          process.env.PUBLIC_URL +`/comments`, {
-            params: { id: resourceId, pageNumber, rows, type: 'resource' }
-          }
+        process.env.PUBLIC_URL + `/comments`, {
+        params: { id: resourceId, pageNumber, rows, type: 'resource' }
+      }
       );
       console.log('获取评论列表:', response.data.records);
       setComments(response.data.records);
@@ -589,8 +526,8 @@
       response.data.records.forEach(comment => {
         if (comment.userId != null && !commentUserInfos.has(comment.userId)) {
           axios.get<UserInfo>(
-              process.env.PUBLIC_URL +`/user/info`,
-              { params: { userId: comment.userId } }
+            process.env.PUBLIC_URL + `/user/info`,
+            { params: { userId: comment.userId } }
           ).then(res => {
             setCommentUserInfos(prev => new Map(prev).set(comment.userId!, res.data));
           });
@@ -609,7 +546,7 @@
     // console.log(typeof resourceId);
     try {
       const newComment: NewComment = {
-        userId: 22301145,
+        userId,
         rewardId: 0,
         threadId: 0,
         resourceId: resource.resourceId,
@@ -618,7 +555,7 @@
         createAt: new Date().toISOString().slice(0, 19).replace('T', ' ')
       };
 
-      const response = await axios.post(process.env.PUBLIC_URL +'/comment', newComment);
+      const response = await axios.post(process.env.PUBLIC_URL + '/comment', newComment);
 
       if (response.status === 200) {
         toast.current?.show({ severity: 'success', summary: 'Success', detail: '回复成功' });
@@ -640,7 +577,7 @@
 
     try {
       const newComment: NewComment = {
-        userId: 22301145,
+        userId,
         rewardId: 0,
         threadId: 0,
         resourceId: resource.resourceId,
@@ -649,7 +586,7 @@
         createAt: new Date().toISOString().slice(0, 19).replace('T', ' ')
       };
 
-      const response = await axios.post(process.env.PUBLIC_URL +'/comment', newComment);
+      const response = await axios.post(process.env.PUBLIC_URL + '/comment', newComment);
 
       if (response.status === 200) {
         toast.current?.show({ severity: 'success', summary: 'Success', detail: '评论成功' });
@@ -671,7 +608,7 @@
     try {
       // 调用 DELETE 接口，URL 中最后一段是要删除的 commentId
       const response = await axios.delete(
-          process.env.PUBLIC_URL +`/comment?commentId=${commentId}`
+        process.env.PUBLIC_URL + `/comment?commentId=${commentId}`
       );
 
       if (response.status === 200) {
@@ -687,219 +624,219 @@
   };
 
   const ReplyHeader = (
-      <div className="flex align-items-center gap-1">
-        <h3>回复评论</h3>
-      </div>
+    <div className="flex align-items-center gap-1">
+      <h3>回复评论</h3>
+    </div>
   );
   if (!resourceId || !userInfo) return <div>Loading...</div>;
 
-  return(
-      <div className="resource-detail-container">
-        <Toast ref={toast}></Toast>
-        {/*资源标题*/}
-        <div className="resource-header">
-          {resource?.resourceName}
-        </div>
-        {/*资源详细信息*/}
-        <div className="resource-info">
-          <Image
-              src={(process.env.NEXT_PUBLIC_NGINX_URL! + resource?.resourcePicture)}
-              alt= {resource?.resourceName}
-              width="540px"
-              height="300px"
-          />
-          <div className="resource-info-detail">
-            {/*资源热度*/}
-            <div className="resource-hot">
-              <Fire theme="outline" size="50" fill="#f5a623" strokeWidth={3}/>
-              <span className="resource-hot-data">{resource?.hot}</span>
-            </div>
-
-            {/*资源标签*/}
-            <div className="resource-label">
-              {resource?.gameplayList.map((tag, index) => (
-                  <Button
-                      key={index} label={tag}
-                      className="resource-label-button"
-                      onClick={() => {
-                        router.push(`/resource/classification/`)
-                      }}
-                  />
-              ))}
-            </div>
-
-            {/*资源浏览量和下载量*/}
-            <div className="resource-data">
-              <div className="resource-data-container">
-                <i className="pi pi-download"/>
-                <span className="resource-data-container-number">下载量：{formatCount(resource?.downloads)}</span>
-              </div>
-            </div>
-
-            {/*资源发布时间和更新时间*/}
-            <div className="resource-time">
-              <div className="resource-time-data">
-                发布时间：{resource?.uploadTime}
-              </div>
-              <div className="resource-time-data">
-                更新时间：{resource?.lastUpdateTime}
-              </div>
-            </div>
-          </div>
-        </div>
-        {/*资源总结*/}
-        <div className="resource-summary">
-          {resource?.resourceSummary}
-        </div>
-        {/*关注作者、点赞、抽藏、购买资源*/}
-        <div className="resource-operation">
-          <div className="resource-author">
-            <Avatar
-                image={`${process.env.NEXT_PUBLIC_NGINX_URL}/users/${resourceAuthor?.avatar}`}
-                shape="circle"
-                style={{ width: "60px", height: "60px" }}
-            />
-            <span className="resource-author-name">{resourceAuthor?.username}</span>
-
-            {handleSubscribe()}
-          </div>
-
-          <div className="resource-operation-detail">
-            <div className="resource-operation-detail-data">
-              <i
-                  className={isCollected ? "pi pi-star-fill" : "pi pi-star"}
-                  onClick={handleCollection}
-                  style={{
-                    cursor: 'pointer',
-                    fontSize: '30px',
-                    color: isCollected ? 'rgba(82, 102, 101, 1)' : 'inherit',
-                    transition: 'color 0.3s ease'
-                  }}
-              />
-              <span>{formatCount(collectionCount)}</span>
-            </div>
-
-
-
-            <div className="resource-operation-detail-data">
-              {isLiked ? <SmilingFace
-                      theme="filled"
-                      size="30"
-                      fill="#526665"
-                      strokeWidth={5}
-                      onClick={handleLike}
-                      style={{ cursor: 'pointer' }}
-                  />
-                  : <SmilingFace
-                      theme="outline"
-                      size="30"
-                      fill="#526665"
-                      strokeWidth={5}
-                      onClick={handleLike}
-                      style={{ cursor: 'pointer' }}
-                  />
-              }
-              <span>{formatCount(likeCount)}</span>
-            </div>
-
-            <ButtonGroup >
-              {isPurchase()}
-              <Button label={"$" + resource?.price} style={{
-                height:"44px", background:"rgba(82, 102, 101, 1)",
-                borderStyle:"solid", borderWidth:"1px", borderColor:"rgba(82, 102, 101, 1)",
-                borderRadius:"0 20px 20px 0", fontSize:"26px",
-              }} disabled={true}/>
-            </ButtonGroup>
-          </div>
-        </div>
-        {/*资源详情*/}
-        <div className="resource-detail">
-          <h1 className="resource-detail-title">资源详情</h1>
-          <div className="resource-detail-text">
-            {resource?.resourceDetail}
-          </div>
-        </div>
-        {/* 评论列表 */}
-        <div className="comments-section">
-          <div className="comments-header">
-            <h2>评论 ({totalComments})</h2>
-            <Link href="/community" className="no-underline">进入社区</Link>
-          </div>
-          <div className="comments-input">
-            <Avatar image={process.env.NEXT_PUBLIC_NGINX_URL + "users/" + userInfo.avatar} size="large" shape="circle" />
-            <InputText value={commentValue} placeholder="发布你的评论" onChange={(e) => setCommentValue(e.target.value)} />
-            <Button label="发布评论" onClick={publishComment} disabled={!commentValue.trim()} />
-          </div>
-          <div className="comments-list">
-            {comments.map((comment, index) => (
-                <div key={comment.commentId} className="comment-item">
-                  <div className="comment-user">
-                    <Avatar
-                        image={comment.userId ? process.env.NEXT_PUBLIC_NGINX_URL + "users/" + commentUserInfos.get(comment.userId)?.avatar : '/default-avatar.png'}
-                        size="normal"
-                        shape="circle"
-                    />
-                    <div className="comment-meta">
-                                    <span className="username">
-                                        {comment.userId ? commentUserInfos.get(comment.userId)?.username : '匿名用户'}
-                                    </span>
-                      <div className="comment-time">
-                        <span className="floor">#{first + index + 1}楼</span>
-                        <span className="time">{comment.createAt}</span>
-                      </div>
-                    </div>
-                    <i className='pi pi-ellipsis-v' onClick={(e) => ops.current[index].toggle(e)} />
-                  </div>
-                  <div className="comment-content">
-                    {<span className="reply-to">{getReplyUserName(comment.replyId)}</span>}
-                    <p>{comment.content}</p>
-                  </div>
-                  <OverlayPanel       // 回调 ref：把实例放到 ops.current 对应的位置
-                      ref={el => {
-                        if (el) ops.current[index] = el;
-                      }}>
-                    <Button label="回复" text size="small" onClick={() => setVisibleReply(true)} />
-                    {comment.userId === 22301010 &&
-                        <Button
-                            label="删除"
-                            text
-                            size="small"
-                            onClick={() => { console.log('Deleting comment:', comment.commentId, 'by user:', comment.userId); deleteComment(comment.commentId) }}
-                        />
-                    }
-                  </OverlayPanel>
-                  <Sidebar className='reply' header={ReplyHeader} visible={visibleReply} position="bottom" onHide={() => setVisibleReply(false)}>
-                    <div className="reply-input">
-                      <Avatar image={process.env.NEXT_PUBLIC_NGINX_URL + "users/" + userInfo.avatar} size="large" shape="circle" />
-                      <InputText value={replyValue} placeholder="发布你的评论" onChange={(e) => setReplyValue(e.target.value)} />
-                      <Button label="发布评论" onClick={() => publishReply(comment.commentId)} disabled={!replyValue.trim()} />
-                    </div>
-                  </Sidebar>
-                </div>
-            ))}
-            {totalComments > 5 && (<Paginator className="Paginator" first={first} rows={rows} totalRecords={totalComments} rowsPerPageOptions={[5, 10]} onPageChange={onPageChange} />)}
-          </div>
-        </div>
-
-        {/*用户购买资源弹窗*/}
-        <Dialog
-            header="购买资源"
-            visible={visible}
-            onHide={() => setVisible(false)}
-            className="purchase-dialog"
-            modal
-            footer={
-              <div className="dialog-footer">
-                <Button label="购买" icon="pi pi-check" onClick={handlePurchase} autoFocus />
-                <Button label="取消" icon="pi pi-times" onClick={() => setVisible(false)} className="p-button-text" />
-              </div>
-            }
-        >
-          <div className="form-text">
-            购买该资源需要{resource?.price}积分，是否购买？
-          </div>
-        </Dialog>
+  return (
+    <div className="resource-detail-container">
+      <Toast ref={toast}></Toast>
+      {/*资源标题*/}
+      <div className="resource-header">
+        {resource?.resourceName}
       </div>
+      {/*资源详细信息*/}
+      <div className="resource-info">
+        <Image
+          src={(process.env.NEXT_PUBLIC_NGINX_URL! + resource?.resourcePicture)}
+          alt={resource?.resourceName}
+          width="540px"
+          height="300px"
+        />
+        <div className="resource-info-detail">
+          {/*资源热度*/}
+          <div className="resource-hot">
+            <Fire theme="outline" size="50" fill="#f5a623" strokeWidth={3} />
+            <span className="resource-hot-data">{resource?.hot}</span>
+          </div>
+
+          {/*资源标签*/}
+          <div className="resource-label">
+            {resource?.gameplayList.map((tag, index) => (
+              <Button
+                key={index} label={tag}
+                className="resource-label-button"
+                onClick={() => {
+                  router.push(`/resource/classification/`)
+                }}
+              />
+            ))}
+          </div>
+
+          {/*资源浏览量和下载量*/}
+          <div className="resource-data">
+            <div className="resource-data-container">
+              <i className="pi pi-download" />
+              <span className="resource-data-container-number">下载量：{formatCount(resource?.downloads)}</span>
+            </div>
+          </div>
+
+          {/*资源发布时间和更新时间*/}
+          <div className="resource-time">
+            <div className="resource-time-data">
+              发布时间：{resource?.uploadTime}
+            </div>
+            <div className="resource-time-data">
+              更新时间：{resource?.lastUpdateTime}
+            </div>
+          </div>
+        </div>
+      </div>
+      {/*资源总结*/}
+      <div className="resource-summary">
+        {resource?.resourceSummary}
+      </div>
+      {/*关注作者、点赞、抽藏、购买资源*/}
+      <div className="resource-operation">
+        <div className="resource-author">
+          <Avatar
+            image={`${process.env.NEXT_PUBLIC_NGINX_URL}/users/${resourceAuthor?.avatar}`}
+            shape="circle"
+            style={{ width: "60px", height: "60px" }}
+          />
+          <span className="resource-author-name">{resourceAuthor?.username}</span>
+
+          {handleSubscribe()}
+        </div>
+
+        <div className="resource-operation-detail">
+          <div className="resource-operation-detail-data">
+            <i
+              className={isCollected ? "pi pi-star-fill" : "pi pi-star"}
+              onClick={handleCollection}
+              style={{
+                cursor: 'pointer',
+                fontSize: '30px',
+                color: isCollected ? 'rgba(82, 102, 101, 1)' : 'inherit',
+                transition: 'color 0.3s ease'
+              }}
+            />
+            <span>{formatCount(collectionCount)}</span>
+          </div>
+
+
+
+          <div className="resource-operation-detail-data">
+            {isLiked ? <SmilingFace
+              theme="filled"
+              size="30"
+              fill="#526665"
+              strokeWidth={5}
+              onClick={handleLike}
+              style={{ cursor: 'pointer' }}
+            />
+              : <SmilingFace
+                theme="outline"
+                size="30"
+                fill="#526665"
+                strokeWidth={5}
+                onClick={handleLike}
+                style={{ cursor: 'pointer' }}
+              />
+            }
+            <span>{formatCount(likeCount)}</span>
+          </div>
+
+          <ButtonGroup >
+            {isPurchase()}
+            <Button label={"$" + resource?.price} style={{
+              height: "44px", background: "rgba(82, 102, 101, 1)",
+              borderStyle: "solid", borderWidth: "1px", borderColor: "rgba(82, 102, 101, 1)",
+              borderRadius: "0 20px 20px 0", fontSize: "26px",
+            }} disabled={true} />
+          </ButtonGroup>
+        </div>
+      </div>
+      {/*资源详情*/}
+      <div className="resource-detail">
+        <h1 className="resource-detail-title">资源详情</h1>
+        <div className="resource-detail-text">
+          {resource?.resourceDetail}
+        </div>
+      </div>
+      {/* 评论列表 */}
+      <div className="comments-section">
+        <div className="comments-header">
+          <h2>评论 ({totalComments})</h2>
+          <Link href="/community" className="no-underline">进入社区</Link>
+        </div>
+        <div className="comments-input">
+          <Avatar image={process.env.NEXT_PUBLIC_NGINX_URL + "users/" + userInfo.avatar} size="large" shape="circle" />
+          <InputText value={commentValue} placeholder="发布你的评论" onChange={(e) => setCommentValue(e.target.value)} />
+          <Button label="发布评论" onClick={publishComment} disabled={!commentValue.trim()} />
+        </div>
+        <div className="comments-list">
+          {comments.map((comment, index) => (
+            <div key={comment.commentId} className="comment-item">
+              <div className="comment-user">
+                <Avatar
+                  image={comment.userId ? process.env.NEXT_PUBLIC_NGINX_URL + "users/" + commentUserInfos.get(comment.userId)?.avatar : '/default-avatar.png'}
+                  size="normal"
+                  shape="circle"
+                />
+                <div className="comment-meta">
+                  <span className="username">
+                    {comment.userId ? commentUserInfos.get(comment.userId)?.username : '匿名用户'}
+                  </span>
+                  <div className="comment-time">
+                    <span className="floor">#{first + index + 1}楼</span>
+                    <span className="time">{comment.createAt}</span>
+                  </div>
+                </div>
+                <i className='pi pi-ellipsis-v' onClick={(e) => ops.current[index].toggle(e)} />
+              </div>
+              <div className="comment-content">
+                {<span className="reply-to">{getReplyUserName(comment.replyId)}</span>}
+                <p>{comment.content}</p>
+              </div>
+              <OverlayPanel       // 回调 ref：把实例放到 ops.current 对应的位置
+                ref={el => {
+                  if (el) ops.current[index] = el;
+                }}>
+                <Button label="回复" text size="small" onClick={() => setVisibleReply(true)} />
+                {comment.userId === userId &&
+                  <Button
+                    label="删除"
+                    text
+                    size="small"
+                    onClick={() => { console.log('Deleting comment:', comment.commentId, 'by user:', comment.userId); deleteComment(comment.commentId) }}
+                  />
+                }
+              </OverlayPanel>
+              <Sidebar className='reply' header={ReplyHeader} visible={visibleReply} position="bottom" onHide={() => setVisibleReply(false)}>
+                <div className="reply-input">
+                  <Avatar image={process.env.NEXT_PUBLIC_NGINX_URL + "users/" + userInfo.avatar} size="large" shape="circle" />
+                  <InputText value={replyValue} placeholder="发布你的评论" onChange={(e) => setReplyValue(e.target.value)} />
+                  <Button label="发布评论" onClick={() => publishReply(comment.commentId)} disabled={!replyValue.trim()} />
+                </div>
+              </Sidebar>
+            </div>
+          ))}
+          {totalComments > 5 && (<Paginator className="Paginator" first={first} rows={rows} totalRecords={totalComments} rowsPerPageOptions={[5, 10]} onPageChange={onPageChange} />)}
+        </div>
+      </div>
+
+      {/*用户购买资源弹窗*/}
+      <Dialog
+        header="购买资源"
+        visible={visible}
+        onHide={() => setVisible(false)}
+        className="purchase-dialog"
+        modal
+        footer={
+          <div className="dialog-footer">
+            <Button label="购买" icon="pi pi-check" onClick={handlePurchase} autoFocus />
+            <Button label="取消" icon="pi pi-times" onClick={() => setVisible(false)} className="p-button-text" />
+          </div>
+        }
+      >
+        <div className="form-text">
+          购买该资源需要{resource?.price}积分，是否购买？
+        </div>
+      </Dialog>
+    </div>
   )
 }
 
diff --git a/src/app/reward/page.tsx b/src/app/reward/page.tsx
index 59abf97..b53d93c 100644
--- a/src/app/reward/page.tsx
+++ b/src/app/reward/page.tsx
@@ -20,9 +20,12 @@
 // 防抖函数
 import { debounce } from 'lodash';
 import { TabView, TabPanel } from 'primereact/tabview';
+import { useLocalStorage } from '../hook/useLocalStorage';
 // 样式
 import './reward.scss';
-
+interface User {
+    Id: number;
+}
 // 悬赏列表数据
 interface Reward {
     rewardId: number;
@@ -41,6 +44,8 @@
 
 // 社区详情页面
 export default function RewardDetailPage() {
+    const user = useLocalStorage<User>('user');
+    const userId: number = user?.Id ?? -1;
     // 页面跳转
     const router = useRouter();
     // 帖子列表数据
@@ -106,7 +111,7 @@
         try {
             const currentDate = new Date().toISOString();
             const postData = {
-                userId: 22301145, // 记得用户登录状态获取
+                userId, // 记得用户登录状态获取
                 rewardPicture: formData.rewardPicture,
                 rewardName: formData.rewardName,
                 rewardDescription: formData.rewardDescription,
@@ -248,7 +253,7 @@
                         <FileUpload
                             mode="basic"
                             name="thread-image"
-                            url={process.env.PUBLIC_URL +"/file"} // 与后端交互的URL
+                            url={process.env.PUBLIC_URL + "/file"} // 与后端交互的URL
                             accept="image/*"
                             maxFileSize={10000000000}
                             chooseLabel="选择悬赏封面"
diff --git "a/src/app/reward/reward-detail/\133rewardId\135/page.tsx" "b/src/app/reward/reward-detail/\133rewardId\135/page.tsx"
index fb8f8b1..0ba1a04 100644
--- "a/src/app/reward/reward-detail/\133rewardId\135/page.tsx"
+++ "b/src/app/reward/reward-detail/\133rewardId\135/page.tsx"
@@ -16,9 +16,12 @@
 import { Paginator, type PaginatorPageChangeEvent } from 'primereact/paginator';
 // 消息提醒
 import { Toast } from 'primereact/toast';
+import { useLocalStorage } from '../../../hook/useLocalStorage';
 // 样式
 import './reward-detail.scss';
-
+interface User {
+    Id: number;
+}
 
 // 评论信息
 interface Comment {
@@ -69,6 +72,8 @@
 
 //帖子详情界面
 export default function RewardDetailPage() {
+    const user = useLocalStorage<User>('user');
+    const userId: number = user?.Id ?? -1;
     // 获取URL参数，页面跳转
     const params = useParams<{ rewardId: string }>()
     const rewardId = decodeURIComponent(params.rewardId); // 防止中文路径乱码
@@ -105,7 +110,7 @@
 
     const fetchRewardInfo = async () => {
         try {
-            const { data } = await axios.get(process.env.PUBLIC_URL +`/reward/info?rewardId=${rewardId}`);
+            const { data } = await axios.get(process.env.PUBLIC_URL + `/reward/info?rewardId=${rewardId}`);
             setRewardInfo(data);
         } catch (err) {
             console.error(err);
@@ -117,7 +122,7 @@
     useEffect(() => {
         if (!rewardInfo) return;
         // 发帖人
-        axios.get(process.env.PUBLIC_URL +`/user/info?userId=${rewardInfo.userId}`)
+        axios.get(process.env.PUBLIC_URL + `/user/info?userId=${rewardInfo.userId}`)
             .then(res => setUserInfo(res.data))
             .catch(console.error);
     }, [rewardInfo]);
@@ -145,7 +150,7 @@
             const pageNumber = first / rows + 1;
             console.log("当前页" + pageNumber + "size" + rows);
             const response = await axios.get<CommentList>(
-                process.env.PUBLIC_URL +`/comments`, {
+                process.env.PUBLIC_URL + `/comments`, {
                 params: { id: rewardId, pageNumber, rows, type: 'reward' }
             }
             );
@@ -156,7 +161,7 @@
             response.data.records.forEach(comment => {
                 if (comment.userId != null && !commentUserInfos.has(comment.userId)) {
                     axios.get<UserInfo>(
-                        process.env.PUBLIC_URL +`/user/info`,
+                        process.env.PUBLIC_URL + `/user/info`,
                         { params: { userId: comment.userId } }
                     ).then(res => {
                         setCommentUserInfos(prev => new Map(prev).set(comment.userId!, res.data));
@@ -175,7 +180,7 @@
         console.log('发布评论:', commentId);
         try {
             const newComment: NewComment = {
-                userId: 22301145,
+                userId,
                 rewardId: rewardInfo.rewardId,
                 threadId: 0,
                 resourceId: 0,
@@ -184,7 +189,7 @@
                 createAt: new Date().toISOString().slice(0, 19).replace('T', ' ')
             };
 
-            const response = await axios.post(process.env.PUBLIC_URL +'/comment', newComment);
+            const response = await axios.post(process.env.PUBLIC_URL + '/comment', newComment);
 
             if (response.status === 200) {
                 toast.current?.show({ severity: 'success', summary: 'Success', detail: '回复成功' });
@@ -206,7 +211,7 @@
 
         try {
             const newComment: NewComment = {
-                userId: 22301145,
+                userId,
                 rewardId: rewardInfo.rewardId,
                 threadId: 0,
                 resourceId: 0,
@@ -215,7 +220,7 @@
                 createAt: new Date().toISOString().slice(0, 19).replace('T', ' ')
             };
 
-            const response = await axios.post(process.env.PUBLIC_URL +'/comment', newComment);
+            const response = await axios.post(process.env.PUBLIC_URL + '/comment', newComment);
 
             if (response.status === 200) {
                 toast.current?.show({ severity: 'success', summary: 'Success', detail: '评论成功' });
@@ -237,7 +242,7 @@
         try {
             // 调用 DELETE 接口，URL 中最后一段是要删除的 commentId
             const response = await axios.delete(
-                process.env.PUBLIC_URL +`/comment?commentId=${commentId}`
+                process.env.PUBLIC_URL + `/comment?commentId=${commentId}`
             );
 
             if (response.status === 200) {
@@ -338,7 +343,7 @@
                                     if (el) ops.current[index] = el;
                                 }}>
                                 <Button label="回复" text size="small" onClick={() => setVisibleReply(true)} />
-                                {comment.userId === 22301145 &&
+                                {comment.userId === userId &&
                                     <Button
                                         label="删除"
                                         text
diff --git a/src/app/user/component/userAvatar.tsx b/src/app/user/component/userAvatar.tsx
index 4ed94d7..a7e4802 100644
--- a/src/app/user/component/userAvatar.tsx
+++ b/src/app/user/component/userAvatar.tsx
@@ -18,11 +18,17 @@
 import { Toast } from 'primereact/toast';
 // 接口传输
 import axios from 'axios';
+import { useLocalStorage } from '../../hook/useLocalStorage';
 // 样式
 import './user-avatar.scss';
-
+interface User {
+    Id: number;
+}
 // 用户下拉框
 export default function UserAvatar() {
+    const user = useLocalStorage<User>('user');
+    const userId: number = user?.Id ?? -1;
+
     // 功能选项
     const op = useRef<OverlayPanel>(null);
     let hoverTimeout: NodeJS.Timeout;
@@ -59,7 +65,7 @@
     const editPassward = async () => {
         try {
             await axios.put(process.env.PUBLIC_URL + `/user/password`, {
-                params: { userId: 22301145, password: oldPasswardValue, newPassword: passwardValue }
+                params: { userId, password: oldPasswardValue, newPassword: passwardValue }
             });
             toast.current?.show({ severity: 'success', summary: 'success', detail: '修改密码成功' });
             setShowEditPassword(false);
@@ -72,7 +78,7 @@
     const editSign = async () => {
         try {
             await axios.put(process.env.PUBLIC_URL + `/user/signature`, {
-                params: { userId: 22301145, signature: signValue }
+                params: { userId, signature: signValue }
             });
             toast.current?.show({ severity: 'success', summary: 'success', detail: '修改签名成功' });
             setShowEditSignature(false);
@@ -86,7 +92,7 @@
     const editAvatar = async () => {
         try {
             await axios.put(process.env.PUBLIC_URL + `/user/avatar`, {
-                params: { userId: 22301145, avatar: avatarUrl }
+                params: { userId, avatar: avatarUrl }
             });
             toast.current?.show({ severity: 'success', summary: 'success', detail: '修改头像成功' });
             setShowEditAvatar(false);
diff --git a/src/app/user/manage/resources/page.tsx b/src/app/user/manage/resources/page.tsx
index e3b7301..4d0d03f 100644
--- a/src/app/user/manage/resources/page.tsx
+++ b/src/app/user/manage/resources/page.tsx
@@ -1,30 +1,33 @@
 'use client';
-import React, {useEffect, useRef, useState} from 'react';
+import React, { useEffect, useRef, useState } from 'react';
 // import {TabView, TabPanel} from "primereact/tabview";
-import {Card} from "primereact/card";
-import {Image} from "primereact/image";
-import {Button} from "primereact/button";
+import { Card } from "primereact/card";
+import { Image } from "primereact/image";
+import { Button } from "primereact/button";
 // 弹窗
 import { Dialog } from 'primereact/dialog';
-import {InputText} from "primereact/inputtext";
-import {InputTextarea} from "primereact/inputtextarea";
-import {FileUpload} from "primereact/fileupload";
+import { InputText } from "primereact/inputtext";
+import { InputTextarea } from "primereact/inputtextarea";
+import { FileUpload } from "primereact/fileupload";
 // 类型转换
-import {toNumber} from "lodash";
+import { toNumber } from "lodash";
 // 消息提醒
-import {Toast} from 'primereact/toast';
+import { Toast } from 'primereact/toast';
 // 接口传输
 import axios from "axios";
 // 页面跳转
-import {useRouter} from "next/navigation";
+import { useRouter } from "next/navigation";
 // 分页
 import { Paginator, type PaginatorPageChangeEvent } from 'primereact/paginator';
 // 密码
 import { Password } from 'primereact/password';
+import { useLocalStorage } from '../../../hook/useLocalStorage';
 // 样式
 import './resources.scss';
 
-
+interface User {
+    Id: number;
+}
 
 // 用户发布的资源
 interface Resource {
@@ -54,12 +57,15 @@
 }
 
 export default function UserManageResources() {
+    const user = useLocalStorage<User>('user');
+    const userId: number = user?.Id ?? -1;
+
     // 路由
     const router = useRouter();
     // 发布资源列表
     const [resourceList, setResourceList] = useState<Resource[]>([]);
     // 要删除资源的id
-    const [deleteResourceId, setDeleteResourceId] =  useState<number>(0);
+    const [deleteResourceId, setDeleteResourceId] = useState<number>(0);
     // 资源封面路径
     const [resourcePictureUrl, setResourcePictureUrl] = useState<string>('');
     // 编辑资源的分类
@@ -100,7 +106,7 @@
         try {
             const pageNumber = first / rows + 1;
             const response = await axios.get<ResourceList>(process.env.PUBLIC_URL + `/user/upload`, {
-                params: {userId: 22301010, pageNumber: pageNumber, rows: rows}
+                params: { userId, pageNumber: pageNumber, rows: rows }
             });
 
             console.log('获取发布资源列表：', response.data.records);
@@ -108,7 +114,7 @@
             setTotalResources(response.data.total);
         } catch (err) {
             console.error('获取发布资源失败', err);
-            toast.current?.show({severity: 'error', summary: 'error', detail: '获取发布资源失败'});
+            toast.current?.show({ severity: 'error', summary: 'error', detail: '获取发布资源失败' });
         }
     };
 
@@ -117,20 +123,20 @@
         try {
             const deleteData = {
                 resourceId: deleteResourceId,
-                userId: 223010100,
+                userId,
                 password: deleteResourceFormData.password,
             };
             // 发送DELETE请求
             const response = await axios.delete(process.env.PUBLIC_URL + `/resource`, {
-                params: {resourceId: deleteData.resourceId, userId: deleteData.userId, password: deleteData.password},
+                params: { resourceId: deleteData.resourceId, userId: deleteData.userId, password: deleteData.password },
             });
-            console.log("用户" + 22301010 + "要删除" + deleteData.resourceId + "号资源");
+            console.log("用户" + userId + "要删除" + deleteData.resourceId + "号资源");
             console.log(deleteData);
 
             if (response.status === 204) {
                 console.log("用户成功删除资源");
                 // setIsDeleteResource(true);
-                toast.current?.show({severity: 'success', summary: 'Success', detail: '删除资源成功'});
+                toast.current?.show({ severity: 'success', summary: 'Success', detail: '删除资源成功' });
                 setDeleteVisible(false);
                 // 重置表单
                 setDeleteResourceFormData({
@@ -140,7 +146,7 @@
                 fetchResourceList();
             } else {
                 console.log('用户密码错误');
-                toast.current?.show({severity: 'error', summary: 'Error', detail: '密码错误，删除资源失败'});
+                toast.current?.show({ severity: 'error', summary: 'Error', detail: '密码错误，删除资源失败' });
             }
 
         } catch (error) {
@@ -187,10 +193,10 @@
             <div className="resource-list">
                 {resourceList.map((resourceList) => (
                     <Card key={resourceList.resourceId} className="resources-list-card"
-                          onClick={() => router.push(`/resource/resource-detail/${resourceList.resourceId}`)}>
+                        onClick={() => router.push(`/resource/resource-detail/${resourceList.resourceId}`)}>
                         <Image alt="avatar"
-                               src={process.env.NEXT_PUBLIC_NGINX_URL + "resource/" + resourceList.resourcePicture}
-                               className="resource-avatar" width="250" height="140"/>
+                            src={process.env.NEXT_PUBLIC_NGINX_URL + "resource/" + resourceList.resourcePicture}
+                            className="resource-avatar" width="250" height="140" />
                         <div className="resource-header">
                             <div className="resource-content">
                                 <h3>{resourceList.resourceName}</h3>
@@ -202,7 +208,7 @@
                                     onClick={(e) => {
                                         e.stopPropagation(); // 关键修复：阻止事件冒泡，避免触发Card的点击事件
                                         setEditVisible(true);
-                                        
+
                                         setResourceClassify(resourceList.classify);
                                         setEditResourceFormData({
                                             resourceId: resourceList.resourceId,
@@ -221,7 +227,7 @@
                                         setDeleteResourceId(resourceList.resourceId);
                                         setDeleteVisible(true);
                                     }}
-                                    style={{backgroundColor: "rgba(255, 87, 51, 1)"}}
+                                    style={{ backgroundColor: "rgba(255, 87, 51, 1)" }}
                                 />
                             </div>
                         </div>
@@ -295,7 +301,7 @@
                             value={editResourceFormData.resourceName}
                             onChange={(e) => setEditResourceFormData(prev => ({
                                 ...prev,
-                                resourceName:  e.target.value
+                                resourceName: e.target.value
                             }))}
                             className="w-full"
                         />
@@ -309,7 +315,7 @@
                             value={editResourceFormData.resourceSummary}
                             onChange={(e) => setEditResourceFormData(prev => ({
                                 ...prev,
-                                resourceSummary:  e.target.value
+                                resourceSummary: e.target.value
                             }))}
                             className="w-full"
                         />
@@ -323,7 +329,7 @@
                             value={editResourceFormData.resourceDetail}
                             onChange={(e) => setEditResourceFormData(prev => ({
                                 ...prev,
-                                resourceDetail:  e.target.value
+                                resourceDetail: e.target.value
                             }))}
                             rows={5}
                             className="w-full"
@@ -338,7 +344,7 @@
                             value={editResourceFormData?.price.toString()}
                             onChange={(e) => setEditResourceFormData(prev => ({
                                 ...prev,
-                                price:  e.target.value
+                                price: e.target.value
                             }))}
                             className="w-full"
                         />
diff --git a/src/app/user/page.tsx b/src/app/user/page.tsx
index 8201bc5..5d36dc4 100644
--- a/src/app/user/page.tsx
+++ b/src/app/user/page.tsx
@@ -5,12 +5,12 @@
 import { Avatar } from 'primereact/avatar';
 import { Button } from 'primereact/button';
 import { Card } from 'primereact/card';
-import {Image} from "primereact/image";
+import { Image } from "primereact/image";
 // 发布资源
 import { Dialog } from 'primereact/dialog';
-import {InputText} from "primereact/inputtext";
-import {InputTextarea} from "primereact/inputtextarea";
-import {FileUpload} from "primereact/fileupload";
+import { InputText } from "primereact/inputtext";
+import { InputTextarea } from "primereact/inputtextarea";
+import { FileUpload } from "primereact/fileupload";
 // 资源分类
 import { RadioButton, RadioButtonChangeEvent } from "primereact/radiobutton";
 // 资源标签
@@ -30,10 +30,14 @@
 
 // 接口传输
 import axios from "axios";
-
+import { useLocalStorage } from '../hook/useLocalStorage';
 // 样式
 import './user.scss';
 
+interface User {
+    Id: number;
+};
+
 // 用户信息
 interface UserInfo {
     userId: number;
@@ -42,7 +46,7 @@
     avatar: string;
     followerCount: number;// 粉丝数
     subscriberCount: number;// 关注数
-    signature:  string;// 个性签名
+    signature: string;// 个性签名
     uploadAmount: number;
     purchaseAmount: number;
     credits: number;
@@ -50,9 +54,9 @@
 
 // 用户数据
 interface UserData {
-    subscriberCount:  number; // 关注数
-    uploadAmount:  number; // 上传量（资源个数）
-    beDownloadedAmount:  number; // 上传资源被下载量
+    subscriberCount: number; // 关注数
+    uploadAmount: number; // 上传量（资源个数）
+    beDownloadedAmount: number; // 上传资源被下载量
     seedPercentageList: number[]; // 上传资源类型百分比列表，按材质包、模组、整合包、地图的顺序返回
 }
 
@@ -60,17 +64,17 @@
 interface Resource {
     resourceId: number;
     resourceName: string;
-    resourcePicture:  string;
-    resourceSummary:  string; // 资源简介（一句话）
+    resourcePicture: string;
+    resourceSummary: string; // 资源简介（一句话）
     resourceDetail: string; // 资源介绍
     uploadTime: string; // 上传时间
-    lastUpdateTime:  string; // 最近更新时间
-    price:  number;
-    downloads:  number;
-    likes:   number;
+    lastUpdateTime: string; // 最近更新时间
+    price: number;
+    downloads: number;
+    likes: number;
     collections: number;
     comments: number;
-    seeds:  number; // 种子数
+    seeds: number; // 种子数
     classify: string; // 资源分类(材质包：resourcePack,模组：mod,整合包：modPack ,地图：map
 }
 
@@ -139,6 +143,9 @@
 ];
 
 export default function UserPage() {
+    const user = useLocalStorage<User>('user');
+    const userId: number = user?.Id ?? -1;
+
     // 路由
     const router = useRouter();
     // 发布资源列表
@@ -188,7 +195,7 @@
     const fetchUserInfo = async () => {
         try {
             const response = await axios.get<UserInfo>(process.env.PUBLIC_URL + `/user/info`, {
-                params: { userId: 22301010 }
+                params: { userId }
             });
             console.log('获取用户信息：', response.data);
             setUserInfo(response.data);
@@ -202,7 +209,7 @@
     const fetchUserData = async () => {
         try {
             const response = await axios.get<UserData>(process.env.PUBLIC_URL + `/user/data`, {
-                params: { userId: 22301010 }
+                params: { userId }
             });
             console.log('获取用户数据：', response.data);
             setUserData(response.data);
@@ -233,8 +240,8 @@
     // 获取发布资源
     const fetchResourceList = async () => {
         try {
-            const response = await axios.get<ResourceList>(process.env.PUBLIC_URL +`/user/upload`, {
-                params: { userId: 22301010, pageNumber: 1, rows: 3 }
+            const response = await axios.get<ResourceList>(process.env.PUBLIC_URL + `/user/upload`, {
+                params: { userId, pageNumber: 1, rows: 3 }
             });
             console.log('获取发布资源列表：', response.data.records);
             setResourceList(response.data.records);
@@ -252,7 +259,7 @@
     const fetchHomePageThread = async () => {
         try {
             const response = await axios.get<ThreadList>(process.env.PUBLIC_URL + `/user/thread`, {
-                params: { userId: 22301010,  pageNumber: 1, rows: 3 }
+                params: { userId: userId,  pageNumber: 1, rows: 3 }
             })
             console.log('获取主页发布帖子：', response.data);
             setHomePageThread(response.data);
@@ -272,7 +279,7 @@
         try {
             const pageNumber = threadFirst / threadRows + 1;
             const response = await axios.get<ThreadList>(process.env.PUBLIC_URL + `/user/thread`, {
-                params: { userId: 22301010,  pageNumber: pageNumber, rows: threadRows }
+                params: { userId: userId,  pageNumber: pageNumber, rows: threadRows }
             })
             console.log('获取我的帖子：', response.data);
             setThreadList(response.data.records);
@@ -292,7 +299,7 @@
         try {
             const pageNumber = rewardFirst / rewardRows + 1;
             const response = await axios.get<RewardList>(process.env.PUBLIC_URL + `/user/reward`, {
-                params: { userId: 22301010,  pageNumber: pageNumber, rows: rewardRows }
+                params: { userId: userId,  pageNumber: pageNumber, rows: rewardRows }
             })
             console.log('获取我的悬赏：', response.data);
             setRewardList(response.data.rewardList);
@@ -307,22 +314,22 @@
     const actions = [
         {
             template: () => (
-                <Button  label="管理资源" onClick={() => router.push(`/user/manage/resources/`)}/>
+                <Button label="管理资源" onClick={() => router.push(`/user/manage/resources/`)} />
             )
         },
         {
             template: () => (
-                <Button  label="已购资源" onClick={() => router.push(`/user/purchased-resources/`)}/>
+                <Button label="已购资源" onClick={() => router.push(`/user/purchased-resources/`)} />
             )
         },
         {
             template: () => (
-                <Button  label="发布资源" onClick={() => setVisible(true)}/>
+                <Button label="发布资源" onClick={() => setVisible(true)} />
             )
         },
         {
             template: () => (
-                <Button  label="编辑悬赏" onClick={() => router.push(`/user/manage/resources/`)}/>
+                <Button label="编辑悬赏" onClick={() => router.push(`/user/manage/resources/`)} />
             )
         }
     ];
@@ -357,7 +364,7 @@
             const response = await axios.delete(process.env.PUBLIC_URL + `/reward`, {
                 params: {rewardId: deleteRewardId},
             });
-            console.log("用户" + 22301010 + "要删除" + deleteRewardId + "号悬赏");
+            console.log("用户" + userId + "要删除" + deleteRewardId + "号悬赏");
 
             if (response.status === 204) {
                 console.log("用户成功删除悬赏");
@@ -456,7 +463,7 @@
                 },
                 gameplayList: resourceFormData.gameplayList,
                 completeRewardId: null,
-                userId: 22301010, // 记得用户登录状态获取
+                userId, // 记得用户登录状态获取
             };
             // 发送POST请求
             const response = await axios.post(process.env.PUBLIC_URL + '/resource', postData);
@@ -534,7 +541,7 @@
                         </div>
                     </div>
 
-                    <Button label="关注" className="action-button"/>
+                    <Button label="关注" className="action-button" />
                 </div>
             </div>
 
