add webuser API

Change-Id: I525da55355631991fd9554346b539c1c09593113
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('删除失败,请重试');

                         }