上传种子部分

Change-Id: I6657a3a9e57fbbab330e0844ff0b04b78fa3f2dd
diff --git a/src/views/forum/index.tsx b/src/views/forum/index.tsx
index 83d791f..13c369f 100644
--- a/src/views/forum/index.tsx
+++ b/src/views/forum/index.tsx
@@ -1,6 +1,7 @@
 import React from "react";
 import { Navigate } from "react-router";
 import SelfStatus from "@/components/selfStatus/selfStatus";
+import Corner from "@/components/corner/corner";
 
 import style from "./index.module.css";
 import Navbar from "@/components/navbar/navbar";
diff --git a/src/views/homepage/homepage.tsx b/src/views/homepage/homepage.tsx
index 58c910f..ec74187 100644
--- a/src/views/homepage/homepage.tsx
+++ b/src/views/homepage/homepage.tsx
@@ -1,14 +1,17 @@
-import React, { useCallback, useEffect } from 'react';
+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 { RootState } from '@/store';
 import { useNavigate } from 'react-router';
 import logo from '&/assets/logo.png';
-import { getUserMessage } from '@/api/homepage';
+import { getUserMessage } from '@/api/homepage'
+import { getUserDetail } from '@/api/homepage'
 import request from '@/utils/request'
-import { hotPosts } from '@/api/post';
+// import { hotPosts } from '@/api/post';
 import { postUserLogin } from '@/api/auth';
+import { debounce } from 'lodash';
+import { Q } from 'react-router/dist/development/fog-of-war-CGNKxM4z';
 
 interface WorkItem {  
   postId: number,
@@ -17,54 +20,80 @@
   postContent: string,
   createdAt: number,
   postType: string,
+  isLocked: boolean,
+  lockedReason: string,
+  lockedAt: string,
+  lockedBy: number,
   viewCount: number,
   hotScore: number,
   lastCalculated: number
-
 }
 
 interface UserStats {
+  username: string;
+  uploadAmount: number;
+  level: string;
   likes: number;
   following: number;
   followers: number;
   mutualFollows: number;
 }
 
-interface UserResponse {
-  username: string;
-  inviteCode: string;
-  stats: UserStats;
-  upload: string;
-  level: string;
-  works: WorkItem[];
-  petImage: string;
-  trafficImage: string;
-}
-
 
 const Homepage: React.FC =() => {
+  const [userStats, setUserStats] = useState<UserStats | null>(null);
+
+  const [works, setWorks] = useState<WorkItem[]>([]);
+  const worksRef = useRef<WorkItem[]>([]);
+
+
   const navigate = useNavigate();
   const userInfo = useSelector((state: RootState) => state.user);
-  
-  // 获取用户作品数据
-  // const {data: response, loading, error, refresh} =useApi(()=>request.get(getUserMessage), false);
-  const { data: response, loading, error, refresh } = useApi<UserResponse>(() => request.get(getUserMessage), false);
+  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),
+  );
+
+  const { data:workdata, loading:workloading, error:workerror, refresh: getUserMessageRefresh } = useApi(
+    () => request.get(getUserMessage, { params: { userId } }).then(res => res.data.data),
+    false
+  );
+
+  const getUserDetails = debounce(async () => {
+    try{
+      const res = await  getUserDetailRefresh({userId});
+      console.log("res", res);
+      setUserStats(res);
+    }catch(error){
+      console.error('获取用户信息错误', error);
+    }
+  },1000) as () => void;
+
+
+  const getUserPost = debounce(async () => {
+    try{
+      const res = await getUserMessageRefresh({userId});
+      console.log("res", res);
+      worksRef.current = res;
+      setWorks(res);
+    }catch(error) {
+      console.error('获取帖子列表错误', error);
+    }
+  },1000) as () => void;
+
   useEffect(() => {
-    refresh(); // 页面首次加载时触发请求
-  }, []);
-  // 用户统计数据
-  const userStats = {
-    likes: response?.stats?.likes ?? 0,
-    following: response?.stats?.following ?? 0,
-    followers: response?.stats?.followers ?? 0,
-    mutualFollows: response?.stats?.mutualFollows ?? 0,
-    uploadAmount: response?.upload ?? '--',
-    level: response?.level ?? '--'
-  };
-  
-  const handleLogoClick = () => {
-    navigate('/');
-  };
+    if (!userId) {
+      navigate('/login');
+    }
+    else {
+      getUserDetails();
+      getUserPost();
+    }
+  }, [userId]);
+
+  if (!userId) return null;
+
 
   return (
     <div className={styles.container}>
@@ -84,32 +113,24 @@
               <h2 className={styles.username}>阳菜,放睛!</h2>
               <div className={styles.inviteCode}>邀请码:1314520</div>
               <button className={styles.editButton}>编辑主页</button>
-               <button 
-                className={styles.editButton}
-                onClick={() => navigate('/postDetails', {
-                  state: { isNewPost: true }
-                })}
-              >
-                发布种子
-              </button>
             </div>
           </div>
 
           <div className={styles.userStats}>
             <div className={styles.statItem}>
-              <div className={styles.statNumber}>{userStats.likes}</div>
+              <div className={styles.statNumber}>{userStats?.likes ?? '--'}</div>
               <div className={styles.statLabel}>获赞</div>
             </div>
             <div className={styles.statItem}>
-              <div className={styles.statNumber}>{userStats.following}</div>
+              <div className={styles.statNumber}>{userStats?.following ?? '--'}</div>
               <div className={styles.statLabel}>关注</div>
             </div>
             <div className={styles.statItem}>
-              <div className={styles.statNumber}>{userStats.followers}</div>
+              <div className={styles.statNumber}>{userStats?.followers ?? '--'}</div>
               <div className={styles.statLabel}>粉丝</div>
             </div>
             <div className={styles.statItem}>
-              <div className={styles.statNumber}>{userStats.mutualFollows}</div>
+              <div className={styles.statNumber}>{userStats?.mutualFollows ?? '--'}</div>
               <div className={styles.statLabel}>互关</div>
             </div>
           </div>
@@ -117,20 +138,20 @@
           <div className={styles.userData}>
             <div className={styles.dataItem}>
               <span>您的总上传量为:</span>
-              <strong>{userStats.uploadAmount}</strong>
+              <strong>{userStats?.uploadAmount ?? '--'}</strong>
             </div>
             <div className={styles.dataItem}>
               <span>您的用户等级为:</span>
-              <strong>{userStats.level}</strong>
+              <strong>{userStats?.level ?? '--'}</strong>
             </div>
           </div>
 
           <div className={styles.worksSection}>
             <h3 className={styles.sectionTitle}>我的作品</h3>
-            {loading && <div className={styles.loading}>加载中...</div>}
-            {error && <div className={styles.error}>{error.message}</div>}
+            {workloading && <div className={styles.loading}>加载中...</div>}
+            {workerror && <div className={styles.error}>{workerror.message}</div>}
             
-            {response && response.works.map(work => (
+            {works.map(work => (
               <div key={work.postId} className={styles.workItem}>
                 <h4 className={styles.workTitle}>{work.postTitle}</h4>
                 <div className={styles.workMeta}>
diff --git a/src/views/postList/postList.tsx b/src/views/postList/postList.tsx
index 69388d8..28a660d 100644
--- a/src/views/postList/postList.tsx
+++ b/src/views/postList/postList.tsx
@@ -1,6 +1,7 @@
 import React from "react";
 import style from "./postList.module.css";
 import SelfStatus from "@/components/selfStatus/selfStatus";
+import Corner from "@/components/corner/corner"
 import Navbar from "@/components/navbar/navbar";
 import PostsPanel from "@/components/postsPanel/postsPanel";
 import { getPosts, unknownAPI } from "@/api/post";
@@ -66,7 +67,7 @@
                     <SelfStatus/>
                 </div>
                 <div className={style.filter}>
-                    
+                    <Corner />
                 </div> 
             </div>
         </div>
diff --git a/src/views/search/search.tsx b/src/views/search/search.tsx
index cd9db91..6dba69c 100644
--- a/src/views/search/search.tsx
+++ b/src/views/search/search.tsx
@@ -16,12 +16,36 @@
   tags?: number[];
 }
 
-const tagMap: Record<number, string> = {
-  1: "搞笑",
-  2: "悬疑",
-  3: "教育",
-  4: "动作",
-  5: "剧情"
+const tagMap: Record<string, Record<number, string>> = {
+  Game: {
+    0: "android",
+    1: "mac",
+    2: "pc",
+    3: "ios",
+    4: "other",
+    5: "action",
+    6: "adventure",
+    7: "leisure",
+    8: "riddle",
+    9: "sport",
+    10: "strategy",
+    11: "table",
+  },
+  video: {
+    20: "视频标签1",
+    21: "视频标签2",
+    22: "视频标签3",
+  },
+  music: {
+    40: "音乐标签1",
+    41: "音乐标签2",
+    42: "音乐标签3",
+  },
+  software: {
+    60: "软件标签1",
+    61: "软件标签2",
+    62: "软件标签3",
+  },
 };
 
 const SearchPage: React.FC = () => {
@@ -35,6 +59,10 @@
   const params = new URLSearchParams(location.search);
   const keyword = params.get("keyword");
 
+  const getTagsForPostType = (postType: string) => {
+    return tagMap[postType] || {};
+  };
+
   useEffect(() => {
     fetch('/api/posts')
       .then((res) => res.json())
@@ -62,6 +90,7 @@
     }
 
     setFilteredPosts(filtered);
+
   };
 
   return (
@@ -73,10 +102,10 @@
         className={styles.selectBox}
         >
         <option value="all">所有分区</option>
-        <option value="影视">影视</option>
-        <option value="音乐">音乐</option>
-        <option value="游戏">游戏</option>
-        <option value="软件">软件</option>
+        <option value="video">影视</option>
+        <option value="music">音乐</option>
+        <option value="Game">游戏</option>
+        <option value="software">软件</option>
         </select>
 
         <select
@@ -97,7 +126,7 @@
 
     <div className={styles.centerSection}>
         <div className={styles.tagFilters}>
-        {Object.entries(tagMap).map(([tagId, tagName]) => (
+        {Object.entries(getTagsForPostType(selectedPostType)).map(([tagId, tagName]) => (
             <label key={tagId}>
             <input
                 type="checkbox"