diff --git a/front/src/UserProfile.js b/front/src/UserProfile.js
index cf38e7f..f6ef9f4 100644
--- a/front/src/UserProfile.js
+++ b/front/src/UserProfile.js
@@ -17,7 +17,7 @@
     avatar_url: "",
     username: "示例用户",
     email: "user@example.com",
-    invite_left: "",
+    invitetimes: "",
     school: "",
     account_status: "",
     gender: "",
@@ -61,12 +61,17 @@
   // 获取用户信息
   useEffect(() => {
     const fetchUserInfo = async () => {
-      const userid = "550e8400-e29b-41d4-a716-446655440000";
+      // 假设userid存储在localStorage或其他地方
+      // const userid = localStorage.getItem("userid");
+      // const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
+      const match = document.cookie.match('(^|;)\\s*userId=([^;]+)');
+    const userid = match ? match[2] : null;
       if (!userid) return;
       try {
         const res = await fetch(`${API_BASE_URL}/api/user-profile?userid=${userid}`);
         if (res.ok) {
           const data = await res.json();
+          console.log("获取用户信息:", data);
           setUserInfo(data);
           setTempUserInfo(data);
         }
@@ -80,7 +85,10 @@
   // 获取上传种子
   useEffect(() => {
     const fetchUserSeeds = async () => {
-      const userid = "550e8400-e29b-41d4-a716-446655440000";
+      // const userid = localStorage.getItem("userid");
+      // const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
+      const match = document.cookie.match('(^|;)\\s*userId=([^;]+)');
+    const userid = match ? match[2] : null;
       if (!userid) return;
       try {
         const res = await fetch(`${API_BASE_URL}/api/user-seeds?userid=${userid}`);
@@ -125,13 +133,17 @@
   };
 
   const handleSave = async () => {
-    if (tempUserInfo.gender === "男性") {
+    if (tempUserInfo.gender === "男"){
       tempUserInfo.gender = "m";
-    } else if (tempUserInfo.gender === "女性") {
+    }else if (tempUserInfo.gender === "女"){
       tempUserInfo.gender = "f";
     }
     setUserInfo({ ...tempUserInfo });
-    const userid = "550e8400-e29b-41d4-a716-446655440000";
+    // 获取userid
+    // const userid = localStorage.getItem("userid");
+    // const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
+    const match = document.cookie.match('(^|;)\\s*userId=([^;]+)');
+    const userid = match ? match[2] : null;
     try {
       const res = await fetch(`${API_BASE_URL}/api/change-profile`, {
         method: 'POST',
@@ -152,9 +164,9 @@
   };
 
   const handleAvatarClick = () => {
-    const pictureUrl = prompt("请输入头像的URL：");
-    if (pictureUrl) {
-      setTempUserInfo({ ...tempUserInfo, avatar_url: pictureUrl });
+    const avatarUrl = prompt("请输入头像的URL：");
+    if (avatarUrl) {
+      setTempUserInfo({ ...tempUserInfo, avatar_url: avatarUrl });
     }
   };
 
@@ -484,7 +496,7 @@
                   }}
                   onClick={e => {
                     if (e.target.classList.contains('delete-btn')) return;
-                    navigate(`/torrent/${seed.seedid}`);
+                    navigate(`/torrent/${seed.seed_id}`);
                   }}
                   onMouseOver={e => e.currentTarget.style.background = '#f3f6ff'}
                   onMouseOut={e => e.currentTarget.style.background = ''}
@@ -498,9 +510,24 @@
                     color="error"
                     size="small"
                     sx={{ marginLeft: 2, borderRadius: 1, minWidth: 60 }}
-                    onClick={e => {
+                    onClick={async e => {
                       e.stopPropagation();
-                      handleDeleteSeed(seed.seedid);
+                      // const userid = localStorage.getItem("userid");
+                      const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
+                      try {
+                        const res = await fetch(`${API_BASE_URL}/api/delete-seed`, {
+                          method: 'POST',
+                          headers: { 'Content-Type': 'application/json' },
+                          body: JSON.stringify({ seed_id: seed.seed_id, userid }),
+                        });
+                        if (res.ok) {
+                          setUserSeeds(userSeeds.filter((s, i) => (s.seed_id || i) !== (seed.seed_id || idx)));
+                        } else {
+                          alert('删除失败，请重试');
+                        }
+                      } catch (err) {
+                        alert('删除失败，请检查网络');
+                      }
                     }}
                   >删除</Button>
                 </li>
