diff --git a/front/src/UserProfile.js b/front/src/UserProfile.js
index 4737033..753e901 100644
--- a/front/src/UserProfile.js
+++ b/front/src/UserProfile.js
@@ -1,6 +1,7 @@
 import React, { useState, useEffect } from "react";
 import AccountCircleIcon from "@mui/icons-material/AccountCircle";
 import { useNavigate } from "react-router-dom";
+import { API_BASE_URL } from "./config";
 import "./App.css";
 
 export default function UserProfile() {
@@ -31,11 +32,13 @@
       const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
       if (!userid) return;
       try {
-        const res = await fetch(`/api/user-profile?userid=${userid}`);
+        const res = await fetch(`${API_BASE_URL}/api/user-profile?userid=${userid}`);
+        
         if (res.ok) {
           const data = await res.json();
           setUserInfo(data);
           setTempUserInfo(data);
+          // console.log(data);
         }
       } catch (err) {
         // 可以根据需要处理错误
@@ -52,7 +55,7 @@
       const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
       if (!userid) return;
       try {
-        const res = await fetch(`/api/user-seeds?userid=${userid}`);
+        const res = await fetch(`${API_BASE_URL}/api/user-seeds?userid=${userid}`);
         if (res.ok) {
           const data = await res.json();
           setUserSeeds(data);
@@ -71,7 +74,7 @@
       const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
       if (!userid) return;
       try {
-        const res = await fetch(`/api/user-stats?userid=${userid}`);
+        const res = await fetch(`${API_BASE_URL}/api/user-stats?userid=${userid}`);
         if (res.ok) {
           const data = await res.json();
           setUserStats(data);
@@ -88,12 +91,18 @@
   };
 
   const handleSave = async () => {
+    if (tempUserInfo.gender === "男性"){
+      tempUserInfo.gender = "m";
+    }else if (tempUserInfo.gender === "女性"){
+      tempUserInfo.gender = "f";
+    }
     setUserInfo({ ...tempUserInfo });
+    console.log("保存的用户信息：", tempUserInfo);
     // 获取userid
     // const userid = localStorage.getItem("userid");
     const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
     try {
-      const res = await fetch('/api/change-profile', {
+      const res = await fetch(`${API_BASE_URL}/api/change-profile`, {
         method: 'POST',
         headers: {
           'Content-Type': 'application/json',
@@ -112,9 +121,9 @@
   };
 
   const handleAvatarClick = () => {
-    const avatarUrl = prompt("请输入头像的URL：");
-    if (avatarUrl) {
-      setTempUserInfo({ ...tempUserInfo, avatar: avatarUrl });
+    const pictureUrl = prompt("请输入头像的URL：");
+    if (pictureUrl) {
+      setTempUserInfo({ ...tempUserInfo, avatar_url: pictureUrl });
     }
   };
 
@@ -125,7 +134,7 @@
         <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', marginBottom: 16 }}>
           <div onClick={handleAvatarClick} style={{ cursor: 'pointer', position: 'relative' }}>
             <AccountCircleIcon style={{ fontSize: 90, color: '#1a237e', marginBottom: 12 }} />
-            {tempUserInfo.avatar && (
+            {tempUserInfo.avatar_url && (
               <img
                 src={tempUserInfo.avatar_url}
                 alt="用户头像"
@@ -166,7 +175,7 @@
             <span
               style={{ flex: 1, padding: '6px 10px', borderRadius: 7, border: '1px solid #b2b2b2', minWidth: 0, fontSize: 15, backgroundColor: '#f5f5f5', color: '#888' }}
             >
-              {tempUserInfo.invite_left}
+              {tempUserInfo.invite_left || "0"}
             </span>
           </div>
           <div style={{ marginBottom: 18, display: 'flex', alignItems: 'center' }}>
@@ -211,7 +220,9 @@
                   cursor: 'pointer',
                 }}
               >
-                {tempUserInfo.gender || "性别"}
+                {tempUserInfo.gender === 'm' ? '男性'
+                  : tempUserInfo.gender === 'f' ? '女性'
+                  : '性别'}
               </button>
               {tempUserInfo.showGenderOptions && (
                 <ul
@@ -229,20 +240,18 @@
                     zIndex: 10,
                   }}
                 >
-                  {["男", "女", "跨性别男", "跨性别女", "无性别"].map((option) => (
+                  {[{ value: 'm', label: '男性' }, { value: 'f', label: '女性' }].map(opt => (
                     <li
-                      key={option}
-                      onClick={() => {
-                        setTempUserInfo({ ...tempUserInfo, gender: option, showGenderOptions: false });
-                      }}
+                      key={opt.value}
+                      onClick={() => setTempUserInfo({ ...tempUserInfo, gender: opt.value, showGenderOptions: false })}
                       style={{
                         padding: '6px 10px',
                         cursor: 'pointer',
                         borderBottom: '1px solid #e0e0e0',
-                        backgroundColor: option === tempUserInfo.gender ? '#f0f0f0' : '#fff',
+                        backgroundColor: tempUserInfo.gender === opt.value ? '#f0f0f0' : '#fff',
                       }}
                     >
-                      {option}
+                      {opt.label}
                     </li>
                   ))}
                 </ul>
@@ -284,27 +293,29 @@
                   onClick={e => {
                     // 阻止点击删除按钮时跳转
                     if (e.target.classList.contains('delete-btn')) return;
-                    navigate(`/torrent/${seed.seed_id}`);
+                    navigate(`/torrent/${seed.seedid}`);
                   }}
                 >
                   <span style={{ flex: 2, fontWeight: 500, color: '#1a237e', textDecoration: 'underline' }}>{seed.title}</span>
                   <span style={{ flex: 1, color: '#5c6bc0' }}>{seed.tags}</span>
-                  <span style={{ flex: 1, color: '#ff9800', textAlign: 'right' }}>人气: {seed.popularity}</span>
+                  <span style={{ flex: 1, color: '#ff9800', textAlign: 'right' }}>人气: {seed.downloadtimes}</span>
                   <button
                     className="delete-btn"
                     style={{ marginLeft: 18, background: '#e53935', color: '#fff', border: 'none', borderRadius: 6, padding: '4px 14px', cursor: 'pointer', fontSize: 14 }}
                     onClick={async (e) => {
                       e.stopPropagation();
                       // const userid = localStorage.getItem("userid");
-                      const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
+                      // const userid = "550e8400-e29b-41d4-a716-446655440000"; // 示例userid
                       try {
-                        const res = await fetch('/api/delete-seed', {
+                        
+                        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 }),
+                          body: JSON.stringify({ seedid: seed.seedid }),
                         });
+                        // console.log(seed.seedid);
                         if (res.ok) {
-                          setUserSeeds(userSeeds.filter((s, i) => (s.seed_id || i) !== (seed.seed_id || idx)));
+                          setUserSeeds(userSeeds.filter((s, i) => (s.seedid || i) !== (seed.seedid || idx)));
                         } else {
                           alert('删除失败，请重试');
                         }
