diff --git a/src/pages/UserCenter/NewbieTasks.css b/src/pages/UserCenter/NewbieTasks.css
deleted file mode 100644
index 660cec3..0000000
--- a/src/pages/UserCenter/NewbieTasks.css
+++ /dev/null
@@ -1,20 +0,0 @@
-
-.task-btn {
-  margin-right: 8px;
-  padding: 6px 12px;
-  border: none;
-  border-radius: 6px;
-  background-color: #4a90e2;
-  color: white;
-  cursor: pointer;
-}
-
-.task-btn:hover {
-  background-color: #357abd;
-}
-
-.loading {
-  text-align: center;
-  font-size: 18px;
-  color: #333;
-}
diff --git a/src/pages/UserCenter/NewbieTasks.jsx b/src/pages/UserCenter/NewbieTasks.jsx
deleted file mode 100644
index 768f95a..0000000
--- a/src/pages/UserCenter/NewbieTasks.jsx
+++ /dev/null
@@ -1,327 +0,0 @@
-// import React, { useEffect, useState } from 'react';
-// import axios from 'axios';
-// import Header from '../../components/Header';
-// import './UserProfile.css'; // 复用个人资料页面的样式
-// import UserNav from './UserNav';
-
-// 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="user-profile-container">
-//       <Header />
-//       <div className="user-center">
-//         <div className="user-nav-container">
-//           <UserNav activeKey="newbieTasks" onSelect={() => {}} />
-//         </div>
-
-//         <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' }}>
-//                   <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 style={{ marginTop: '10px' }}>
-//                     <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>
-//       </div>
-//     </div>
-//   );
-// };
-
-// export default NewbieTasks;
-
-import React, { useEffect, useState } from 'react';
-import axios from 'axios';
-import './UserProfile.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>
-  );
-};
-
-export default NewbieTasks;
-
diff --git a/src/pages/UserCenter/UserNav.jsx b/src/pages/UserCenter/UserNav.jsx
index 3456195..c272424 100644
--- a/src/pages/UserCenter/UserNav.jsx
+++ b/src/pages/UserCenter/UserNav.jsx
@@ -14,6 +14,7 @@
     { to: '/user/collections', label: '我的收藏' },
     // { to: '/user/newbie-tasks', label: '新手考核' },
     { to: '/user/invite', label: '邀请新用户' },
+    { to: '/user/recharge', label: '充值服务' },
   ];
 
   // 判断路径是否是当前活动页面
