邀请码、端口修改

Change-Id: Idc325c5f970ade6c750cd09d3d3c32b803dd17e3
diff --git a/src/pages/UserCenter/UserInvite.css b/src/pages/UserCenter/UserInvite.css
new file mode 100644
index 0000000..8250e0b
--- /dev/null
+++ b/src/pages/UserCenter/UserInvite.css
@@ -0,0 +1,36 @@
+.user-invite-container {
+  padding: 24px;
+  background: #fff;
+  border-radius: 12px;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+  max-width: 500px;
+  margin: 0 auto;
+  text-align: center;
+}
+
+.invite-button {
+  padding: 10px 20px;
+  background-color: #4a90e2;
+  color: white;
+  font-size: 16px;
+  border: none;
+  border-radius: 8px;
+  cursor: pointer;
+  margin-top: 12px;
+}
+
+.invite-button:disabled {
+  background-color: #cccccc;
+  cursor: not-allowed;
+}
+
+.invite-code {
+  margin-top: 20px;
+  font-size: 18px;
+  color: #333;
+}
+
+.invite-code span {
+  font-weight: bold;
+  color: #4a90e2;
+}
diff --git a/src/pages/UserCenter/UserInvite.jsx b/src/pages/UserCenter/UserInvite.jsx
new file mode 100644
index 0000000..aa6e559
--- /dev/null
+++ b/src/pages/UserCenter/UserInvite.jsx
@@ -0,0 +1,98 @@
+// import React, { useState } from 'react';
+// import './UserInvite.css';
+// import axios from 'axios';
+// import { useUser } from '../../context/UserContext'; // 根据实际路径调整
+
+// const UserInvite = () => {
+//   const { user } = useUser();
+//   const [inviteCode, setInviteCode] = useState('');
+//   const [loading, setLoading] = useState(false);
+
+//   const handleGenerateInvite = async () => {
+//     if (!user?.userId) {
+//       alert('未获取到用户信息,无法生成邀请码');
+//       return;
+//     }
+
+//     setLoading(true);
+//     try {
+//       const response = await axios.get('/echo/user/getInviteCode', {
+//         params: { user_id: user.userId },
+//       });
+//       setInviteCode(response.data.invite_code);
+//     } catch (error) {
+//       console.error('生成邀请码失败:', error);
+//       alert('生成邀请码失败,请稍后再试');
+//     }
+//     setLoading(false);
+//   };
+
+//   return (
+//     <div className="user-invite-container">
+//       <h2>邀请新用户</h2>
+//       <button className="invite-button" onClick={handleGenerateInvite} disabled={loading}>
+//         {loading ? '生成中...' : '生成邀请码'}
+//       </button>
+//       {inviteCode && (
+//         <div className="invite-code">
+//           邀请码:<span>{inviteCode}</span>
+//         </div>
+//       )}
+//     </div>
+//   );
+// };
+
+// export default UserInvite;
+
+import React, { useState } from 'react';
+import './UserInvite.css';
+import axios from 'axios';
+import { useUser } from '../../context/UserContext';
+
+const UserInvite = () => {
+  const { user } = useUser();
+  const [inviteCode, setInviteCode] = useState('');
+  const [loading, setLoading] = useState(false);
+
+  const handleGenerateInvite = async () => {
+    if (!user?.userId) {
+      alert('未获取到用户信息,无法生成邀请码');
+      return;
+    }
+
+    setLoading(true);
+    try {
+      const response = await axios.post('/echo/user/getInviteCode', {
+        user_id: user.userId,
+      });
+
+      const data = response.data;
+
+      if (data.status === 'success') {
+        setInviteCode(data.invite_code);
+      } else {
+        alert(`生成失败:${data.message}`);
+      }
+    } catch (error) {
+      console.error('生成邀请码失败:', error);
+      alert('生成邀请码失败,请稍后再试');
+    }
+    setLoading(false);
+  };
+
+  return (
+    <div className="user-invite-container">
+      <h2>邀请新用户</h2>
+      <button className="invite-button" onClick={handleGenerateInvite} disabled={loading}>
+        {loading ? '生成中...' : '生成邀请码'}
+      </button>
+      {inviteCode && (
+        <div className="invite-code">
+          邀请码:<span>{inviteCode}</span>
+        </div>
+      )}
+    </div>
+  );
+};
+
+export default UserInvite;
diff --git a/src/pages/UserCenter/UserNav.jsx b/src/pages/UserCenter/UserNav.jsx
index cc343b1..64dd375 100644
--- a/src/pages/UserCenter/UserNav.jsx
+++ b/src/pages/UserCenter/UserNav.jsx
@@ -13,6 +13,7 @@
     { to: '/user/groups', label: '我的群组' },
     { to: '/user/collections', label: '我的收藏' },
     { to: '/user/newbie-tasks', label: '新手考核' },
+    { to: '/user/invite', label: '邀请新用户' },
   ];
 
   // 判断路径是否是当前活动页面
@@ -36,37 +37,3 @@
 };
 
 export default UserNav;
-
-// import React from 'react';
-// import './UserNav.css';
-
-// const UserNav = ({ activeKey, onSelect }) => {
-//   const navLinks = [
-//     { key: 'profile', label: '个人资料' },
-//     // { key: 'dynamics', label: '我的动态' },
-//     // { key: 'friends', label: '我的好友' },
-//     // { key: 'groups', label: '我的群组' },
-//     // { key: 'collections', label: '我的收藏' },
-//     { key: 'newbieTasks', label: '新手考核' },
-//   ];
-
-//   return (
-//     <div className="user-nav-container">
-//       <nav className="user-nav">
-//         {navLinks.map(({ key, label }) => (
-//           <div
-//             key={key}
-//             className={`user-nav-item ${activeKey === key ? 'active' : ''}`}
-//             onClick={() => onSelect(key)}
-//             style={{ cursor: 'pointer' }}
-//           >
-//             {label}
-//           </div>
-//         ))}
-//       </nav>
-//     </div>
-//   );
-// };
-
-// export default UserNav;
-