diff --git a/src/assets/logo.svg b/src/assets/logo.svg
new file mode 100644
index 0000000..e9f889d
--- /dev/null
+++ b/src/assets/logo.svg
@@ -0,0 +1,24 @@
+<svg width="81" height="81" viewBox="0 0 81 81" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M40.5 6.74951V74.2496" stroke="#FBF2E3" stroke-width="4" stroke-linecap="round"/>
+<path d="M57.375 20.2498V60.7498" stroke="#FBF2E3" stroke-width="4" stroke-linecap="round"/>
+<path d="M6.75 30.3748V50.6248" stroke="#FBF2E3" stroke-width="4" stroke-linecap="round"/>
+<path d="M74.25 30.3748V50.6248" stroke="#FBF2E3" stroke-width="4" stroke-linecap="round"/>
+<path d="M23.625 20.2498V60.7498" stroke="#FBF2E3" stroke-width="4" stroke-linecap="round"/>
+<g clip-path="url(#clip0_137_45)">
+<mask id="mask0_137_45" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="28" y="27" width="26" height="26">
+<path d="M54 27H28V53H54V27Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_137_45)">
+<path d="M30.1665 43.7918C30.1666 40.271 32.3334 38.937 33.9583 38.3852C35.5831 37.8335 36.6667 37.8335 38.2915 36.2085C39.9163 34.5835 39.9168 31.3335 43.1666 30.2501C46.4163 29.1668 50.2575 30.7918 51.2914 34.5835C52.3253 38.3751 49.3961 43.2501 48.0419 44.8751C46.6877 46.5001 43.9784 49.2085 39.3747 49.7501C34.7711 50.2918 30.1664 47.3126 30.1665 43.7918Z" fill="#4A3B34" stroke="#FBF2E3" stroke-width="2" stroke-linejoin="round"/>
+<path d="M34.5 38.3986C38.2917 43.25 43.7083 38.3986 39.9167 33.5L34.5 38.3986Z" fill="#4A3B34"/>
+<path d="M34.5 38.3986C38.2917 43.25 43.7083 38.3986 39.9167 33.5" stroke="#FBF2E3" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+<path d="M33.9585 38.3851C35.5833 37.8333 36.667 37.8333 38.2918 36.2083C39.9166 34.5833 39.917 31.3333 43.1668 30.25" fill="#4A3B34"/>
+<path d="M33.9585 38.3851C35.5833 37.8333 36.667 37.8333 38.2918 36.2083C39.9166 34.5833 39.917 31.3333 43.1668 30.25" stroke="#FBF2E3" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_137_45">
+<rect width="26" height="26" fill="white" transform="translate(28 27)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/src/components/AuthButton.jsx b/src/components/AuthButton.jsx
index 246555a..f4428e2 100644
--- a/src/components/AuthButton.jsx
+++ b/src/components/AuthButton.jsx
@@ -11,7 +11,7 @@
     }else{
         clickFunc = (e) => {
             e.preventDefault();
-            toast.error("权限不足");
+            toast.error("等级不足，无法执行此操作");
         }
     }
    
diff --git a/src/components/Header.jsx b/src/components/Header.jsx
index fd2a381..93d75cc 100644
--- a/src/components/Header.jsx
+++ b/src/components/Header.jsx
@@ -1,6 +1,8 @@
 import React, { useEffect } from 'react';
 import './Header.css';
-import logo from '../assets/logo.png';
+// import logo from '../assets/logo.png';
+import { ReactComponent as LogoIcon } from '../assets/logo.svg';
+
 import { useUser } from '../context/UserContext';
 import { BookOpen } from '@icon-park/react';
 import { useLocation } from 'wouter';
@@ -10,21 +12,20 @@
   const [location, setLocation] = useLocation();
 
   const navLinks = [
-    { to: '/friend-moments', label: '好友动态' },
-    { to: '/forum', label: '论坛' },
-    { to: '/interest-groups', label: '兴趣小组' },
     { to: '/seed-list', label: '种子列表' },
     { to: '/publish-seed', label: '发布种子' },
+    { to: '/friend-moments', label: '好友动态' },
+    { to: '/forum', label: '论坛' },
+    { to: '/interest-groups', label: '兴趣小组' },  
   ];
 
-  // 头像变化时刷新组件（这段其实 React 会自动做，但你手动 history 管理就错过了）
   useEffect(() => {}, [user?.avatarUrl]);
 
   return (
     <div className="main-page">
       <header className="header">
         <div className="logo-and-name">
-          <img src={logo} alt="网站 logo" className="logo" />
+          <LogoIcon className="logo" />
           <span className="site-name">Echo</span>
         </div>
         <div className="user-and-message" style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>
diff --git a/src/pages/AuthPage/AuthPage.css b/src/pages/AuthPage/AuthPage.css
index 6e8b965..00fb5d7 100644
--- a/src/pages/AuthPage/AuthPage.css
+++ b/src/pages/AuthPage/AuthPage.css
@@ -1,245 +1,210 @@
-  .auth-container {
+.auth-container {
   display: flex;
   align-items: center;
-  /* justify-content: flex-end; */
-  justify-content: space-between; 
+  justify-content: space-between;
   min-height: 100vh;
-  font-family: Arial, sans-serif;
-  background: #5F4437; 
-  /* background: linear-gradient(180deg, #5F4437, #823c3c) */
-  padding: 0 2rem; /* 添加左右内边距 */
+  font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif;
+  /* background: linear-gradient(135deg, #be8e9d 0%, #c48d74 100%); */
+  background: url('a.jpg') no-repeat center center fixed;
+  background-size: cover;
+  padding: 0 5%;
+  position: relative;
+  overflow: hidden;
 }
 
-  .logo-container {
-    flex: 1;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    padding: 2rem;
-  }
+.auth-container::before {
+  content: '';
+  position: absolute;
+  top: -50%;
+  left: -50%;
+  width: 200%;
+  height: 200%;
+  background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 70%);
+  transform: rotate(30deg);
+}
 
-  .site-logo {
-    width: 300px; /* 设置固定宽度 */
-    height: auto; /* 高度自适应，保持比例 */
+.logo-container {
+  flex: 1;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  padding: 2rem;
+  z-index: 1;
+}
+
+.site-logo {
+  width: 350px;
+  margin-left: -15%;
+  height: auto;
+  filter: drop-shadow(0 0 10px rgba(255, 255, 255, 0.3));
+}
+
+.glass-card {
+  width: 35%;
+  margin-right: 10%;
+  background: rgba(255, 255, 255, 0.15);
+  backdrop-filter: blur(12px);
+  -webkit-backdrop-filter: blur(12px);
+  border-radius: 16px;
+  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18);
+  border: 1px solid rgba(255, 255, 255, 0.18);
+  overflow: hidden;
+  z-index: 2;
+  transition: all 0.3s ease;
+}
+
+.glass-card:hover {
+  transform: translateY(-5px);
+  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.25);
+}
+
+.auth-header {
+  display: flex;
+  background: rgba(255, 255, 255, 0.1);
+}
+
+.auth-tab {
+  flex: 1;
+  padding: 20px;
+  text-align: center;
+  font-size: 18px;
+  font-weight: 500;
+  cursor: pointer;
+  transition: all 0.3s ease;
+  color: rgba(255, 255, 255, 0.7);
+  position: relative;
+}
+
+.auth-tab.active {
+  color: white;
+  font-weight: 600;
+}
+
+.auth-tab.active::after {
+  content: '';
+  position: absolute;
+  bottom: 0;
+  left: 50%;
+  transform: translateX(-50%);
+  width: 60%;
+  height: 3px;
+  background: white;
+  border-radius: 3px;
+}
+
+.auth-tab:not(.active):hover {
+  background: rgba(255, 255, 255, 0.05);
+}
+
+.auth-content {
+  padding: 30px;
+}
+
+.auth-form {
+  display: flex;
+  flex-direction: column;
+  gap: 20px;
+}
+
+.form-group {
+  display: flex;
+  flex-direction: column;
+  gap: 8px;
+}
+
+.form-group label {
+  font-weight: 500;
+  color: rgba(255, 255, 255, 0.9);
+  text-align: left;
+  align-self: flex-start;
+}
+
+.form-group input[type="text"],
+.form-group input[type="email"],
+.form-group input[type="password"] {
+  padding: 14px 16px;
+  background: rgba(255, 255, 255, 0.1);
+  border: 1px solid rgba(255, 255, 255, 0.2);
+  border-radius: 8px;
+  font-size: 16px;
+  color: white;
+  transition: all 0.3s ease;
+}
+
+.form-group input::placeholder {
+  color: rgba(255, 255, 255, 0.5);
+}
+
+.form-group input:focus {
+  background: rgba(255, 255, 255, 0.2);
+  border-color: rgba(255, 255, 255, 0.4);
+  outline: none;
+  box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.1);
+}
+
+.auth-button {
+  background: rgba(255, 255, 255, 0.2);
+  color: white;
+  border: none;
+  border-radius: 8px;
+  padding: 16px;
+  font-size: 16px;
+  font-weight: 500;
+  cursor: pointer;
+  transition: all 0.3s ease;
+  margin-top: 10px;
+  backdrop-filter: blur(5px);
+  border: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+.auth-button:hover {
+  background: rgba(255, 255, 255, 0.3);
+  transform: translateY(-2px);
+}
+
+.forgot-password {
+  color: rgba(255, 255, 255, 0.7);
+  text-decoration: none;
+  font-size: 14px;
+  transition: all 0.3s ease;
+}
+
+.forgot-password:hover {
+  color: white;
+  text-decoration: underline;
+}
+
+.error-message {
+  color: #ff6b6b;
+  font-size: 14px;
+  margin-top: 4px;
+  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+}
+
+/* 响应式调整 */
+@media (max-width: 768px) {
+  .auth-container {
+    flex-direction: column;
+    padding: 40px 20px;
+    justify-content: flex-start;
   }
   
-  .auth-card {
-    width: 100%;
-    max-width: 480px;
-    background-color: #E4D8C9;
-    border-radius: 8px;
-    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
-    overflow: hidden;
+  .logo-container {
+    margin-bottom: 40px;
   }
   
-  .auth-header {
-    display: flex;
-    border-bottom: 1px solid #eee;
+  .glass-card {
+    max-width: 100%;
+  }
+}
+
+@media (max-width: 480px) {
+  .auth-content {
+    padding: 20px;
   }
   
   .auth-tab {
-    flex: 1;
     padding: 16px;
-    text-align: center;
-    font-size: 18px;
-    font-weight: 500;
-    cursor: pointer;
-    transition: all 0.3s ease;
-  }
-  
-  .auth-tab.active {
-    color: #BA929A;
-    border-bottom: 2px solid #BA929A;
-  }
-  
-  .auth-tab:not(.active) {
-    color: #888;
-  }
-  
-  .auth-tab:hover:not(.active) {
-    background-color: #f9f9f9;
-  }
-  
-  .auth-content {
-    padding: 30px;
-  }
-  
-  .auth-form {
-    display: flex;
-    flex-direction: column;
-    gap: 20px;
-  }
-  
-  .form-group {
-    display: flex;
-    flex-direction: column;
-    gap: 8px;
-  }
-  
-  .form-group label {
-    font-weight: 500;
-    color: #333;
-    text-align: left;
-    align-self: flex-start;
-  }
-  
-  .form-group input[type="text"],
-  .form-group input[type="email"],
-  .form-group input[type="password"] {
-    padding: 12px 16px;
-    border: 1px solid #ddd;
-    border-radius: 4px;
     font-size: 16px;
-    transition: border-color 0.3s;
   }
-  
-  .form-group input:focus {
-    border-color: #BA929A;
-    outline: none;
-  }
-  
-  .form-group-inline {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-  }
-  
-  .checkbox-container {
-    display: flex;
-    align-items: center;
-    gap: 8px;
-  }
-  
-  .checkbox-container input[type="checkbox"] {
-    width: 18px;
-    height: 18px;
-    cursor: pointer;
-  }
-  
-  .forgot-password {
-    color: #BA929A;
-    text-decoration: none;
-    font-size: 14px;
-  }
-  
-  .forgot-password:hover {
-    text-decoration: underline;
-  }
-  
-  .auth-button {
-    background-color: #BA929A;
-    color: white;
-    border: none;
-    border-radius: 4px;
-    padding: 14px;
-    font-size: 16px;
-    font-weight: 500;
-    cursor: pointer;
-    transition: background-color 0.3s;
-  }
-  
-  .auth-button:hover {
-    background-color: #BA929A;
-  }
-  
-  .social-login {
-    margin-top: 20px;
-    text-align: center;
-  }
-  
-  .social-login p {
-    color: #666;
-    margin-bottom: 15px;
-    position: relative;
-  }
-  
-  .social-login p::before,
-  .social-login p::after {
-    content: "";
-    position: absolute;
-    top: 50%;
-    width: 30%;
-    height: 1px;
-    background-color: #ddd;
-  }
-  
-  .social-login p::before {
-    left: 0;
-  }
-  
-  .social-login p::after {
-    right: 0;
-  }
-  
-  .social-icons {
-    display: flex;
-    justify-content: center;
-    gap: 20px;
-  }
-  
-  .social-icon {
-    width: 40px;
-    height: 40px;
-    border-radius: 50%;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    color: white;
-    font-size: 12px;
-    cursor: pointer;
-  }
-  
-  .social-icon.wechat {
-    background-color: #07c160;
-  }
-  
-  .social-icon.weibo {
-    background-color: #e6162d;
-  }
-  
-  .social-icon.qq {
-    background-color: #12b7f5;
-  }
-  
-  .terms-container {
-    flex-direction: column;
-    align-items: flex-start;
-  }
-  
-  .terms-link {
-    color: #BA929A;
-    text-decoration: none;
-  }
-  
-  .terms-link:hover {
-    text-decoration: underline;
-  }
-  
-  .error-message {
-    color: #e53e3e;
-    font-size: 14px;
-    margin-top: 4px;
-  }
-  
-  /* Responsive adjustments */
-  @media (max-width: 576px) {
-    .auth-card {
-      box-shadow: none;
-      border-radius: 0;
-    }
-  
-    .auth-content {
-      padding: 20px;
-    }
-  
-    .form-group-inline {
-      flex-direction: column;
-      align-items: flex-start;
-      gap: 10px;
-    }
-  
-    .social-icons {
-      flex-wrap: wrap;
-    }
-  }
-  
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/src/pages/AuthPage/AuthPage.jsx b/src/pages/AuthPage/AuthPage.jsx
index fe1b42b..51f323e 100644
--- a/src/pages/AuthPage/AuthPage.jsx
+++ b/src/pages/AuthPage/AuthPage.jsx
@@ -1,7 +1,9 @@
 import { useState } from "react";
 import { Link } from "wouter";
 import "./AuthPage.css";
-import logo from '../../assets/logo.png'; 
+// import logo from '../../assets/logo.png'; 
+import { ReactComponent as LogoIcon } from '../../assets/logo.svg';
+// import backgroundImage from '../../assets/b.png'; 
 
 function AuthPage() {
   const [activeTab, setActiveTab] = useState("login");
@@ -157,10 +159,11 @@
   return (
     <div className="auth-container">
       <div className="logo-container">
-        <img src={logo} alt="Logo" className="site-logo" />
+        <LogoIcon className="site-logo" />
       </div>
 
-      <div className="auth-card">
+      {/* <div className="auth-card"> */}
+      <div className="glass-card">
         <div className="auth-header">
           <div className={`auth-tab ${activeTab === "login" ? "active" : ""}`} onClick={() => setActiveTab("login")}>
             登录
diff --git a/src/pages/AuthPage/a.jpg b/src/pages/AuthPage/a.jpg
new file mode 100644
index 0000000..5c55df3
--- /dev/null
+++ b/src/pages/AuthPage/a.jpg
Binary files differ
diff --git a/src/pages/AuthPage/b.png b/src/pages/AuthPage/b.png
new file mode 100644
index 0000000..f650e96
--- /dev/null
+++ b/src/pages/AuthPage/b.png
Binary files differ
diff --git a/src/pages/Forum/posts-detail/PostDetailPage.css b/src/pages/Forum/posts-detail/PostDetailPage.css
index 570b65f..9ca9298 100644
--- a/src/pages/Forum/posts-detail/PostDetailPage.css
+++ b/src/pages/Forum/posts-detail/PostDetailPage.css
@@ -115,12 +115,12 @@
   .reply-btn {
     background: none;
     border: none;
-    color: #000000;
+    color: #2196F3;
     cursor: pointer;
   }
   
   .reply-btn:hover {
-    color: #000000; /* 不变色 */
+    color: #2196F3; /* 不变色 */
     background: none; /* 确保没有背景色 */
     text-decoration: underline; /* 你可以保留这个，或也删除 */
   }
diff --git a/src/pages/Forum/posts-main/components/PostList.css b/src/pages/Forum/posts-main/components/PostList.css
index f6d6c2a..81b1132 100644
--- a/src/pages/Forum/posts-main/components/PostList.css
+++ b/src/pages/Forum/posts-main/components/PostList.css
@@ -16,6 +16,7 @@
   background-color: #e9ded2;
   padding: 16px;
   border-radius: 8px;
+  margin-left: 1%;
   /* 移除固定高度 */
   /* height: 230px; */
   /* 添加阴影效果增强视觉层次感 */
diff --git a/src/pages/Forum/posts-main/components/PostList.jsx b/src/pages/Forum/posts-main/components/PostList.jsx
index cf0a424..a941f49 100644
--- a/src/pages/Forum/posts-main/components/PostList.jsx
+++ b/src/pages/Forum/posts-main/components/PostList.jsx
@@ -214,11 +214,11 @@
             })
       }
 
-      <div className="pagination">
+      {/* <div className="pagination">
         <button disabled={page === 1} onClick={() => setPage(page - 1)}>上一页</button>
         <span>第 {page} 页 / 共 {totalPages} 页</span>
         <button disabled={page === totalPages} onClick={() => setPage(page + 1)}>下一页</button>
-      </div>
+      </div> */}
     </div>
   );
 };
diff --git a/src/pages/Forum/promotion-part/a.jpg b/src/pages/Forum/promotion-part/a.jpg
new file mode 100644
index 0000000..f8bf405
--- /dev/null
+++ b/src/pages/Forum/promotion-part/a.jpg
Binary files differ
diff --git a/src/pages/InterestGroup/InterestGroup.jsx b/src/pages/InterestGroup/InterestGroup.jsx
index b3ae332..3842aad 100644
--- a/src/pages/InterestGroup/InterestGroup.jsx
+++ b/src/pages/InterestGroup/InterestGroup.jsx
@@ -79,7 +79,7 @@
         )}
 
         <GroupList />
-        <GroupPagination />
+        {/* <GroupPagination /> */}
       </div>
     </div>
   );
diff --git a/src/pages/NewUserGuide/NewUserGuide.jsx b/src/pages/NewUserGuide/NewUserGuide.jsx
index 7a3dad1..e677db7 100644
--- a/src/pages/NewUserGuide/NewUserGuide.jsx
+++ b/src/pages/NewUserGuide/NewUserGuide.jsx
@@ -69,7 +69,7 @@
             className={activeTab === 'tasks' ? 'active' : ''}
             onClick={() => setActiveTab('tasks')}
           >
-            成长任务
+            用户等级
           </button>
         </div>
         <div className="guide-main">
diff --git a/src/pages/NewUserGuide/NewbieTasks.css b/src/pages/NewUserGuide/NewbieTasks.css
index 4d64389..cd6d4b6 100644
--- a/src/pages/NewUserGuide/NewbieTasks.css
+++ b/src/pages/NewUserGuide/NewbieTasks.css
@@ -1,4 +1,4 @@
-.newbie-tasks {
+/* .newbie-tasks {
   font-size: 16px;
   line-height: 1.6;
 }
@@ -61,4 +61,29 @@
   margin-bottom: 20px;
   box-shadow: 0 1px 3px rgba(0,0,0,0.05);
   border: 1px solid #eee;
+} */
+
+.newbie-tasks-container {
+    padding: 20px;
+}
+
+.page-title {
+    text-align: center;
+    margin-bottom: 20px;
+}
+
+.tasks-table {
+    width: 100%;
+    border-collapse: collapse;
+}
+
+.tasks-table th,
+.tasks-table td {
+    border: 1px solid #ccc;
+    padding: 10px;
+    text-align: left;
+}
+
+.tasks-table th {
+    background-color: #f4f4f4;
 }
diff --git a/src/pages/NewUserGuide/NewbieTasks.jsx b/src/pages/NewUserGuide/NewbieTasks.jsx
index 5ff6a9c..5fbd5ea 100644
--- a/src/pages/NewUserGuide/NewbieTasks.jsx
+++ b/src/pages/NewUserGuide/NewbieTasks.jsx
@@ -1,154 +1,208 @@
+// // export default NewbieTasks;
+// import React, { useEffect, useState } from 'react';
+// import axios from 'axios';
+
+// const NewbieTasks = () => {
+//   const [tasks, setTasks] = useState([]);
+//   const [experience, setExperience] = useState({});
+//   const [currentStep, setCurrentStep] = useState({});
+//   const [loading, setLoading] = useState(true);
+
+//   const baseURL = '/echo/task/tutorial';
+//   const userId = 1;
+
+//   const fetchTasks = async () => {
+//     try {
+//       const response = await axios.get(`${baseURL}/getAllTasks`, {
+//         params: { user_id: userId },
+//       });
+//       setTasks(response.data.tasks || []);
+//     } catch (error) {
+//       console.error('获取任务失败:', error);
+//     }
+//   };
+
+//   const fetchExperience = async () => {
+//     try {
+//       const response = await axios.get(`${baseURL}/getAllTasks`, {
+//         params: { user_id: userId },
+//       });
+//       setExperience(response.data || {});
+//     } catch (error) {
+//       console.error('获取经验失败:', error);
+//     }
+//   };
+
+//   const fetchCurrentStep = async () => {
+//     try {
+//       const response = await axios.get(`${baseURL}/getNewStep`, {
+//         params: { user_id: userId },
+//       });
+//       setCurrentStep(response.data || {});
+//     } catch (error) {
+//       console.error('获取引导步骤失败:', error);
+//     }
+//   };
+
+//   const updateStatus = async (taskId) => {
+//     try {
+//       await axios.post(`${baseURL}/updateStatus`, {
+//         user_id: userId,
+//         task_id: taskId,
+//       });
+//       await fetchTasks();
+//       await fetchExperience();
+//     } catch (error) {
+//       console.error('更新状态失败:', error);
+//     }
+//   };
+
+//   const updateProgress = async (taskId, progress) => {
+//     try {
+//       await axios.post(`${baseURL}/updateProgress`, {
+//         user_id: userId,
+//         task_id: taskId,
+//         progress,
+//       });
+//       await fetchTasks();
+//     } catch (error) {
+//       console.error('更新进度失败:', error);
+//     }
+//   };
+
+//   const claimReward = async (taskId) => {
+//     try {
+//       await axios.post(`${baseURL}/rewardClaim`, {
+//         user_id: userId,
+//         task_id: taskId,
+//       });
+//       await fetchTasks();
+//       await fetchExperience();
+//     } catch (error) {
+//       console.error('领取奖励失败:', error);
+//     }
+//   };
+
+//   const checkRewardStatus = async (taskId) => {
+//     try {
+//       const response = await axios.post(`${baseURL}/rewardReview`, {
+//         user_id: userId,
+//         task_id: taskId,
+//       });
+//       alert(response.data.message || '已完成');
+//     } catch (error) {
+//       console.error('查看失败:', error);
+//     }
+//   };
+
+//   useEffect(() => {
+//     const init = async () => {
+//       await fetchTasks();
+//       await fetchExperience();
+//       await fetchCurrentStep();
+//       setLoading(false);
+//     };
+//     init();
+//   }, []);
+
+//   if (loading) return <p className="loading">加载中...</p>;
+
+//   return (
+//     <div className="common-card right-content">
+//       <div className="profile-header">
+//         <h1>🎯 用户等级</h1>
+//       </div>
+
+//       <div className="profile-details">
+//         <p><strong>当前经验：</strong>{experience.current_experience}</p>
+//         <p><strong>等级：</strong>{experience.level}</p>
+//         <p><strong>奖励经验：</strong>{experience.reward?.experience || 0}</p>
+//         <p><strong>奖励积分：</strong>{experience.reward?.points || 0}</p>
+//       </div>
+
+//       <div className="profile-details">
+//         <p><strong>🧭 当前引导步骤：</strong>{currentStep.current_step}</p>
+//         <p>{currentStep.step_description}</p>
+//       </div>
+
+//       <div className="profile-details">
+//         <h2>任务列表</h2>
+//         <ul>
+//           {tasks.map(task => (
+//             <li key={task.task_id} style={{ marginBottom: '20px', borderBottom: '1px solid #eee', paddingBottom: '10px' }}>
+//               <p><strong>任务：</strong>{task.title}</p>
+//               <p><strong>描述：</strong>{task.description}</p>
+//               <p><strong>进度：</strong>{task.progress}%</p>
+//               <p><strong>状态：</strong>{task.status}</p>
+//               <p><strong>奖励：</strong>经验 {task.reward.experience}，积分 {task.reward.points}</p>
+
+//               <div className="task-btn-group">
+//                 <button className="task-btn" onClick={() => updateStatus(task.task_id)}>更新状态</button>
+//                 <button className="task-btn" onClick={() => updateProgress(task.task_id, 100)}>提交进度</button>
+//                 <button className="task-btn" onClick={() => claimReward(task.task_id)}>领取奖励</button>
+//                 <button className="task-btn" onClick={() => checkRewardStatus(task.task_id)}>查看奖励状态</button>
+//               </div>
+//             </li>
+//           ))}
+//         </ul>
+//       </div>
+//     </div>
+//   );
+// };
+
 // export default NewbieTasks;
-import React, { useEffect, useState } from 'react';
-import axios from 'axios';
+
+
+import React from'react';
+import './NewbieTasks.css'; 
 
 const NewbieTasks = () => {
-  const [tasks, setTasks] = useState([]);
-  const [experience, setExperience] = useState({});
-  const [currentStep, setCurrentStep] = useState({});
-  const [loading, setLoading] = useState(true);
-
-  const baseURL = '/echo/task/tutorial';
-  const userId = 1;
-
-  const fetchTasks = async () => {
-    try {
-      const response = await axios.get(`${baseURL}/getAllTasks`, {
-        params: { user_id: userId },
-      });
-      setTasks(response.data.tasks || []);
-    } catch (error) {
-      console.error('获取任务失败:', error);
-    }
-  };
-
-  const fetchExperience = async () => {
-    try {
-      const response = await axios.get(`${baseURL}/getAllTasks`, {
-        params: { user_id: userId },
-      });
-      setExperience(response.data || {});
-    } catch (error) {
-      console.error('获取经验失败:', error);
-    }
-  };
-
-  const fetchCurrentStep = async () => {
-    try {
-      const response = await axios.get(`${baseURL}/getNewStep`, {
-        params: { user_id: userId },
-      });
-      setCurrentStep(response.data || {});
-    } catch (error) {
-      console.error('获取引导步骤失败:', error);
-    }
-  };
-
-  const updateStatus = async (taskId) => {
-    try {
-      await axios.post(`${baseURL}/updateStatus`, {
-        user_id: userId,
-        task_id: taskId,
-      });
-      await fetchTasks();
-      await fetchExperience();
-    } catch (error) {
-      console.error('更新状态失败:', error);
-    }
-  };
-
-  const updateProgress = async (taskId, progress) => {
-    try {
-      await axios.post(`${baseURL}/updateProgress`, {
-        user_id: userId,
-        task_id: taskId,
-        progress,
-      });
-      await fetchTasks();
-    } catch (error) {
-      console.error('更新进度失败:', error);
-    }
-  };
-
-  const claimReward = async (taskId) => {
-    try {
-      await axios.post(`${baseURL}/rewardClaim`, {
-        user_id: userId,
-        task_id: taskId,
-      });
-      await fetchTasks();
-      await fetchExperience();
-    } catch (error) {
-      console.error('领取奖励失败:', error);
-    }
-  };
-
-  const checkRewardStatus = async (taskId) => {
-    try {
-      const response = await axios.post(`${baseURL}/rewardReview`, {
-        user_id: userId,
-        task_id: taskId,
-      });
-      alert(response.data.message || '已完成');
-    } catch (error) {
-      console.error('查看失败:', error);
-    }
-  };
-
-  useEffect(() => {
-    const init = async () => {
-      await fetchTasks();
-      await fetchExperience();
-      await fetchCurrentStep();
-      setLoading(false);
-    };
-    init();
-  }, []);
-
-  if (loading) return <p className="loading">加载中...</p>;
-
-  return (
-    <div className="common-card right-content">
-      <div className="profile-header">
-        <h1>🎯 成长任务</h1>
-      </div>
-
-      <div className="profile-details">
-        <p><strong>当前经验：</strong>{experience.current_experience}</p>
-        <p><strong>等级：</strong>{experience.level}</p>
-        <p><strong>奖励经验：</strong>{experience.reward?.experience || 0}</p>
-        <p><strong>奖励积分：</strong>{experience.reward?.points || 0}</p>
-      </div>
-
-      <div className="profile-details">
-        <p><strong>🧭 当前引导步骤：</strong>{currentStep.current_step}</p>
-        <p>{currentStep.step_description}</p>
-      </div>
-
-      <div className="profile-details">
-        <h2>任务列表</h2>
-        <ul>
-          {tasks.map(task => (
-            <li key={task.task_id} style={{ marginBottom: '20px', borderBottom: '1px solid #eee', paddingBottom: '10px' }}>
-              <p><strong>任务：</strong>{task.title}</p>
-              <p><strong>描述：</strong>{task.description}</p>
-              <p><strong>进度：</strong>{task.progress}%</p>
-              <p><strong>状态：</strong>{task.status}</p>
-              <p><strong>奖励：</strong>经验 {task.reward.experience}，积分 {task.reward.points}</p>
-
-              <div className="task-btn-group">
-                <button className="task-btn" onClick={() => updateStatus(task.task_id)}>更新状态</button>
-                <button className="task-btn" onClick={() => updateProgress(task.task_id, 100)}>提交进度</button>
-                <button className="task-btn" onClick={() => claimReward(task.task_id)}>领取奖励</button>
-                <button className="task-btn" onClick={() => checkRewardStatus(task.task_id)}>查看奖励状态</button>
-              </div>
-            </li>
-          ))}
-        </ul>
-      </div>
-    </div>
-  );
+    const tableData = [
+        {
+            level: 'lv0【糖果】',
+            newPermissions: '查看种子分类和评论，查看其他用户主页',
+            upgradeConditions: '无'
+        },
+        {
+            level: 'lv1【曲奇】',
+            newPermissions: '上传免费种子，下载免费种子，发布评论，私信/关注其他用户，收藏种子',
+            upgradeConditions: '经验≥50，分享率≥0.5，上传量≥10G，做种时长≥72h'
+        },
+        {
+            level: 'lv2【巧克力】',
+            newPermissions: '下载付费种子，成立和加入兴趣小组',
+            upgradeConditions: '经验≥200，分享率≥0.75，上传量≥50G，做种时长≥240h'
+        },
+        {
+            level: 'lv3【冰激凌】',
+            newPermissions: '上传付费种子',
+            upgradeConditions: '经验≥500，分享率≥1，上传量≥100G，做种时长≥600h'
+        }
+    ];
+    return (
+        <div className="newbie-tasks-container">
+            <h2 className="page-title">🎯 用户等级</h2>
+            <p>各个等级的权限在下面啦~ 经验值可以通过上传种子获得哦！</p>
+            <table className="tasks-table">
+                <thead>
+                    <tr>
+                        <th>用户等级</th>
+                        <th>新增权限</th>
+                        <th>升级条件</th>
+                    </tr>
+                </thead>
+                <tbody>
+                    {tableData.map((item, index) => (
+                        <tr key={index}>
+                            <td>{item.level}</td>
+                            <td>{item.newPermissions}</td>
+                            <td>{item.upgradeConditions}</td>
+                        </tr>
+                    ))}
+                </tbody>
+            </table>
+        </div>
+    );
 };
 
 export default NewbieTasks;
-
diff --git a/src/pages/UserCenter/UserLevelExperience.jsx b/src/pages/UserCenter/UserLevelExperience.jsx
index 81135c1..4269c44 100644
--- a/src/pages/UserCenter/UserLevelExperience.jsx
+++ b/src/pages/UserCenter/UserLevelExperience.jsx
@@ -1,213 +1,213 @@
-// import React, { useState, useEffect } from 'react';
-// import axios from 'axios';
+import React, { useState, useEffect } from 'react';
+import axios from 'axios';
 
-// const UserLevelExperience = ({ userId }) => {
-//   const [experienceInfo, setExperienceInfo] = useState(null);
-//   const [error, setError] = useState(null);
-//   const [isLoading, setIsLoading] = useState(false);
-//   const [upgradeResult, setUpgradeResult] = useState(null);
-//   const [hasCheckedIn, setHasCheckedIn] = useState(false);
-//   const [isUpgrading, setIsUpgrading] = useState(false);
-//   const [lastUpgradeTime, setLastUpgradeTime] = useState(null);
-//   const [justUpgraded, setJustUpgraded] = useState(false); // 新增
+const UserLevelExperience = ({ userId }) => {
+  const [experienceInfo, setExperienceInfo] = useState(null);
+  const [error, setError] = useState(null);
+  const [isLoading, setIsLoading] = useState(false);
+  const [upgradeResult, setUpgradeResult] = useState(null);
+  const [hasCheckedIn, setHasCheckedIn] = useState(false);
+  const [isUpgrading, setIsUpgrading] = useState(false);
+  const [lastUpgradeTime, setLastUpgradeTime] = useState(null);
+  const [justUpgraded, setJustUpgraded] = useState(false); // 新增
 
-//   useEffect(() => {
-//     if (!userId) return;
-//     fetchAllLevelData();
-//   }, [userId]);
+  useEffect(() => {
+    if (!userId) return;
+    fetchAllLevelData();
+  }, [userId]);
 
-//   useEffect(() => {
-//     if (
-//       experienceInfo &&
-//       experienceInfo.current_experience >= experienceInfo.next_level_experience &&
-//       !isUpgrading &&
-//       !justUpgraded &&
-//       (!lastUpgradeTime || Date.now() - lastUpgradeTime > 2000)
-//     ) {
-//       checkUpgrade();
-//     }
-//   }, [experienceInfo, isUpgrading, lastUpgradeTime, justUpgraded]);
+  useEffect(() => {
+    if (
+      experienceInfo &&
+      experienceInfo.current_experience >= experienceInfo.next_level_experience &&
+      !isUpgrading &&
+      !justUpgraded &&
+      (!lastUpgradeTime || Date.now() - lastUpgradeTime > 2000)
+    ) {
+    }
+  }, [experienceInfo, isUpgrading, lastUpgradeTime, justUpgraded]);
 
-//   const fetchAllLevelData = async () => {
-//     try {
-//       setIsLoading(true);
-//       setError(null);
+  const fetchAllLevelData = async () => {
+    try {
+      setIsLoading(true);
+      setError(null);
 
-//       const { data } = await axios.get('/echo/level/getExperience', {
-//         params: { user_id: userId },
-//       });
+      const { data } = await axios.get('/echo/level/getExperience', {
+        params: { user_id: userId },
+      });
 
-//       const normalizedData = {
-//         ...data,
-//         current_level: data.current_level || data.level,
-//       };
+      const normalizedData = {
+        ...data,
+        current_level: data.current_level || data.level,
+      };
 
-//       setExperienceInfo(normalizedData);
+      setExperienceInfo(normalizedData);
 
-//       const today = new Date().toDateString();
-//       const lastCheckIn = localStorage.getItem('lastCheckIn');
-//       setHasCheckedIn(lastCheckIn === today);
-//     } catch (err) {
-//       console.error('经验信息获取失败:', err);
-//       setError('获取经验信息失败');
-//     } finally {
-//       setIsLoading(false);
-//     }
-//   };
+      const today = new Date().toDateString();
+      const lastCheckIn = localStorage.getItem('lastCheckIn');
+      setHasCheckedIn(lastCheckIn === today);
+    } catch (err) {
+      console.error('经验信息获取失败:', err);
+      setError('获取经验信息失败');
+    } finally {
+      setIsLoading(false);
+    }
+  };
 
-//   const updateExperience = async (source, amount = 10) => {
-//     try {
-//       setIsLoading(true);
-//       setError(null);
+  const updateExperience = async (source, amount = 10) => {
+    try {
+      setIsLoading(true);
+      setError(null);
 
-//       const { data } = await axios.post('/echo/level/updateExperience', {
-//         user_id: userId,
-//         experience: amount,
-//         source: source,
-//       });
+      const { data } = await axios.post('/echo/level/updateExperience', {
+        user_id: userId,
+        experience: amount,
+        source: source,
+      });
 
-//       setExperienceInfo((prev) => ({
-//         ...prev,
-//         current_experience: data.current_experience,
-//       }));
+      setExperienceInfo((prev) => ({
+        ...prev,
+        current_experience: data.current_experience,
+      }));
 
-//       alert(`获得${amount}点经验值！来源：${source}`);
+      alert(`获得${amount}点经验值！来源：${source}`);
 
-//       if (source === 'check-in') {
-//         localStorage.setItem('lastCheckIn', new Date().toDateString());
-//         setHasCheckedIn(true);
-//       }
-//     } catch (err) {
-//       console.error('更新经验失败:', err);
-//       setError(err.response?.data?.message || '更新经验失败');
-//     } finally {
-//       setIsLoading(false);
-//     }
-//   };
+      if (source === 'check-in') {
+        localStorage.setItem('lastCheckIn', new Date().toDateString());
+        setHasCheckedIn(true);
+      }
+    } catch (err) {
+      console.error('更新经验失败:', err);
+      setError(err.response?.data?.message || '更新经验失败');
+    } finally {
+      setIsLoading(false);
+    }
+  };
 
-//   const checkUpgrade = async () => {
-//     if (isUpgrading) return;
+  const checkUpgrade = async () => {
+    if (isUpgrading) return;
 
-//     try {
-//       setIsLoading(true);
-//       setIsUpgrading(true);
-//       setError(null);
+    try {
+      setIsLoading(true);
+      setIsUpgrading(true);
+      setError(null);
 
-//       const { data } = await axios.get('/echo/level/upgrade-check', {
-//         params: { user_id: userId },
-//       });
+      const { data } = await axios.get('/echo/level/upgrade-check', {
+        params: { user_id: userId },
+      });
 
-//       if (data.can_upgrade) {
-//         if (window.confirm('您已满足升级条件，是否要升级？')) {
-//           await performUpgrade();
-//         }
-//       } else {
-//         if (data.is_max_level) {
-//           alert('您已达到最高等级！');
-//         } else {
-//           alert(`还不能升级，还需要${data.next_level_experience - data.current_experience}点经验值`);
-//         }
-//       }
-//     } catch (err) {
-//       console.error('检查升级失败:', err);
-//       setError(err.response?.data?.message || '检查升级失败');
-//     } finally {
-//       setIsLoading(false);
-//       setIsUpgrading(false);
-//     }
-//   };
+      if (data.can_upgrade) {
+        if (window.confirm('您已满足升级条件，是否要升级？')) {
+          await performUpgrade();
+        }
+      } else {
+        if (data.is_max_level) {
+          alert('您已达到最高等级！');
+        } else {
+          alert(`还不能升级，还需要${data.next_level_experience - data.current_experience}点经验值`);
+        }
+      }
+    } catch (err) {
+      console.error('检查升级失败:', err);
+      setError(err.response?.data?.message || '检查升级失败');
+    } finally {
+      setIsLoading(false);
+      setIsUpgrading(false);
+    }
+  };
 
-//   const performUpgrade = async () => {
-//     try {
-//       setIsUpgrading(true);
-//       setIsLoading(true);
-//       setError(null);
+  const performUpgrade = async () => {
+    try {
+      setIsUpgrading(true);
+      setIsLoading(true);
+      setError(null);
 
-//       const { data } = await axios.post('/echo/level/upgrades', {
-//         user_id: userId,
-//         can_upgrade: true,
-//       });
+      const { data } = await axios.post('/echo/level/upgrades', {
+        user_id: userId,
+        can_upgrade: true,
+      });
 
-//       console.log('升级响应数据:', data);
+      console.log('升级响应数据:', data);
 
-//       if (data.status === 'success') {
-//         setExperienceInfo((prev) => ({
-//           ...prev,
-//           current_level: data.new_level,
-//           current_experience: data.current_experience || 0,
-//           next_level_experience: data.next_level_experience || prev.next_level_experience * 2,
-//         }));
+      if (data.status === 'success') {
+        setExperienceInfo((prev) => ({ 
+          // 更新就会进入useEffect,又执行了checkUpgrade,循环
+          ...prev,
+          current_level: data.new_level,
+          current_experience: data.current_experience || 0,
+          next_level_experience: data.next_level_experience || prev.next_level_experience * 2,
+        }));
 
-//         setUpgradeResult(data);
-//         setLastUpgradeTime(Date.now());
-//         setJustUpgraded(true); // 标记为刚升级过
-//         setTimeout(() => setJustUpgraded(false), 3000); // 3 秒冷却期
-//         alert(`恭喜！您已升级到等级 ${data.new_level}！`);
+        setUpgradeResult(data);
+        setLastUpgradeTime(Date.now());
+        setJustUpgraded(true); // 标记为刚升级过
+        setTimeout(() => setJustUpgraded(false), 3000); // 3 秒冷却期
+        alert(`恭喜！您已升级到等级 ${data.new_level}！`);
 
-//         // 再次拉取最新经验数据，避免经验值仍然满足升级条件
-//         await fetchAllLevelData();
-//       } else {
-//         throw new Error(data.message || '升级失败');
-//       }
-//     } catch (err) {
-//       console.error('升级失败:', err);
-//       setError(err.message || '升级失败');
-//       alert(err.message || '升级失败，请稍后再试');
-//     } finally {
-//       setIsLoading(false);
-//       setIsUpgrading(false);
-//     }
-//   };
+        // 再次拉取最新经验数据，避免经验值仍然满足升级条件
+        await fetchAllLevelData();
+      } else {
+        throw new Error(data.message || '升级失败');
+      }
+    } catch (err) {
+      console.error('升级失败:', err);
+      setError(err.message || '升级失败');
+      alert(err.message || '升级失败，请稍后再试');
+    } finally {
+      setIsLoading(false);
+      setIsUpgrading(false);
+    }
+  };
 
-//   if (error) return <p className="error">{error}</p>;
-//   if (isLoading) return <p>加载中...</p>;
-//   if (!experienceInfo) return <p>加载经验信息中...</p>;
+  if (error) return <p className="error">{error}</p>;
+  if (isLoading) return <p>加载中...</p>;
+  if (!experienceInfo) return <p>加载经验信息中...</p>;
 
-//   const { current_experience, next_level_experience, current_level } = experienceInfo;
-//   const progressPercent = Math.min(
-//     100,
-//     (current_experience / (next_level_experience || 1)) * 100
-//   ).toFixed(2);
+  const { current_experience, next_level_experience, current_level } = experienceInfo;
+  const progressPercent = Math.min(
+    100,
+    (current_experience / (next_level_experience || 1)) * 100
+  ).toFixed(2);
 
-//   const expToNextLevel = Math.max(0, next_level_experience - current_experience);
+  const expToNextLevel = Math.max(0, next_level_experience - current_experience);
 
-//   return (
-//     <div className="level-experience-section">
-//       <h3>等级与经验</h3>
-//       <p><strong>当前等级：</strong>{current_level || '未知'}</p>
-//       <p><strong>当前经验：</strong>{current_experience}</p>
-//       <p><strong>距离下一等级还需：</strong>{expToNextLevel} 经验值</p>
+  return (
+    <div style={{ padding: '20px', marginTop: '-80px', marginLeft: '70px' }}>
+      {/* <h3>等级与经验</h3> */}
+      <div style={{ fontSize: '20px', marginBottom: '10px' }}><strong>当前等级：</strong>lv{current_level || '未知'}</div>
+      <div style={{ fontSize: '20px', marginBottom: '10px' }}><strong>当前经验：</strong>{current_experience}</div>
+      {/* <p><strong>距离下一等级还需：</strong>{expToNextLevel} 经验值</p> */}
 
-//       <div className="exp-bar-wrapper">
-//         <div className="exp-bar" style={{ width: `${progressPercent}%` }} />
-//       </div>
-//       <p className="exp-progress-text">{progressPercent}%</p>
+      <div className="exp-bar-wrapper">
+        <div className="exp-bar" style={{ width: `${progressPercent}%` }} />
+      </div>
+      <p className="exp-progress-text">{progressPercent}%</p>
 
-//       {upgradeResult && (
-//         <div className="upgrade-success">
-//           <p>恭喜！您已成功升级到等级 {upgradeResult.new_level}！</p>
-//         </div>
-//       )}
+      {upgradeResult && (
+        <div className="upgrade-success">
+          <p>恭喜！您已成功升级到等级 {upgradeResult.new_level}！</p>
+        </div>
+      )}
 
-//       {error && (
-//         <div className="upgrade-error">
-//           <p>{error}</p>
-//         </div>
-//       )}
+      {error && (
+        <div className="upgrade-error">
+          <p>{error}</p>
+        </div>
+      )}
 
-//       <div className="level-actions">
-//         <button onClick={() => updateExperience('check-in', 15)} disabled={hasCheckedIn}>
-//           {hasCheckedIn ? '今日已签到' : '每日签到 (+15经验)'}
-//         </button>
-//         <button onClick={() => updateExperience('task', 30)}>完成任务 (+30经验)</button>
-//         <button onClick={() => updateExperience('upload', 50)}>上传种子 (+50经验)</button>
-//         <button onClick={checkUpgrade} disabled={isUpgrading}>
-//           {isUpgrading ? '升级中...' : '检查升级'}
-//         </button>
-//       </div>
-//     </div>
-//   );
-// };
+      <div className="level-actions">
+        {/* <button onClick={() => updateExperience('check-in', 15)} disabled={hasCheckedIn}>
+          {hasCheckedIn ? '今日已签到' : '每日签到 (+15经验)'}
+        </button> */}
+        {/* <button onClick={() => updateExperience('task', 30)}>完成任务 (+30经验)</button> */}
+        {/* <button onClick={() => updateExperience('upload', 50)}>上传种子 (+20经验)</button> */}
+        {/* <button onClick={checkUpgrade} disabled={isUpgrading}>
+          {isUpgrading ? '升级中...' : '检查升级'}
+        </button> */}
+      </div>
+    </div>
+  );
+};
 
-// export default UserLevelExperience;
+export default UserLevelExperience;
 
diff --git a/src/pages/UserCenter/UserProfile.jsx b/src/pages/UserCenter/UserProfile.jsx
index 79d8313..5c088c9 100644
--- a/src/pages/UserCenter/UserProfile.jsx
+++ b/src/pages/UserCenter/UserProfile.jsx
@@ -1,6 +1,6 @@
 import React from 'react';
 import UserProfileBase from './UserProfileBase';
-// import UserLevelExperience from './UserLevelExperience';
+import UserLevelExperience from './UserLevelExperience';
 import './UserProfile.css';
 import UserStatusChecker from './UserStatusChecker';
 
@@ -14,7 +14,7 @@
   return (
     <div>
       <UserProfileBase onLoadExperienceInfo={loadExperienceInfo} />
-      {/* {userId && <UserLevelExperience userId={userId} />} */}
+      {userId && <UserLevelExperience userId={userId} />}
       {/* <UserStatusChecker /> */}
     </div>
   );
diff --git a/src/pages/UserCenter/UserProfileBase.jsx b/src/pages/UserCenter/UserProfileBase.jsx
index c90cb63..dd28dc2 100644
--- a/src/pages/UserCenter/UserProfileBase.jsx
+++ b/src/pages/UserCenter/UserProfileBase.jsx
@@ -5,6 +5,8 @@
 import toast from 'react-hot-toast';
 import { confirmAlert } from 'react-confirm-alert';
 import 'react-confirm-alert/src/react-confirm-alert.css';
+import UserLevelExperience from './UserLevelExperience';
+
 
 const DEFAULT_AVATAR_URL = `${process.env.PUBLIC_URL}/default-avatar.png`;
 
@@ -203,6 +205,7 @@
           <p><strong>分享率：</strong>{(shareRate * 100).toFixed(2)}%</p>
           <p><strong>加入时间：</strong>{new Date(joinedDate).toLocaleDateString()}</p>
 
+          
           <div className="profile-actions">
             <button onClick={() => setShowPwdModal(true)}>修改密码</button>
             <button onClick={handleLogout}>退出登录</button>
