diff --git a/LJC/personalpage/src/App.js b/LJC/personalpage/src/App.js
index ed241f4..f11e487 100644
--- a/LJC/personalpage/src/App.js
+++ b/LJC/personalpage/src/App.js
@@ -31,7 +31,7 @@
         <main className="py-5">
           <div className="max-w-6xl mx-auto">
             <Routes>
-              <Route path="/" element={<Navigate to="/user/11" replace />} />
+              {/* <Route path="/" element={<Navigate to="/user/11" replace />} /> */}
               <Route path="/user/:userId" element={<UserProfileRoute />} />
             </Routes>
           </div>
diff --git a/LJC/personalpage/src/components/EditProfileForm.jsx b/LJC/personalpage/src/components/EditProfileForm.jsx
deleted file mode 100644
index d33cbcb..0000000
--- a/LJC/personalpage/src/components/EditProfileForm.jsx
+++ /dev/null
@@ -1,116 +0,0 @@
-import React, { useState } from 'react';
-import { FaCamera, FaTimes } from 'react-icons/fa';
-
-const EditProfileForm = ({ user, onSave, onCancel }) => {
-  const [avatar, setAvatar] = useState(user.avatar || '');
-  const [bio, setBio] = useState(user.bio || '');
-  const [gender, setGender] = useState('secret');
-  const [birthday, setBirthday] = useState('');
-  const [location, setLocation] = useState('');
-
-  const handleSubmit = (e) => {
-    e.preventDefault();
-    onSave({ avatar, bio });
-  };
-
-  return (
-    <form onSubmit={handleSubmit}>
-      <div className="mb-6">
-        <label className="block text-sm font-medium text-gray-700 mb-2">头像</label>
-        <div className="flex items-center">
-          <div className="relative">
-            <div className="w-20 h-20 rounded-full bg-gradient-to-r from-pink-300 to-orange-300 flex items-center justify-center">
-              {avatar ? (
-                <img src={avatar} alt="Avatar" className="w-full h-full rounded-full" />
-              ) : (
-                <div className="text-white text-2xl">{user.username.charAt(0)}</div>
-              )}
-            </div>
-            <button 
-              type="button"
-              className="absolute bottom-0 right-0 bg-white rounded-full p-1 shadow-md"
-            >
-              <FaCamera className="text-gray-700 text-sm" />
-            </button>
-          </div>
-          <div className="ml-4">
-            <input
-              type="text"
-              value={avatar}
-              onChange={(e) => setAvatar(e.target.value)}
-              placeholder="输入头像URL"
-              className="w-full rounded-md border-gray-300 shadow-sm text-sm"
-            />
-          </div>
-        </div>
-      </div>
-      
-      <div className="mb-4">
-        <label className="block text-sm font-medium text-gray-700 mb-2">个人简介</label>
-        <textarea
-          value={bio}
-          onChange={(e) => setBio(e.target.value)}
-          rows="3"
-          maxLength="100"
-          className="mt-1 block w-full rounded-md border-gray-300 shadow-sm text-sm"
-          placeholder="介绍一下自己吧～"
-        />
-        <div className="text-right text-xs text-gray-500 mt-1">{bio.length}/100</div>
-      </div>
-      
-      <div className="grid grid-cols-2 gap-4 mb-4">
-        <div>
-          <label className="block text-sm font-medium text-gray-700 mb-2">性别</label>
-          <select
-            value={gender}
-            onChange={(e) => setGender(e.target.value)}
-            className="mt-1 block w-full rounded-md border-gray-300 shadow-sm text-sm"
-          >
-            <option value="secret">保密</option>
-            <option value="male">男</option>
-            <option value="female">女</option>
-          </select>
-        </div>
-        
-        <div>
-          <label className="block text-sm font-medium text-gray-700 mb-2">生日</label>
-          <input
-            type="date"
-            value={birthday}
-            onChange={(e) => setBirthday(e.target.value)}
-            className="mt-1 block w-full rounded-md border-gray-300 shadow-sm text-sm"
-          />
-        </div>
-      </div>
-      
-      <div className="mb-6">
-        <label className="block text-sm font-medium text-gray-700 mb-2">地区</label>
-        <input
-          type="text"
-          value={location}
-          onChange={(e) => setLocation(e.target.value)}
-          placeholder="填写你所在的城市"
-          className="mt-1 block w-full rounded-md border-gray-300 shadow-sm text-sm"
-        />
-      </div>
-      
-      <div className="flex justify-end space-x-3">
-        <button 
-          type="button"
-          onClick={onCancel}
-          className="px-5 py-2 bg-gray-100 text-gray-700 rounded-full text-sm hover:bg-gray-200"
-        >
-          取消
-        </button>
-        <button 
-          type="submit"
-          className="px-5 py-2 bg-red-500 text-white rounded-full text-sm hover:bg-red-600"
-        >
-          保存
-        </button>
-      </div>
-    </form>
-  );
-};
-
-export default EditProfileForm;
\ No newline at end of file
diff --git a/LJC/personalpage/src/components/FavoritePosts.jsx b/LJC/personalpage/src/components/FavoritePosts.jsx
deleted file mode 100644
index 4033d7b..0000000
--- a/LJC/personalpage/src/components/FavoritePosts.jsx
+++ /dev/null
@@ -1,95 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import { getFavorites } from '../services/api';
-import { FaHeart } from 'react-icons/fa';
-
-const FavoritePosts = ({ userId }) => {
-  const [favorites, setFavorites] = useState([]);
-  const [loading, setLoading] = useState(true);
-
-  useEffect(() => {
-    const fetchFavorites = async () => {
-      try {
-        setLoading(true);
-        const response = await getFavorites(userId);
-        setFavorites(response.data);
-      } catch (error) {
-        console.error('Failed to fetch favorites:', error);
-      } finally {
-        setLoading(false);
-      }
-    };
-    
-    if (userId) {
-      fetchFavorites();
-    }
-  }, [userId]);
-
-  if (loading) {
-    return (
-      <div className="grid grid-cols-2 md:grid-cols-3 gap-4">
-        {[1, 2, 3, 4, 5, 6].map(item => (
-          <div key={item} className="bg-gray-100 rounded-xl aspect-square animate-pulse"></div>
-        ))}
-      </div>
-    );
-  }
-
-  if (favorites.length === 0) {
-    return (
-      <div className="text-center py-16">
-        <div className="inline-flex items-center justify-center w-16 h-16 rounded-full bg-red-100 text-red-500 mb-4">
-          <FaHeart className="text-2xl" />
-        </div>
-        <h3 className="text-lg font-medium text-gray-900">暂无收藏内容</h3>
-        <p className="mt-1 text-gray-500">你还没有收藏任何笔记</p>
-      </div>
-    );
-  }
-
-  // 模拟瀑布流布局数据
-  const waterfallData = favorites.map(post => ({
-    ...post,
-    height: Math.floor(Math.random() * 100) + 200 // 随机高度
-  }));
-
-  return (
-    <div className="grid grid-cols-2 md:grid-cols-3 gap-4">
-      {waterfallData.map(post => (
-        <div 
-          key={post.id} 
-          className="bg-white rounded-xl overflow-hidden shadow-sm hover:shadow-md transition-shadow"
-        >
-          <div 
-            className="relative bg-gray-200" 
-            style={{ height: `${post.height}px` }}
-          >
-            {/* 占位图片 */}
-            <div className="absolute inset-0 bg-gradient-to-br from-pink-100 to-orange-100"></div>
-            
-            {/* 类型标签 */}
-            <div className="absolute top-2 right-2 bg-black bg-opacity-50 text-white text-xs px-2 py-1 rounded-full">
-              {post.type === 'image' ? '图文' : 
-               post.type === 'video' ? '视频' : '文档'}
-            </div>
-            
-            {/* 收藏标记 */}
-            <div className="absolute bottom-2 right-2 bg-red-500 rounded-full p-1">
-              <FaHeart className="text-white text-xs" />
-            </div>
-          </div>
-          
-          <div className="p-3">
-            <h3 className="font-medium line-clamp-2">{post.title}</h3>
-            <div className="flex items-center mt-2 text-xs text-gray-500">
-              <span>❤️ 2.5k</span>
-              <span className="mx-2">•</span>
-              <span>⭐ 156</span>
-            </div>
-          </div>
-        </div>
-      ))}
-    </div>
-  );
-};
-
-export default FavoritePosts;
\ No newline at end of file
diff --git a/LJC/personalpage/src/components/FollowButton.jsx b/LJC/personalpage/src/components/FollowButton.jsx
deleted file mode 100644
index 9e738d4..0000000
--- a/LJC/personalpage/src/components/FollowButton.jsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import React from 'react';
-import { followUser, unfollowUser } from '../services/api';
-
-const FollowButton = ({ userId, isFollowing, onFollowChange }) => {
-  const handleFollow = async () => {
-    try {
-      if (isFollowing) {
-        await unfollowUser(userId);
-        onFollowChange(false);
-      } else {
-        await followUser(userId);
-        onFollowChange(true);
-      }
-    } catch (error) {
-      console.error('关注操作失败:', error);
-    }
-  };
-
-  return (
-    <button 
-      onClick={handleFollow}
-      className={`px-6 py-2 rounded-full text-sm font-medium transition-all ${
-        isFollowing 
-          ? 'bg-gray-100 text-gray-800 hover:bg-gray-200' 
-          : 'bg-red-500 text-white hover:bg-red-600'
-      }`}
-    >
-      {isFollowing ? '已关注' : '关注'}
-    </button>
-  );
-};
-
-export default FollowButton;
\ No newline at end of file
diff --git a/Merge/back_rhj/__pycache__/config.cpython-312.pyc b/Merge/back_rhj/__pycache__/config.cpython-312.pyc
index 59299dd..00c0bdd 100644
--- a/Merge/back_rhj/__pycache__/config.cpython-312.pyc
+++ b/Merge/back_rhj/__pycache__/config.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/__init__.py b/Merge/back_rhj/app/__init__.py
index c50a674..098898c 100644
--- a/Merge/back_rhj/app/__init__.py
+++ b/Merge/back_rhj/app/__init__.py
@@ -1,5 +1,7 @@
 from flask import Flask
 from flask_cors import CORS
+import atexit
+import logging
 
 def create_app():
     app = Flask(__name__)
@@ -17,6 +19,26 @@
     # Register recommendation blueprint
     from .blueprints.recommend import recommend_bp
     app.register_blueprint(recommend_bp)
+    
+    # Register scheduler blueprint
+    from .blueprints.scheduler import scheduler_bp
+    app.register_blueprint(scheduler_bp)
+    
+    # 初始化定时任务管理器
+    from .utils.scheduler_manager import SchedulerManager
+    
+    scheduler_manager = SchedulerManager()
+    scheduler_manager.init_scheduler(app)
+    
+    # 检查是否启用定时任务
+    scheduler_enabled = getattr(app.config, 'SCHEDULER_ENABLED', True)
+    if scheduler_enabled:
+        # 从配置获取重建间隔
+        rebuild_interval = getattr(app.config, 'GRAPH_REBUILD_INTERVAL', 1)
+        scheduler_manager.start_graph_rebuild_task(interval_minutes=rebuild_interval)
+    
+    # 注册关闭时的清理函数
+    atexit.register(lambda: scheduler_manager.shutdown())
 
     return app
 
diff --git a/Merge/back_rhj/app/__pycache__/__init__.cpython-312.pyc b/Merge/back_rhj/app/__pycache__/__init__.cpython-312.pyc
index 7c7d017..770df5b 100644
--- a/Merge/back_rhj/app/__pycache__/__init__.cpython-312.pyc
+++ b/Merge/back_rhj/app/__pycache__/__init__.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/__pycache__/routes.cpython-312.pyc b/Merge/back_rhj/app/__pycache__/routes.cpython-312.pyc
index 0ec74bd..f2ad12b 100644
--- a/Merge/back_rhj/app/__pycache__/routes.cpython-312.pyc
+++ b/Merge/back_rhj/app/__pycache__/routes.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/blueprints/__pycache__/recommend.cpython-312.pyc b/Merge/back_rhj/app/blueprints/__pycache__/recommend.cpython-312.pyc
index 29c786d..75ccdab 100644
--- a/Merge/back_rhj/app/blueprints/__pycache__/recommend.cpython-312.pyc
+++ b/Merge/back_rhj/app/blueprints/__pycache__/recommend.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/blueprints/__pycache__/scheduler.cpython-312.pyc b/Merge/back_rhj/app/blueprints/__pycache__/scheduler.cpython-312.pyc
new file mode 100644
index 0000000..ae84b70
--- /dev/null
+++ b/Merge/back_rhj/app/blueprints/__pycache__/scheduler.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/blueprints/scheduler.py b/Merge/back_rhj/app/blueprints/scheduler.py
new file mode 100644
index 0000000..038f8f4
--- /dev/null
+++ b/Merge/back_rhj/app/blueprints/scheduler.py
@@ -0,0 +1,165 @@
+"""
+定时任务管理API蓝图
+提供定时任务的启动、停止、状态查询等接口
+"""
+from flask import Blueprint, jsonify, request, current_app
+from functools import wraps
+
+scheduler_bp = Blueprint('scheduler', __name__, url_prefix='/api/scheduler')
+
+def admin_required(f):
+    """装饰器：需要管理员权限"""
+    @wraps(f)
+    def decorated(*args, **kwargs):
+        # 这里可以添加管理员权限验证逻辑
+        # 暂时允许所有请求通过
+        return f(*args, **kwargs)
+    return decorated
+
+@scheduler_bp.route('/status', methods=['GET'])
+def get_scheduler_status():
+    """获取定时任务状态"""
+    try:
+        scheduler_manager = current_app.scheduler_manager
+        status = scheduler_manager.get_task_status()
+        
+        return jsonify({
+            'success': True,
+            'data': status,
+            'message': '获取定时任务状态成功'
+        })
+    except Exception as e:
+        return jsonify({
+            'success': False,
+            'message': f'获取定时任务状态失败: {str(e)}'
+        }), 500
+
+@scheduler_bp.route('/start', methods=['POST'])
+@admin_required
+def start_scheduler():
+    """启动定时任务"""
+    try:
+        data = request.get_json() or {}
+        interval_minutes = data.get('interval_minutes', 1)
+        
+        # 验证间隔时间
+        if not isinstance(interval_minutes, (int, float)) or interval_minutes <= 0:
+            return jsonify({
+                'success': False,
+                'message': '无效的间隔时间，必须是大于0的数字'
+            }), 400
+            
+        scheduler_manager = current_app.scheduler_manager
+        scheduler_manager.start_graph_rebuild_task(interval_minutes)
+        
+        return jsonify({
+            'success': True,
+            'message': f'定时任务已启动，间隔: {interval_minutes}分钟'
+        })
+    except Exception as e:
+        return jsonify({
+            'success': False,
+            'message': f'启动定时任务失败: {str(e)}'
+        }), 500
+
+@scheduler_bp.route('/stop', methods=['POST'])
+@admin_required
+def stop_scheduler():
+    """停止定时任务"""
+    try:
+        scheduler_manager = current_app.scheduler_manager
+        scheduler_manager.stop_graph_rebuild_task()
+        
+        return jsonify({
+            'success': True,
+            'message': '定时任务已停止'
+        })
+    except Exception as e:
+        return jsonify({
+            'success': False,
+            'message': f'停止定时任务失败: {str(e)}'
+        }), 500
+
+@scheduler_bp.route('/update-interval', methods=['POST'])
+@admin_required
+def update_interval():
+    """更新任务间隔"""
+    try:
+        data = request.get_json()
+        if not data or 'interval_minutes' not in data:
+            return jsonify({
+                'success': False,
+                'message': '缺少interval_minutes参数'
+            }), 400
+            
+        interval_minutes = data['interval_minutes']
+        
+        # 验证间隔时间
+        if not isinstance(interval_minutes, (int, float)) or interval_minutes <= 0:
+            return jsonify({
+                'success': False,
+                'message': '无效的间隔时间，必须是大于0的数字'
+            }), 400
+            
+        scheduler_manager = current_app.scheduler_manager
+        scheduler_manager.update_task_interval(interval_minutes)
+        
+        return jsonify({
+            'success': True,
+            'message': f'任务间隔已更新为 {interval_minutes}分钟'
+        })
+    except Exception as e:
+        return jsonify({
+            'success': False,
+            'message': f'更新任务间隔失败: {str(e)}'
+        }), 500
+
+@scheduler_bp.route('/rebuild-now', methods=['POST'])
+@admin_required
+def rebuild_graph_now():
+    """立即执行一次图重建"""
+    try:
+        scheduler_manager = current_app.scheduler_manager
+        
+        # 在新线程中执行，避免阻塞请求
+        import threading
+        thread = threading.Thread(target=scheduler_manager.rebuild_graph_job)
+        thread.start()
+        
+        return jsonify({
+            'success': True,
+            'message': '图重建任务已开始执行'
+        })
+    except Exception as e:
+        return jsonify({
+            'success': False,
+            'message': f'执行图重建失败: {str(e)}'
+        }), 500
+
+@scheduler_bp.route('/logs', methods=['GET'])
+def get_rebuild_logs():
+    """获取重建日志统计"""
+    try:
+        scheduler_manager = current_app.scheduler_manager
+        status = scheduler_manager.get_task_status()
+        
+        log_info = {
+            'rebuild_count': status['rebuild_count'],
+            'error_count': status['error_count'],
+            'last_rebuild_time': status['last_rebuild_time'],
+            'success_rate': (
+                ((status['rebuild_count'] - status['error_count']) / status['rebuild_count'] * 100)
+                if status['rebuild_count'] > 0 else 0
+            )
+        }
+        
+        return jsonify({
+            'success': True,
+            'data': log_info,
+            'message': '获取重建日志成功'
+        })
+    except Exception as e:
+        return jsonify({
+            'success': False,
+            'message': f'获取重建日志失败: {str(e)}'
+        }), 500
diff --git a/Merge/back_rhj/app/functions/__pycache__/FAuth.cpython-312.pyc b/Merge/back_rhj/app/functions/__pycache__/FAuth.cpython-312.pyc
index 49086a6..6c0297b 100644
--- a/Merge/back_rhj/app/functions/__pycache__/FAuth.cpython-312.pyc
+++ b/Merge/back_rhj/app/functions/__pycache__/FAuth.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/__pycache__/__init__.cpython-312.pyc b/Merge/back_rhj/app/models/__pycache__/__init__.cpython-312.pyc
index a0814d8..8eec580 100644
--- a/Merge/back_rhj/app/models/__pycache__/__init__.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/__pycache__/__init__.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/__pycache__/email_verification.cpython-312.pyc b/Merge/back_rhj/app/models/__pycache__/email_verification.cpython-312.pyc
index c1d6dfa..c9ad75d 100644
--- a/Merge/back_rhj/app/models/__pycache__/email_verification.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/__pycache__/email_verification.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/__pycache__/users.cpython-312.pyc b/Merge/back_rhj/app/models/__pycache__/users.cpython-312.pyc
index 58af35e..1af05fe 100644
--- a/Merge/back_rhj/app/models/__pycache__/users.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/__pycache__/users.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/recall/__pycache__/__init__.cpython-312.pyc b/Merge/back_rhj/app/models/recall/__pycache__/__init__.cpython-312.pyc
index d1cf37c..88c8123 100644
--- a/Merge/back_rhj/app/models/recall/__pycache__/__init__.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/recall/__pycache__/__init__.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/recall/__pycache__/ad_recall.cpython-312.pyc b/Merge/back_rhj/app/models/recall/__pycache__/ad_recall.cpython-312.pyc
index 08a722c..7d0748e 100644
--- a/Merge/back_rhj/app/models/recall/__pycache__/ad_recall.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/recall/__pycache__/ad_recall.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/recall/__pycache__/hot_recall.cpython-312.pyc b/Merge/back_rhj/app/models/recall/__pycache__/hot_recall.cpython-312.pyc
index cb6c725..3cfdd43 100644
--- a/Merge/back_rhj/app/models/recall/__pycache__/hot_recall.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/recall/__pycache__/hot_recall.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/recall/__pycache__/multi_recall_manager.cpython-312.pyc b/Merge/back_rhj/app/models/recall/__pycache__/multi_recall_manager.cpython-312.pyc
index 9a95456..9e1d7c8 100644
--- a/Merge/back_rhj/app/models/recall/__pycache__/multi_recall_manager.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/recall/__pycache__/multi_recall_manager.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/recall/__pycache__/swing_recall.cpython-312.pyc b/Merge/back_rhj/app/models/recall/__pycache__/swing_recall.cpython-312.pyc
index d913d68..24c3ddb 100644
--- a/Merge/back_rhj/app/models/recall/__pycache__/swing_recall.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/recall/__pycache__/swing_recall.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/recall/__pycache__/usercf_recall.cpython-312.pyc b/Merge/back_rhj/app/models/recall/__pycache__/usercf_recall.cpython-312.pyc
index adb6177..e212bf5 100644
--- a/Merge/back_rhj/app/models/recall/__pycache__/usercf_recall.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/recall/__pycache__/usercf_recall.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/recall/ad_recall.py b/Merge/back_rhj/app/models/recall/ad_recall.py
deleted file mode 100644
index 0fe3b0a..0000000
--- a/Merge/back_rhj/app/models/recall/ad_recall.py
+++ /dev/null
@@ -1,207 +0,0 @@
-import pymysql
-from typing import List, Tuple, Dict
-import random
-
-class AdRecall:
-    """
-    广告召回算法实现
-    专门用于召回广告类型的内容
-    """
-    
-    def __init__(self, db_config: dict):
-        """
-        初始化广告召回模型
-        
-        Args:
-            db_config: 数据库配置
-        """
-        self.db_config = db_config
-        self.ad_items = []
-        
-    def _get_ad_items(self):
-        """获取广告物品列表"""
-        conn = pymysql.connect(**self.db_config)
-        try:
-            cursor = conn.cursor()
-            
-            # 获取所有广告帖子，按热度和发布时间排序
-            cursor.execute("""
-                SELECT 
-                    p.id,
-                    p.heat,
-                    p.created_at,
-                    COUNT(DISTINCT b.user_id) as interaction_count,
-                    DATEDIFF(NOW(), p.created_at) as days_since_created
-                FROM posts p
-                LEFT JOIN behaviors b ON p.id = b.post_id
-                WHERE p.is_advertisement = 1 AND p.status = 'published'
-                GROUP BY p.id, p.heat, p.created_at
-                ORDER BY p.heat DESC, p.created_at DESC
-            """)
-            
-            results = cursor.fetchall()
-            
-            # 计算广告分数
-            items_with_scores = []
-            for row in results:
-                post_id, heat, created_at, interaction_count, days_since_created = row
-                
-                # 处理None值
-                heat = heat or 0
-                interaction_count = interaction_count or 0
-                days_since_created = days_since_created or 0
-                
-                # 广告分数计算：热度 + 交互数 - 时间惩罚
-                # 新发布的广告给予更高权重
-                freshness_bonus = max(0, 30 - days_since_created) / 30.0  # 30天内的新鲜度奖励
-                
-                ad_score = (
-                    heat * 0.6 +
-                    interaction_count * 0.3 +
-                    freshness_bonus * 100  # 新鲜度奖励
-                )
-                
-                items_with_scores.append((post_id, ad_score))
-            
-            # 按广告分数排序
-            self.ad_items = sorted(items_with_scores, key=lambda x: x[1], reverse=True)
-            
-        finally:
-            cursor.close()
-            conn.close()
-    
-    def train(self):
-        """训练广告召回模型"""
-        print("开始获取广告物品...")
-        self._get_ad_items()
-        print(f"广告召回模型训练完成，共{len(self.ad_items)}个广告物品")
-    
-    def recall(self, user_id: int, num_items: int = 10) -> List[Tuple[int, float]]:
-        """
-        为用户召回广告物品
-        
-        Args:
-            user_id: 用户ID
-            num_items: 召回物品数量
-            
-        Returns:
-            List of (item_id, score) tuples
-        """
-        # 如果尚未训练，先进行训练
-        if not hasattr(self, 'ad_items') or not self.ad_items:
-            self.train()
-        
-        # 获取用户已交互的广告，避免重复推荐
-        conn = pymysql.connect(**self.db_config)
-        try:
-            cursor = conn.cursor()
-            cursor.execute("""
-                SELECT DISTINCT b.post_id 
-                FROM behaviors b
-                JOIN posts p ON b.post_id = p.id
-                WHERE b.user_id = %s AND p.is_advertisement = 1
-                AND b.type IN ('like', 'favorite', 'comment', 'view')
-            """, (user_id,))
-            
-            user_interacted_ads = set(row[0] for row in cursor.fetchall())
-            
-            # 获取用户的兴趣标签（基于历史行为）
-            cursor.execute("""
-                SELECT t.name, COUNT(*) as count
-                FROM behaviors b
-                JOIN posts p ON b.post_id = p.id
-                JOIN post_tags pt ON p.id = pt.post_id
-                JOIN tags t ON pt.tag_id = t.id
-                WHERE b.user_id = %s AND b.type IN ('like', 'favorite', 'comment')
-                GROUP BY t.name
-                ORDER BY count DESC
-                LIMIT 10
-            """, (user_id,))
-            
-            user_interest_tags = set(row[0] for row in cursor.fetchall())
-            
-        finally:
-            cursor.close()
-            conn.close()
-        
-        # 过滤掉用户已交互的广告
-        filtered_ads = [
-            (item_id, score) for item_id, score in self.ad_items
-            if item_id not in user_interacted_ads
-        ]
-        
-        # 如果没有未交互的广告，但有广告数据，返回评分最高的广告（可能用户会再次感兴趣）
-        if not filtered_ads and self.ad_items:
-            print(f"用户 {user_id} 已与所有广告交互，返回评分最高的广告")
-            filtered_ads = self.ad_items[:num_items]
-        
-        # 如果用户有兴趣标签，可以进一步个性化广告推荐
-        if user_interest_tags and filtered_ads:
-            filtered_ads = self._personalize_ads(filtered_ads, user_interest_tags)
-        
-        return filtered_ads[:num_items]
-    
-    def _personalize_ads(self, ad_list: List[Tuple[int, float]], user_interest_tags: set) -> List[Tuple[int, float]]:
-        """
-        根据用户兴趣标签个性化广告推荐
-        
-        Args:
-            ad_list: 广告列表
-            user_interest_tags: 用户兴趣标签
-            
-        Returns:
-            个性化后的广告列表
-        """
-        conn = pymysql.connect(**self.db_config)
-        try:
-            cursor = conn.cursor()
-            
-            personalized_ads = []
-            for ad_id, ad_score in ad_list:
-                # 获取广告的标签
-                cursor.execute("""
-                    SELECT t.name
-                    FROM post_tags pt
-                    JOIN tags t ON pt.tag_id = t.id
-                    WHERE pt.post_id = %s
-                """, (ad_id,))
-                
-                ad_tags = set(row[0] for row in cursor.fetchall())
-                
-                # 计算标签匹配度
-                tag_match_score = len(ad_tags & user_interest_tags) / max(len(user_interest_tags), 1)
-                
-                # 调整广告分数
-                final_score = ad_score * (1 + tag_match_score)
-                personalized_ads.append((ad_id, final_score))
-            
-            # 重新排序
-            personalized_ads.sort(key=lambda x: x[1], reverse=True)
-            return personalized_ads
-            
-        finally:
-            cursor.close()
-            conn.close()
-    
-    def get_random_ads(self, num_items: int = 5) -> List[Tuple[int, float]]:
-        """
-        获取随机广告（用于多样性）
-        
-        Args:
-            num_items: 返回物品数量
-            
-        Returns:
-            List of (item_id, score) tuples
-        """
-        if len(self.ad_items) <= num_items:
-            return self.ad_items
-        
-        # 随机选择但倾向于高分广告
-        weights = [score for _, score in self.ad_items]
-        selected_indices = random.choices(
-            range(len(self.ad_items)), 
-            weights=weights, 
-            k=num_items
-        )
-        
-        return [self.ad_items[i] for i in selected_indices]
diff --git a/Merge/back_rhj/app/models/recommend/__pycache__/LightGCN.cpython-312.pyc b/Merge/back_rhj/app/models/recommend/__pycache__/LightGCN.cpython-312.pyc
index c87435f..f7079b8 100644
--- a/Merge/back_rhj/app/models/recommend/__pycache__/LightGCN.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/recommend/__pycache__/LightGCN.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/recommend/__pycache__/base_model.cpython-312.pyc b/Merge/back_rhj/app/models/recommend/__pycache__/base_model.cpython-312.pyc
index b9d8c72..19bf281 100644
--- a/Merge/back_rhj/app/models/recommend/__pycache__/base_model.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/recommend/__pycache__/base_model.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/models/recommend/__pycache__/operators.cpython-312.pyc b/Merge/back_rhj/app/models/recommend/__pycache__/operators.cpython-312.pyc
index 13bb375..28de5cd 100644
--- a/Merge/back_rhj/app/models/recommend/__pycache__/operators.cpython-312.pyc
+++ b/Merge/back_rhj/app/models/recommend/__pycache__/operators.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/routes.py b/Merge/back_rhj/app/routes.py
index 23ff49b..f123a84 100644
--- a/Merge/back_rhj/app/routes.py
+++ b/Merge/back_rhj/app/routes.py
@@ -1,5 +1,6 @@
 from flask import Blueprint, request, jsonify
 from .functions.FAuth import FAuth
+from .services.recommendation_service import RecommendationService
 from sqlalchemy import create_engine
 from sqlalchemy.orm import sessionmaker
 from config import Config
@@ -8,6 +9,9 @@
 
 main = Blueprint('main', __name__)
 
+# 初始化推荐服务
+recommendation_service = RecommendationService()
+
 def token_required(f):
     """装饰器：需要令牌验证"""
     @wraps(f)
@@ -322,4 +326,69 @@
         return jsonify({
             'success': False, 
             'message': f'JWT令牌验证失败: {str(e)}'
-        }), 500
\ No newline at end of file
+        }), 500
+        
+@main.route('/verify_user', methods=['POST'])
+@token_required
+def verify_user(current_user):
+    """测试JWT令牌接口（需要登录）"""
+    try:
+        # 获取当前请求的token（从装饰器已验证的Authorization header）
+        auth_header = request.headers.get('Authorization')
+        current_token = auth_header[7:] if auth_header and auth_header.startswith('Bearer ') else None
+        
+        print(f"当前用户: {current_user.username}")
+        print(f"当前用户ID: {current_user.id}")
+        print(current_user.role)
+        print(f"Token验证成功: {current_token[:20]}..." if current_token else "No token")
+        
+        # 可选：检查请求体中是否有额外的token需要验证
+        data = request.get_json() or {}
+        additional_token = data.get('token')
+        
+        response_data = {
+            'success': True,
+            'userid': current_user.id,
+            'role': current_user.role,
+        }
+        
+        return jsonify(response_data), 200
+        
+    except Exception as e:
+        print(f"用户验证错误: {str(e)}")
+        return jsonify({
+            'success': False, 
+            'message': f'JWT令牌验证失败: {str(e)}'
+        }), 500
+
+@main.route('/recommend', methods=['POST'])
+@token_required
+def get_recommendations(current_user):
+    """获取个性化推荐接口"""
+    try:
+        data = request.get_json() or {}
+        user_id = data.get('user_id') or current_user.id
+        topk = data.get('topk', 10)  # 默认推荐10个
+        
+        print(f"为用户 {user_id} 获取推荐，数量: {topk}")
+        
+        # 调用推荐系统
+        recommendations = recommendation_service.get_recommendations(user_id, topk)
+        
+        return jsonify({
+            'success': True,
+            'data': {
+                'user_id': user_id,
+                'recommendations': recommendations,
+                'count': len(recommendations),
+                'type': 'personalized'
+            },
+            'message': '个性化推荐获取成功'
+        }), 200
+        
+    except Exception as e:
+        print(f"推荐系统错误: {str(e)}")
+        return jsonify({
+            'success': False, 
+            'message': f'推荐获取失败: {str(e)}'
+        }), 500
diff --git a/Merge/back_rhj/app/services/__pycache__/lightgcn_scorer.cpython-312.pyc b/Merge/back_rhj/app/services/__pycache__/lightgcn_scorer.cpython-312.pyc
index 2c86f52..a8d871a 100644
--- a/Merge/back_rhj/app/services/__pycache__/lightgcn_scorer.cpython-312.pyc
+++ b/Merge/back_rhj/app/services/__pycache__/lightgcn_scorer.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/services/__pycache__/recommendation_service.cpython-312.pyc b/Merge/back_rhj/app/services/__pycache__/recommendation_service.cpython-312.pyc
index da8389f..fd70a42 100644
--- a/Merge/back_rhj/app/services/__pycache__/recommendation_service.cpython-312.pyc
+++ b/Merge/back_rhj/app/services/__pycache__/recommendation_service.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/services/recommendation_service.py b/Merge/back_rhj/app/services/recommendation_service.py
index 2f4de13..0547f7b 100644
--- a/Merge/back_rhj/app/services/recommendation_service.py
+++ b/Merge/back_rhj/app/services/recommendation_service.py
@@ -483,7 +483,7 @@
             # 查询帖子基本信息
             format_strings = ','.join(['%s'] * len(topk_post_ids))
             cursor.execute(
-                f"""SELECT p.id, p.user_id, p.title, p.content, p.type, p.heat, p.created_at, p.is_advertisement
+                f"""SELECT p.id, p.user_id, p.title, p.content, p.type, p.heat, p.created_at, p.updated_at, p.media_urls, p.status, p.is_advertisement
                     FROM posts p 
                     WHERE p.id IN ({format_strings}) AND p.status = 'published'""",
                 tuple(topk_post_ids)
@@ -541,15 +541,20 @@
                 owner_user_id = row[1]
                 stats = behavior_stats.get(post_id, {})
                 post_info = {
-                    'post_id': post_id,
+                    'id': post_id,
+                    'user_id': owner_user_id,
                     'title': row[2],
-                    'content': row[3][:200] + '...' if len(row[3]) > 200 else row[3],
+                    'content': row[3],  # 不再截断，保持完整内容
+                    'media_urls': row[8],
+                    'status': row[9],
+                    'heat': row[5],
+                    'created_at': row[6].isoformat() if row[6] else "",
+                    'updated_at': row[7].isoformat() if row[7] else "",
+                    # 额外字段，可选保留
                     'type': row[4],
                     'username': user_map.get(owner_user_id, ""),
-                    'heat': row[5],
                     'tags': tag_map.get(post_id, ""),
-                    'created_at': str(row[6]) if row[6] else "",
-                    'is_advertisement': bool(row[7]),  # 添加广告标识
+                    'is_advertisement': bool(row[10]),
                     'like_count': stats.get('like', 0),
                     'comment_count': stats.get('comment', 0),
                     'favorite_count': stats.get('favorite', 0),
@@ -557,10 +562,6 @@
                     'share_count': stats.get('share', 0)
                 }
                 
-                # 如果有推荐打分，添加到结果中
-                if topk_scores is not None and i < len(topk_scores):
-                    post_info['recommendation_score'] = float(topk_scores[i])
-                
                 post_list.append(post_info)
             return post_list
         finally:
diff --git a/Merge/back_rhj/app/user_post_graph.txt b/Merge/back_rhj/app/user_post_graph.txt
index 2c66fd1..23da7af 100644
--- a/Merge/back_rhj/app/user_post_graph.txt
+++ b/Merge/back_rhj/app/user_post_graph.txt
@@ -1,11 +1,11 @@
-0	1 0 0 2 1 2 0 1 2 1 0 42 32 62 52 0 12 22	1749827292 1749827292 1749953091 1749953091 1749953091 1749953480 1749953480 1749953480 1749954059 1749954059 1749954059 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	1 5 5 2 1 2 5 1 2 1 5 5 2 2 1 1 5 1
-1	2 0 0 43 33 53 1 5 13 23	1749827292 1749953091 1749953480 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	5 5 5 1 5 2 2 5 1 2
-2	7 6 6 7 44 34 54 2 14 24	1749953091 1749953091 1749953480 1749953480 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	2 1 1 2 2 1 5 5 2 5
-3	3 0 3 0 0 1 45 35 55 15 25	1749953091 1749953091 1749953480 1749953480 1749954059 1749954059 1749955282 1749955282 1749955282 1749955282 1749955282	2 2 2 2 1 2 5 2 1 5 1
-4	0 0 2 46 36 56 6 16 26	1749953091 1749953480 1749954059 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	5 5 5 1 5 2 5 1 2
-5	37 47 57 3 7 17 27	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	1 2 5 5 1 2 5
-6	38 48 58 8 18 28	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	2 5 1 2 5 1
-7	39 49 59 4 9 19 29	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	5 1 2 2 5 1 2
-8	40 50 60 10 20 30	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	1 2 5 1 2 5
-9	41 51 61 11 31 21	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	2 5 1 2 1 5
-10	13	1749894174	5
+0	0 0 1 1 0 1 0 41 31 61 51 11 21	1749827292 1749953091 1749953091 1749953480 1749953480 1749954059 1749954059 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	1 1 2 2 1 2 1 5 2 2 1 5 1
+1	1 42 32 52 0 4 12 22	1749827292 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	5 1 5 2 2 5 1 2
+2	6 5 6 5 43 33 53 1 13 23	1749953091 1749953091 1749953480 1749953480 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	2 1 2 1 2 1 5 5 2 5
+3	2 2 0 44 34 54 14 24	1749953091 1749953480 1749954059 1749955282 1749955282 1749955282 1749955282 1749955282	2 2 2 5 2 1 5 1
+4	1 45 35 55 15 5 25	1749954059 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	5 1 5 2 1 5 2
+5	36 46 56 2 6 16 26	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	1 2 5 5 1 2 5
+6	37 47 57 7 17 27	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	2 5 1 2 5 1
+7	38 48 58 3 8 18 28	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	5 1 2 2 5 1 2
+8	39 49 59 9 19 29	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	1 2 5 1 2 5
+9	40 50 60 10 30 20	1749955282 1749955282 1749955282 1749955282 1749955282 1749955282	2 5 1 2 1 5
+10	12	1749894174	5
diff --git a/Merge/back_rhj/app/utils/__pycache__/data_loader.cpython-312.pyc b/Merge/back_rhj/app/utils/__pycache__/data_loader.cpython-312.pyc
index 10b3571..8157bf8 100644
--- a/Merge/back_rhj/app/utils/__pycache__/data_loader.cpython-312.pyc
+++ b/Merge/back_rhj/app/utils/__pycache__/data_loader.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/utils/__pycache__/graph_build.cpython-312.pyc b/Merge/back_rhj/app/utils/__pycache__/graph_build.cpython-312.pyc
index a560e74..e1676da 100644
--- a/Merge/back_rhj/app/utils/__pycache__/graph_build.cpython-312.pyc
+++ b/Merge/back_rhj/app/utils/__pycache__/graph_build.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/utils/__pycache__/parse_args.cpython-312.pyc b/Merge/back_rhj/app/utils/__pycache__/parse_args.cpython-312.pyc
index a88ee3b..ba17fcf 100644
--- a/Merge/back_rhj/app/utils/__pycache__/parse_args.cpython-312.pyc
+++ b/Merge/back_rhj/app/utils/__pycache__/parse_args.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/utils/__pycache__/scheduler_manager.cpython-312.pyc b/Merge/back_rhj/app/utils/__pycache__/scheduler_manager.cpython-312.pyc
new file mode 100644
index 0000000..6ed8964
--- /dev/null
+++ b/Merge/back_rhj/app/utils/__pycache__/scheduler_manager.cpython-312.pyc
Binary files differ
diff --git a/Merge/back_rhj/app/utils/scheduler_manager.py b/Merge/back_rhj/app/utils/scheduler_manager.py
new file mode 100644
index 0000000..d063e84
--- /dev/null
+++ b/Merge/back_rhj/app/utils/scheduler_manager.py
@@ -0,0 +1,148 @@
+"""
+定时任务管理器模块
+用于管理LightGCN图重建的定时任务
+"""
+import logging
+import os
+from datetime import datetime
+from apscheduler.schedulers.background import BackgroundScheduler
+from apscheduler.triggers.interval import IntervalTrigger
+from apscheduler.executors.pool import ThreadPoolExecutor
+from .graph_build import build_user_post_graph
+
+# 配置日志
+logging.basicConfig(
+    level=logging.INFO,
+    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
+)
+logger = logging.getLogger(__name__)
+
+class SchedulerManager:
+    """定时任务管理器"""
+    
+    def __init__(self):
+        self.scheduler = None
+        self.is_running = False
+        self.last_rebuild_time = None
+        self.rebuild_count = 0
+        self.error_count = 0
+        self.last_error = None
+        
+    def init_scheduler(self, app):
+        """初始化调度器"""
+        if self.scheduler is None:
+            # 从配置中获取设置
+            timezone = getattr(app.config, 'SCHEDULER_TIMEZONE', 'Asia/Shanghai')
+            max_threads = getattr(app.config, 'MAX_SCHEDULER_THREADS', 5)
+            
+            # 配置执行器
+            executors = {
+                'default': ThreadPoolExecutor(max_threads)
+            }
+            
+            # 创建调度器
+            self.scheduler = BackgroundScheduler(
+                executors=executors,
+                timezone=timezone
+            )
+            
+            app.scheduler_manager = self
+            logger.info(f"调度器初始化完成，时区: {timezone}, 最大线程数: {max_threads}")
+            
+    def rebuild_graph_job(self):
+        """重新构建LightGCN图的任务函数"""
+        try:
+            logger.info(f"开始第{self.rebuild_count + 1}次重新构建LightGCN图...")
+            start_time = datetime.now()
+            
+            # 执行图构建
+            build_user_post_graph()
+            
+            end_time = datetime.now()
+            duration = (end_time - start_time).total_seconds()
+            
+            self.last_rebuild_time = end_time
+            self.rebuild_count += 1
+            self.last_error = None  # 清除上次错误
+            
+            logger.info(f"LightGCN图重新构建完成，耗时: {duration:.2f}秒")
+            
+        except Exception as e:
+            self.error_count += 1
+            self.last_error = str(e)
+            logger.error(f"LightGCN图重新构建失败: {str(e)}")
+            
+    def start_graph_rebuild_task(self, interval_minutes=1):
+        """启动图重建定时任务"""
+        if self.scheduler is None:
+            raise RuntimeError("调度器未初始化")
+            
+        job_id = 'rebuild_lightgcn_graph'
+        
+        # 如果任务已存在，先移除
+        if self.scheduler.get_job(job_id):
+            self.scheduler.remove_job(job_id)
+            
+        # 添加新任务
+        self.scheduler.add_job(
+            func=self.rebuild_graph_job,
+            trigger=IntervalTrigger(minutes=interval_minutes),
+            id=job_id,
+            name=f'重新构建LightGCN图(每{interval_minutes}分钟)',
+            replace_existing=True,
+            max_instances=1  # 防止重复执行
+        )
+        
+        if not self.scheduler.running:
+            self.scheduler.start()
+            
+        self.is_running = True
+        logger.info(f"图重建定时任务已启动，间隔: {interval_minutes}分钟")
+        
+    def stop_graph_rebuild_task(self):
+        """停止图重建定时任务"""
+        if self.scheduler and self.scheduler.running:
+            job_id = 'rebuild_lightgcn_graph'
+            if self.scheduler.get_job(job_id):
+                self.scheduler.remove_job(job_id)
+                
+        self.is_running = False
+        logger.info("图重建定时任务已停止")
+        
+    def update_task_interval(self, interval_minutes):
+        """更新任务间隔"""
+        if self.is_running:
+            self.stop_graph_rebuild_task()
+            self.start_graph_rebuild_task(interval_minutes)
+        else:
+            logger.info(f"任务间隔已更新为{interval_minutes}分钟，但任务当前未运行")
+            
+    def get_task_status(self):
+        """获取任务状态"""
+        job_id = 'rebuild_lightgcn_graph'
+        job = None
+        
+        if self.scheduler:
+            job = self.scheduler.get_job(job_id)
+            
+        return {
+            'is_running': self.is_running,
+            'scheduler_running': self.scheduler.running if self.scheduler else False,
+            'job_exists': job is not None,
+            'job_name': job.name if job else None,
+            'next_run_time': job.next_run_time.isoformat() if job and job.next_run_time else None,
+            'last_rebuild_time': self.last_rebuild_time.isoformat() if self.last_rebuild_time else None,
+            'rebuild_count': self.rebuild_count,
+            'error_count': self.error_count,
+            'last_error': self.last_error,
+            'success_rate': (
+                ((self.rebuild_count - self.error_count) / self.rebuild_count * 100)
+                if self.rebuild_count > 0 else 0
+            )
+        }
+        
+    def shutdown(self):
+        """关闭调度器"""
+        if self.scheduler and self.scheduler.running:
+            self.scheduler.shutdown()
+            logger.info("调度器已关闭")
diff --git a/Merge/back_rhj/config.py b/Merge/back_rhj/config.py
index c249660..8375065 100644
--- a/Merge/back_rhj/config.py
+++ b/Merge/back_rhj/config.py
@@ -20,4 +20,10 @@
     MAIL_USE_TLS = os.environ.get('MAIL_USE_TLS', 'true').lower() in ['true', 'on', '1']
     MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
     MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
-    MAIL_DEFAULT_SENDER = os.environ.get('MAIL_DEFAULT_SENDER')
\ No newline at end of file
+    MAIL_DEFAULT_SENDER = os.environ.get('MAIL_DEFAULT_SENDER')
+    
+    # 定时任务配置
+    SCHEDULER_ENABLED = os.environ.get('SCHEDULER_ENABLED', 'true').lower() in ['true', 'on', '1']
+    GRAPH_REBUILD_INTERVAL = int(os.environ.get('GRAPH_REBUILD_INTERVAL', 1))  # 默认1分钟
+    SCHEDULER_TIMEZONE = os.environ.get('SCHEDULER_TIMEZONE', 'Asia/Shanghai')
+    MAX_SCHEDULER_THREADS = int(os.environ.get('MAX_SCHEDULER_THREADS', 5))
\ No newline at end of file
diff --git a/Merge/back_rhj/test_bloom_filter.py b/Merge/back_rhj/test_bloom_filter.py
deleted file mode 100644
index e69de29..0000000
--- a/Merge/back_rhj/test_bloom_filter.py
+++ /dev/null
diff --git a/Merge/back_rhj/test_redbook_recommendation.py b/Merge/back_rhj/test_redbook_recommendation.py
index d025ace..325def5 100644
--- a/Merge/back_rhj/test_redbook_recommendation.py
+++ b/Merge/back_rhj/test_redbook_recommendation.py
@@ -96,7 +96,7 @@
         
         print(f"冷启动推荐结果(用户{fake_user_id}):")
         for i, rec in enumerate(recommendations):
-            print(f"  {i+1}. 帖子ID: {rec['post_id']}, 标题: {rec['title'][:50]}...")
+            print(f"  {i+1}. 帖子ID: {rec['id']}, 标题: {rec['title'][:50]}...")
             print(f"     作者: {rec['username']}, 热度: {rec['heat']}")
             print(f"     点赞: {rec.get('like_count', 0)}, 评论: {rec.get('comment_count', 0)}")
             
@@ -150,7 +150,7 @@
             
             print(f"用户推荐结果(用户{user_id}):")
             for i, rec in enumerate(recommendations):
-                print(f"  {i+1}. 帖子ID: {rec['post_id']}, 标题: {rec['title'][:50]}...")
+                print(f"  {i+1}. 帖子ID: {rec['id']}, 标题: {rec['title'][:50]}...")
                 print(f"     作者: {rec['username']}, 热度: {rec['heat']}")
                 print(f"     点赞: {rec.get('like_count', 0)}, 评论: {rec.get('comment_count', 0)}")
                 if 'recommendation_score' in rec:
diff --git a/rhj/frontend/.gitignore b/rhj/frontend/.gitignore
deleted file mode 100644
index 4d29575..0000000
--- a/rhj/frontend/.gitignore
+++ /dev/null
@@ -1,23 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# production
-/build
-
-# misc
-.DS_Store
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
diff --git a/rhj/frontend/README.md b/rhj/frontend/README.md
deleted file mode 100644
index f32d94d..0000000
--- a/rhj/frontend/README.md
+++ /dev/null
@@ -1,73 +0,0 @@
-# Getting Started with Create React App
-
-This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
-
-## Available Scripts
-
-In the project directory, you can run:
-
-### `npm start`
-
-Runs the app in the development mode.\
-Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
-
-The page will reload when you make changes.\
-You may also see any lint errors in the console.
-
-### `npm test`
-
-Launches the test runner in the interactive watch mode.\
-See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
-
-### `npm run build`
-
-Builds the app for production to the `build` folder.\
-It correctly bundles React in production mode and optimizes the build for the best performance.
-
-The build is minified and the filenames include the hashes.\
-Your app is ready to be deployed!
-
-See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
-
-### `npm run eject`
-
-**Note: this is a one-way operation. Once you `eject`, you can't go back!**
-
-If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
-
-Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
-
-You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
-
-## Learn More
-
-You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
-
-To learn React, check out the [React documentation](https://reactjs.org/).
-
-### Code Splitting
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
-
-### Analyzing the Bundle Size
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
-
-### Making a Progressive Web App
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
-
-### Advanced Configuration
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
-
-### Deployment
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
-
-### `npm run build` fails to minify
-
-This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
-
-./src/page/*
-./public/index.html
\ No newline at end of file
diff --git a/rhj/frontend/package.json b/rhj/frontend/package.json
deleted file mode 100644
index a438ebb..0000000
--- a/rhj/frontend/package.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-  "name": "frontend",
-  "version": "0.1.0",
-  "private": true,
-  "dependencies": {
-    "@testing-library/dom": "^10.4.0",
-    "@testing-library/jest-dom": "^6.6.3",
-    "@testing-library/react": "^16.3.0",
-    "@testing-library/user-event": "^13.5.0",
-    "antd": "^5.26.0",
-    "crypto-js": "^4.2.0",
-    "react": "^19.1.0",
-    "react-dom": "^19.1.0",
-    "react-router-dom": "^7.6.2",
-    "react-scripts": "5.0.1",
-    "web-vitals": "^2.1.4"
-  },
-  "scripts": {
-    "start": "react-scripts start",
-    "build": "react-scripts build",
-    "test": "react-scripts test",
-    "eject": "react-scripts eject"
-  },
-  "eslintConfig": {
-    "extends": [
-      "react-app",
-      "react-app/jest"
-    ]
-  },
-  "browserslist": {
-    "production": [
-      ">0.2%",
-      "not dead",
-      "not op_mini all"
-    ],
-    "development": [
-      "last 1 chrome version",
-      "last 1 firefox version",
-      "last 1 safari version"
-    ]
-  }
-}
diff --git a/rhj/frontend/public/favicon.ico b/rhj/frontend/public/favicon.ico
deleted file mode 100644
index a11777c..0000000
--- a/rhj/frontend/public/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/rhj/frontend/public/index.html b/rhj/frontend/public/index.html
deleted file mode 100644
index aa069f2..0000000
--- a/rhj/frontend/public/index.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8" />
-    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
-    <meta name="viewport" content="width=device-width, initial-scale=1" />
-    <meta name="theme-color" content="#000000" />
-    <meta
-      name="description"
-      content="Web site created using create-react-app"
-    />
-    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
-    <!--
-      manifest.json provides metadata used when your web app is installed on a
-      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-    -->
-    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
-    <!--
-      Notice the use of %PUBLIC_URL% in the tags above.
-      It will be replaced with the URL of the `public` folder during the build.
-      Only files inside the `public` folder can be referenced from the HTML.
-
-      Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
-      work correctly both with client-side routing and a non-root public URL.
-      Learn how to configure a non-root public URL by running `npm run build`.
-    -->
-    <title>React App</title>
-  </head>
-  <body>
-    <noscript>You need to enable JavaScript to run this app.</noscript>
-    <div id="root"></div>
-    <!--
-      This HTML file is a template.
-      If you open it directly in the browser, you will see an empty page.
-
-      You can add webfonts, meta tags, or analytics to this file.
-      The build step will place the bundled scripts into the <body> tag.
-
-      To begin the development, run `npm start` or `yarn start`.
-      To create a production bundle, use `npm run build` or `yarn build`.
-    -->
-  </body>
-</html>
diff --git a/rhj/frontend/public/logo192.png b/rhj/frontend/public/logo192.png
deleted file mode 100644
index fc44b0a..0000000
--- a/rhj/frontend/public/logo192.png
+++ /dev/null
Binary files differ
diff --git a/rhj/frontend/public/logo512.png b/rhj/frontend/public/logo512.png
deleted file mode 100644
index a4e47a6..0000000
--- a/rhj/frontend/public/logo512.png
+++ /dev/null
Binary files differ
diff --git a/rhj/frontend/public/manifest.json b/rhj/frontend/public/manifest.json
deleted file mode 100644
index 080d6c7..0000000
--- a/rhj/frontend/public/manifest.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "short_name": "React App",
-  "name": "Create React App Sample",
-  "icons": [
-    {
-      "src": "favicon.ico",
-      "sizes": "64x64 32x32 24x24 16x16",
-      "type": "image/x-icon"
-    },
-    {
-      "src": "logo192.png",
-      "type": "image/png",
-      "sizes": "192x192"
-    },
-    {
-      "src": "logo512.png",
-      "type": "image/png",
-      "sizes": "512x512"
-    }
-  ],
-  "start_url": ".",
-  "display": "standalone",
-  "theme_color": "#000000",
-  "background_color": "#ffffff"
-}
diff --git a/rhj/frontend/public/robots.txt b/rhj/frontend/public/robots.txt
deleted file mode 100644
index e9e57dc..0000000
--- a/rhj/frontend/public/robots.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# https://www.robotstxt.org/robotstxt.html
-User-agent: *
-Disallow:
diff --git a/rhj/frontend/src/App.css b/rhj/frontend/src/App.css
deleted file mode 100644
index 74b5e05..0000000
--- a/rhj/frontend/src/App.css
+++ /dev/null
@@ -1,38 +0,0 @@
-.App {
-  text-align: center;
-}
-
-.App-logo {
-  height: 40vmin;
-  pointer-events: none;
-}
-
-@media (prefers-reduced-motion: no-preference) {
-  .App-logo {
-    animation: App-logo-spin infinite 20s linear;
-  }
-}
-
-.App-header {
-  background-color: #282c34;
-  min-height: 100vh;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  font-size: calc(10px + 2vmin);
-  color: white;
-}
-
-.App-link {
-  color: #61dafb;
-}
-
-@keyframes App-logo-spin {
-  from {
-    transform: rotate(0deg);
-  }
-  to {
-    transform: rotate(360deg);
-  }
-}
diff --git a/rhj/frontend/src/App.js b/rhj/frontend/src/App.js
deleted file mode 100644
index b194444..0000000
--- a/rhj/frontend/src/App.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react';
-import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
-import LoginPage from './pages/LoginPage/LoginPage';
-import RegisterPage from './pages/RegisterPage/RegisterPage';
-import ForgotPasswordPage from './pages/ForgotPasswordPage/ForgotPasswordPage';
-import TestDashboard from './pages/TestDashboard/TestDashboard';
-import './App.css';
-
-function App() {
-  return (
-    <div className="App">
-      <Router>
-        <Routes>
-          <Route path="/" element={<LoginPage />} />
-          <Route path="/login" element={<LoginPage />} />
-          <Route path="/register" element={<RegisterPage />} />
-          <Route path="/forgot-password" element={<ForgotPasswordPage />} />
-          <Route path="/test-dashboard" element={<TestDashboard />} />
-        </Routes>
-      </Router>
-    </div>
-  );
-}
-
-export default App;
diff --git a/rhj/frontend/src/components/LogoutButton/LogoutButton.js b/rhj/frontend/src/components/LogoutButton/LogoutButton.js
deleted file mode 100644
index 5681927..0000000
--- a/rhj/frontend/src/components/LogoutButton/LogoutButton.js
+++ /dev/null
@@ -1,77 +0,0 @@
-import React from 'react';
-import { Button, Modal } from 'antd';
-import { LogoutOutlined } from '@ant-design/icons';
-import { clearAuthInfo, getUserInfo } from '../../utils/auth';
-
-const LogoutButton = ({ style = {}, onLogout = null }) => {
-  const userInfo = getUserInfo();
-
-  const handleLogout = () => {
-    Modal.confirm({
-      title: '确认退出',
-      content: '您确定要退出登录吗？',
-      okText: '确定',
-      cancelText: '取消',
-      onOk: () => {
-        // 清除认证信息，但保留记住的登录信息
-        clearAuthInfo(false);
-        
-        // 执行回调函数
-        if (onLogout) {
-          onLogout();
-        } else {
-          // 默认跳转到登录页
-          window.location.href = '/';
-        }
-      }
-    });
-  };
-
-  const handleCompleteLogout = () => {
-    Modal.confirm({
-      title: '完全退出',
-      content: '这将清除所有保存的登录信息，包括"记住我"的设置。确定要继续吗？',
-      okText: '确定',
-      cancelText: '取消',
-      onOk: () => {
-        // 清除所有认证信息，包括记住的登录信息
-        clearAuthInfo(true);
-        
-        // 执行回调函数
-        if (onLogout) {
-          onLogout();
-        } else {
-          // 默认跳转到登录页
-          window.location.href = '/';
-        }
-      }
-    });
-  };
-
-  if (!userInfo) {
-    return null;
-  }
-
-  return (
-    <div style={style}>
-      <Button 
-        type="default" 
-        icon={<LogoutOutlined />}
-        onClick={handleLogout}
-        style={{ marginRight: 8 }}
-      >
-        退出登录
-      </Button>
-      <Button 
-        type="link" 
-        size="small"
-        onClick={handleCompleteLogout}
-        style={{ color: '#ff4d4f' }}
-      >
-        完全退出
-      </Button>
-    </div>
-  );
-};
-
-export default LogoutButton;
diff --git a/rhj/frontend/src/index.css b/rhj/frontend/src/index.css
deleted file mode 100644
index ec2585e..0000000
--- a/rhj/frontend/src/index.css
+++ /dev/null
@@ -1,13 +0,0 @@
-body {
-  margin: 0;
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
-    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
-    sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-code {
-  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
-    monospace;
-}
diff --git a/rhj/frontend/src/index.js b/rhj/frontend/src/index.js
deleted file mode 100644
index d563c0f..0000000
--- a/rhj/frontend/src/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom/client';
-import './index.css';
-import App from './App';
-import reportWebVitals from './reportWebVitals';
-
-const root = ReactDOM.createRoot(document.getElementById('root'));
-root.render(
-  <React.StrictMode>
-    <App />
-  </React.StrictMode>
-);
-
-// If you want to start measuring performance in your app, pass a function
-// to log results (for example: reportWebVitals(console.log))
-// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
-reportWebVitals();
diff --git a/rhj/frontend/src/pages/ForgotPasswordPage/ForgotPasswordPage.css b/rhj/frontend/src/pages/ForgotPasswordPage/ForgotPasswordPage.css
deleted file mode 100644
index 6af35e6..0000000
--- a/rhj/frontend/src/pages/ForgotPasswordPage/ForgotPasswordPage.css
+++ /dev/null
@@ -1,915 +0,0 @@
-/* 忘记密码页面 - 继承注册页面样式 */
-
-/* 导入注册页面的所有样式 */
-@import url('../RegisterPage/RegisterPage.css');
-
-/* 小红书风格忘记密码卡片 */
-.forgot-password-card {
-  background: #fff;
-  border-radius: 8px;
-  padding: 40px; /* 增加桌面端内边距 */
-  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
-  border: 1px solid #e1e1e1;
-  width: 100%;
-  max-width: 450px; /* 增加桌面端卡片最大宽度 */
-  transition: none;
-}
-
-/* 忘记密码头部 */
-.forgot-password-header {
-  text-align: center;
-  margin-bottom: 40px;
-}
-
-/* Logo样式 */
-.logo-section {
-  margin-bottom: 24px;
-}
-
-.logo-icon {
-  width: 60px;
-  height: 60px;
-  background: #ff2442;
-  border-radius: 12px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  font-size: 28px;
-  margin: 0 auto 16px;
-  box-shadow: 0 4px 12px rgba(255, 36, 66, 0.2);
-}
-
-.forgot-password-title {
-  font-size: 24px;
-  font-weight: 600;
-  color: #333;
-  margin: 0 0 12px 0;
-  text-align: center;
-}
-
-.forgot-password-title::after {
-  display: none;
-}
-
-.forgot-password-subtitle {
-  font-size: 14px;
-  color: #999;
-  margin: 0 0 32px 0;
-  font-weight: 400;
-  text-align: center;
-}
-
-/* 表单样式 */
-.forgot-password-form {
-  display: flex;
-  flex-direction: column;
-  gap: 20px;
-  width: 100%;
-}
-
-.form-group {
-  display: flex;
-  flex-direction: column;
-  gap: 6px;
-  width: 100%;
-  box-sizing: border-box;
-  margin-bottom: 2px;
-  position: relative; /* 为绝对定位的错误提示提供参考点 */
-}
-
-.form-group .input-wrapper {
-  width: 100%;
-  box-sizing: border-box;
-}
-
-.form-label {
-  font-size: 14px;
-  font-weight: 500;
-  color: #333;
-  margin-bottom: 8px;
-}
-
-.input-wrapper {
-  position: relative;
-  display: flex;
-  align-items: center;
-  width: 100%;
-  box-sizing: border-box;
-}
-
-.form-input {
-  width: 100% !important;
-  height: 44px;
-  padding: 12px 16px 12px 48px;
-  border: 1px solid #e1e1e1;
-  border-radius: 6px;
-  font-size: 14px;
-  transition: border-color 0.2s ease;
-  background: #fff;
-  color: #333;
-  box-sizing: border-box !important;
-  flex: 1;
-  min-width: 0;
-}
-
-/* 针对 Antd Input 组件的特定样式 */
-.form-input.ant-input,
-.form-input.ant-input-affix-wrapper {
-  width: 100% !important;
-  height: 44px !important;
-  border: 1px solid #e1e1e1 !important;
-  border-radius: 6px !important;
-  padding: 12px 48px 12px 48px !important;
-  font-size: 14px !important;
-  background: #fff !important;
-  color: #333 !important;
-  box-sizing: border-box !important;
-  flex: 1 !important;
-  min-width: 0 !important;
-  display: flex !important;
-  align-items: center !important;
-}
-
-.form-input.ant-input-affix-wrapper .ant-input {
-  width: 100% !important;
-  height: 100% !important;
-  padding: 0 !important;
-  border: none !important;
-  background: transparent !important;
-  flex: 1 !important;
-  min-width: 0 !important;
-  box-sizing: border-box !important;
-}
-
-.form-input:focus {
-  outline: none;
-  border-color: #ff2442;
-  box-shadow: none;
-  transform: none;
-}
-
-/* Antd Input focus 样式 */
-.form-input.ant-input:focus,
-.form-input.ant-input-affix-wrapper:focus,
-.form-input.ant-input-affix-wrapper-focused {
-  outline: none !important;
-  border-color: #ff2442 !important;
-  box-shadow: none !important;
-  transform: none !important;
-}
-
-.form-input::placeholder {
-  color: #9ca3af;
-}
-
-.input-icon {
-  position: absolute;
-  left: 16px;
-  top: 50%;
-  transform: translateY(-50%);
-  color: #9ca3af;
-  pointer-events: none;
-  transition: color 0.3s ease;
-  z-index: 2;
-}
-
-.form-input:focus + .input-icon {
-  color: #ff2442;
-}
-
-/* 邮箱验证码输入框容器 */
-.email-code-wrapper {
-  display: flex;
-  gap: 8px;
-  width: 100%;
-  box-sizing: border-box;
-  align-items: flex-start;
-}
-
-.email-code-input {
-  flex: 1;
-  min-width: 0;
-}
-
-.send-code-button {
-  height: 44px !important;
-  padding: 0 16px !important;
-  background: #ff2442 !important;
-  border-color: #ff2442 !important;
-  border-radius: 6px !important;
-  font-size: 14px !important;
-  font-weight: 500 !important;
-  white-space: nowrap !important;
-  flex-shrink: 0 !important;
-  min-width: 100px !important;
-  display: flex !important;
-  align-items: center !important;
-  justify-content: center !important;
-  transition: all 0.2s ease !important;
-  box-sizing: border-box !important;
-}
-
-.send-code-button:hover:not(:disabled) {
-  background: #d91e3a !important;
-  border-color: #d91e3a !important;
-  transform: none !important;
-  box-shadow: none !important;
-}
-
-.send-code-button:disabled {
-  background: #f5f5f5 !important;
-  border-color: #d9d9d9 !important;
-  color: #bfbfbf !important;
-  cursor: not-allowed !important;
-}
-
-.send-code-button.ant-btn-loading {
-  background: #ff2442 !important;
-  border-color: #ff2442 !important;
-  color: white !important;
-}
-
-/* 小红书风格忘记密码按钮 */
-.forgot-password-button {
-  width: 100%;
-  height: 48px; /* 固定高度，防止布局变化 */
-  padding: 12px;
-  background: #ff2442;
-  color: white;
-  border: none;
-  border-radius: 6px;
-  font-size: 14px;
-  font-weight: 500;
-  cursor: pointer;
-  transition: background-color 0.2s ease;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  gap: 8px;
-  margin-top: 8px;
-  position: relative; /* 为绝对定位的加载状态做准备 */
-  box-sizing: border-box; /* 确保padding包含在总尺寸内 */
-  min-width: 0; /* 防止flex子元素造成宽度变化 */
-}
-
-.forgot-password-button:hover:not(:disabled) {
-  background: #d91e3a;
-  transform: none;
-  box-shadow: none;
-}
-
-.forgot-password-button:active:not(:disabled) {
-  transform: none;
-}
-
-.forgot-password-button:disabled {
-  background: #ccc;
-  cursor: not-allowed;
-  opacity: 0.8;
-}
-
-.forgot-password-button.loading {
-  background: #ff7b8a;
-  cursor: not-allowed;
-}
-
-.loading-spinner {
-  width: 16px;
-  height: 16px;
-  border: 2px solid rgba(255, 255, 255, 0.3);
-  border-radius: 50%;
-  border-top-color: #fff;
-  animation: spin 1s ease-in-out infinite;
-}
-
-@keyframes spin {
-  to { transform: rotate(360deg); }
-}
-
-/* 加载遮罩层 */
-.loading-overlay {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  background: rgba(0, 0, 0, 0.5);
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  z-index: 1000;
-  backdrop-filter: blur(4px);
-}
-
-.loading-content {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  gap: 16px;
-  background: white;
-  padding: 32px;
-  border-radius: 12px;
-  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
-}
-
-.loading-spinner-large {
-  width: 40px;
-  height: 40px;
-  border: 4px solid rgba(255, 36, 66, 0.2);
-  border-radius: 50%;
-  border-top-color: #ff2442;
-  animation: spin 1s ease-in-out infinite;
-}
-
-.loading-text {
-  margin: 0;
-  color: #333;
-  font-size: 16px;
-  font-weight: 500;
-}
-
-/* 登录链接 */
-.login-link {
-  text-align: center;
-  margin-top: 20px;
-  padding-top: 20px;
-  border-top: 1px solid #e5e7eb;
-}
-
-.login-link p {
-  margin: 0 0 8px 0;
-  font-size: 14px;
-  color: #64748b;
-}
-
-.login-link p:last-child {
-  margin-bottom: 0;
-}
-
-.login-link a {
-  color: #ff2442;
-  text-decoration: none;
-  font-weight: 500;
-  transition: color 0.2s ease;
-}
-
-.login-link a:hover {
-  color: #d91e3a;
-  text-decoration: underline;
-}
-
-/* 返回邮箱输入样式 */
-.back-to-email {
-  display: flex;
-  flex-direction: column;
-  gap: 8px;
-  padding: 12px 16px;
-  background: #f8f8f8;
-  border-radius: 6px;
-  border: 1px solid #e1e1e1;
-}
-
-.back-button {
-  background: none;
-  border: none;
-  color: #ff2442;
-  font-size: 14px;
-  cursor: pointer;
-  display: flex;
-  align-items: center;
-  gap: 4px;
-  padding: 0;
-  transition: color 0.2s ease;
-  width: fit-content;
-}
-
-.back-button:hover {
-  color: #d91e3a;
-}
-
-.email-display {
-  font-size: 14px;
-  color: #666;
-  font-weight: 500;
-}
-
-/* 有左侧图标时的内边距调整 */
-.input-wrapper.has-icon .form-input {
-  padding-left: 48px !important;
-}
-
-.input-wrapper.has-icon .form-input.ant-input,
-.input-wrapper.has-icon .form-input.ant-input-affix-wrapper {
-  padding-left: 48px !important;
-}
-
-/* 有右侧切换按钮时的内边距调整 */
-.input-wrapper.has-toggle .form-input {
-  padding-right: 48px !important;
-}
-
-.input-wrapper.has-toggle .form-input.ant-input,
-.input-wrapper.has-toggle .form-input.ant-input-affix-wrapper {
-  padding-right: 48px !important;
-}
-
-/* 没有图标时的内边距调整 */
-.input-wrapper:not(.has-icon) .form-input {
-  padding-left: 16px !important;
-}
-
-.input-wrapper:not(.has-icon) .form-input.ant-input,
-.input-wrapper:not(.has-icon) .form-input.ant-input-affix-wrapper {
-  padding-left: 16px !important;
-}
-
-/* 没有切换按钮时的内边距调整 */
-.input-wrapper:not(.has-toggle) .form-input {
-  padding-right: 16px !important;
-}
-
-.input-wrapper:not(.has-toggle) .form-input.ant-input,
-.input-wrapper:not(.has-toggle) .form-input.ant-input-affix-wrapper {
-  padding-right: 16px !important;
-}
-
-/* 确保输入框内容完全填充 */
-.form-input.ant-input-affix-wrapper .ant-input-suffix {
-  position: absolute !important;
-  right: 12px !important;
-  top: 50% !important;
-  transform: translateY(-50%) !important;
-  margin: 0 !important;
-  padding: 0 !important;
-}
-
-.form-input.ant-input-affix-wrapper .ant-input-prefix {
-  position: absolute !important;
-  left: 16px !important;
-  top: 50% !important;
-  transform: translateY(-50%) !important;
-  margin: 0 !important;
-  padding: 0 !important;
-}
-
-/* 确保所有输入框完全填充其容器 */
-.form-group {
-  display: flex;
-  flex-direction: column;
-  gap: 8px;
-  width: 100%;
-  box-sizing: border-box;
-}
-
-.form-group .input-wrapper {
-  width: 100%;
-  box-sizing: border-box;
-}
-
-/* 防止输入框溢出容器 */
-.form-input,
-.form-input.ant-input,
-.form-input.ant-input-affix-wrapper {
-  max-width: 100% !important;
-  overflow: hidden !important;
-}
-
-/* 确保内部输入元素不会超出边界 */
-.form-input.ant-input-affix-wrapper .ant-input {
-  max-width: 100% !important;
-  overflow: hidden !important;
-  text-overflow: ellipsis !important;
-}
-
-/* 精细间距控制 */
-.forgot-password-header + .forgot-password-form {
-  margin-top: -4px;
-}
-
-.forgot-password-form .form-group:not(:last-child) {
-  margin-bottom: 2px;
-}
-
-.forgot-password-form .form-group:last-of-type {
-  margin-bottom: 6px;
-}
-
-.forgot-password-button + .login-link {
-  margin-top: 14px;
-}
-
-/* 响应式设计 */
-@media (max-width: 768px) {
-  /* 重置body和html确保一致性 */
-  html, body {
-    height: 100%;
-    height: 100dvh;
-    margin: 0;
-    padding: 0;
-    overflow-x: hidden;
-    box-sizing: border-box;
-  }
-  
-  .forgot-password-container {
-    padding: 16px;
-    align-items: center;
-    justify-content: center;
-    min-height: 100vh;
-    min-height: 100dvh; /* 动态视口高度 */
-    /* 强制重置可能影响定位的样式 */
-    margin: 0;
-    box-sizing: border-box;
-    /* 防止内容溢出影响布局 */
-    overflow-x: hidden;
-    overflow-y: auto;
-    /* 确保flexbox在所有移动设备上表现一致 */
-    -webkit-box-align: center;
-    -webkit-box-pack: center;
-    display: flex !important;
-    position: relative;
-  }
-  
-  .forgot-password-content {
-    max-width: 100%;
-    padding: 20px;
-    /* 确保内容区域稳定 */
-    margin: 0 auto;
-    box-sizing: border-box;
-    /* 防止宽度计算问题 */
-    width: calc(100% - 40px);
-    max-width: 480px; /* 增加最大宽度 */
-    position: relative;
-    display: flex;
-    justify-content: center;
-  }
-  
-  .forgot-password-card {
-    padding: 32px 28px; /* 增加内边距 */
-    border-radius: 16px;
-    /* 确保卡片稳定定位 */
-    margin: 0;
-    box-sizing: border-box;
-    width: 100%;
-    max-width: 450px; /* 增加卡片最大宽度 */
-    /* 防止backdrop-filter导致的渲染差异 */
-    will-change: auto;
-    position: relative;
-    /* 防止触摸操作影响布局 */
-    -webkit-touch-callout: none;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    -webkit-tap-highlight-color: transparent;
-  }
-  
-  .forgot-password-title {
-    font-size: 24px;
-  }
-  
-  .form-input {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px;
-    font-size: 16px; /* 防止iOS Safari缩放 */
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input,
-  .form-input.ant-input-affix-wrapper {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px !important;
-    font-size: 16px !important;
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input-affix-wrapper .ant-input {
-    width: 100% !important;
-    height: 100% !important;
-    padding: 0 !important;
-    border: none !important;
-    background: transparent !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-    box-sizing: border-box !important;
-  }
-}
-
-@media (max-width: 480px) {
-  .forgot-password-container {
-    padding: 16px;
-    align-items: center;
-    justify-content: center;
-    min-height: 100vh;
-    min-height: 100dvh; /* 动态视口高度 */
-    /* 强制重置样式 */
-    margin: 0;
-    box-sizing: border-box;
-    position: relative;
-    /* 确保垂直居中 */
-    display: flex !important;
-  }
-  
-  .forgot-password-content {
-    /* 更严格的尺寸控制 */
-    width: calc(100vw - 32px);
-    max-width: 420px; /* 增加最大宽度 */
-    padding: 16px;
-    margin: 0 auto;
-    box-sizing: border-box;
-    display: flex;
-    justify-content: center;
-  }
-  
-  .forgot-password-card {
-    padding: 28px 24px; /* 增加内边距 */
-    border-radius: 12px;
-    /* 确保卡片完全稳定 */
-    margin: 0;
-    box-sizing: border-box;
-    width: 100%;
-    position: relative;
-    /* 防止变换导致的位置偏移 */
-    transform: none !important;
-    /* 防止触摸操作影响布局 */
-    -webkit-touch-callout: none;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    /* 防止点击时的高亮效果影响布局 */
-    -webkit-tap-highlight-color: transparent;
-  }
-  
-  .forgot-password-title {
-    font-size: 22px;
-  }
-  
-  .form-input {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px;
-    font-size: 16px; /* 防止iOS Safari缩放 */
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input,
-  .form-input.ant-input-affix-wrapper {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px !important;
-    font-size: 16px !important;
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input-affix-wrapper .ant-input {
-    width: 100% !important;
-    height: 100% !important;
-    padding: 0 !important;
-    border: none !important;
-    background: transparent !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-    box-sizing: border-box !important;
-  }
-  
-  /* 移动端优化 */
-  .background-pattern {
-    display: none;
-  }
-  
-  /* 禁用可能影响位置的悬停效果 */
-  .forgot-password-card:hover {
-    transform: none !important;
-  }
-}
-
-/* 高对比度模式支持 */
-@media (prefers-contrast: high) {
-  .forgot-password-card {
-    background: white;
-    border: 2px solid #000;
-  }
-  
-  .form-input {
-    border-color: #000;
-  }
-  
-  .form-input:focus {
-    border-color: #0066cc;
-    box-shadow: 0 0 0 2px #0066cc;
-  }
-}
-
-/* 减少动画模式 */
-@media (prefers-reduced-motion: reduce) {
-  .background-pattern {
-    animation: none;
-  }
-  
-  .forgot-password-card,
-  .form-input,
-  .forgot-password-button {
-    transition: none;
-  }
-}
-
-/* 深色模式支持 */
-@media (prefers-color-scheme: dark) {
-  .forgot-password-background {
-    background: linear-gradient(135deg, #1a202c 0%, #2d3748 100%);
-  }
-  
-  .forgot-password-card {
-    background: rgba(26, 32, 44, 0.95);
-    border-color: rgba(255, 255, 255, 0.1);
-  }
-  
-  .forgot-password-title {
-    color: #f7fafc;
-  }
-  
-  .forgot-password-subtitle {
-    color: #a0aec0;
-  }
-  
-  .form-label {
-    color: #e2e8f0;
-  }
-  
-  .form-input {
-    background: #2d3748;
-    border-color: #4a5568;
-    color: #f7fafc;
-  }
-  
-  .form-input:focus {
-    border-color: #ff2442;
-  }
-  
-  .login-link {
-    border-color: #4a5568;
-  }
-  
-  .login-link p {
-    color: #a0aec0;
-  }
-  
-  /* 深色模式下的错误提示样式 */
-  .error-message {
-    background: rgba(26, 32, 44, 0.95);
-    color: #ff6b6b;
-  }
-  
-  .back-to-email {
-    background: #2d3748;
-    border-color: #4a5568;
-  }
-  
-  .email-display {
-    color: #a0aec0;
-  }
-}
-
-/* 错误提示样式 - 使用绝对定位避免影响布局 */
-.error-message {
-  position: absolute;
-  top: 95%;
-  left: 4px;
-  right: 4px;
-  font-size: 12px;
-  color: #ff4d4f;
-  margin-top: 4px;
-  display: flex;
-  align-items: center;
-  min-height: 16px;
-  animation: fadeInDown 0.3s ease-out;
-  font-weight: 400;
-  line-height: 1.2;
-  background: rgba(255, 255, 255, 0.95);
-  backdrop-filter: blur(4px);
-  padding: 2px 4px;
-  border-radius: 4px;
-  z-index: 10;
-  pointer-events: none; /* 避免干扰用户交互 */
-}
-
-@keyframes fadeInDown {
-  from {
-    opacity: 0;
-    transform: translateY(-8px);
-  }
-  to {
-    opacity: 1;
-    transform: translateY(0);
-  }
-}
-
-/* 输入框错误状态样式 */
-.form-input.input-error,
-.form-input.input-error.ant-input,
-.form-input.input-error.ant-input-affix-wrapper {
-  border-color: #ff4d4f !important;
-  box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.1) !important;
-  transition: all 0.3s ease !important;
-}
-
-.form-input.input-error:focus,
-.form-input.input-error.ant-input:focus,
-.form-input.input-error.ant-input-affix-wrapper:focus,
-.form-input.input-error.ant-input-affix-wrapper-focused {
-  border-color: #ff4d4f !important;
-  box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important;
-}
-
-/* 错误状态下的图标颜色 */
-.form-input.input-error .anticon {
-  color: #ff4d4f !important;
-}
-
-/* 确保表单组间距一致 */
-.form-group {
-  margin-bottom: 0px;
-}
-
-.form-group:last-of-type {
-  margin-bottom: 0px;
-}
-
-/* 错误弹窗样式 */
-.error-modal .ant-modal-header {
-  background: #fff;
-  border-bottom: 1px solid #f0f0f0;
-  padding: 16px 24px;
-}
-
-.error-modal .ant-modal-title {
-  color: #333;
-  font-weight: 600;
-  font-size: 16px;
-}
-
-.error-modal .ant-modal-body {
-  padding: 16px 24px 24px;
-}
-
-.error-modal .ant-modal-footer {
-  padding: 12px 24px 24px;
-  border-top: none;
-  text-align: center;
-}
-
-.error-modal .ant-btn-primary {
-  background: #ff2442;
-  border-color: #ff2442;
-  font-weight: 500;
-  height: 40px;
-  padding: 0 24px;
-  border-radius: 6px;
-  transition: all 0.2s ease;
-}
-
-.error-modal .ant-btn-primary:hover {
-  background: #d91e3a;
-  border-color: #d91e3a;
-  transform: translateY(-1px);
-  box-shadow: 0 4px 12px rgba(255, 36, 66, 0.3);
-}
-
-.error-modal .ant-modal-content {
-  border-radius: 12px;
-  overflow: hidden;
-  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
-}
-
-/* 错误弹窗遮罩层 */
-.error-modal .ant-modal-mask {
-  background: rgba(0, 0, 0, 0.6);
-  backdrop-filter: blur(4px);
-}
-
-/* 错误弹窗动画 */
-.error-modal .ant-modal {
-  animation: errorModalSlideIn 0.3s ease-out;
-}
-
-@keyframes errorModalSlideIn {
-  from {
-    opacity: 0;
-    transform: translateY(-20px) scale(0.95);
-  }
-  to {
-    opacity: 1;
-    transform: translateY(0) scale(1);
-  }
-}
diff --git a/rhj/frontend/src/pages/ForgotPasswordPage/ForgotPasswordPage.js b/rhj/frontend/src/pages/ForgotPasswordPage/ForgotPasswordPage.js
deleted file mode 100644
index d0437d5..0000000
--- a/rhj/frontend/src/pages/ForgotPasswordPage/ForgotPasswordPage.js
+++ /dev/null
@@ -1,567 +0,0 @@
-import React, { useState } from 'react';
-import { Link, useNavigate } from 'react-router-dom';
-import { Input, Button, message, Modal, Alert } from 'antd';
-import { MailOutlined, LockOutlined, SafetyOutlined, ExclamationCircleOutlined, CheckCircleOutlined } from '@ant-design/icons';
-import { hashPassword } from '../../utils/crypto';
-import './ForgotPasswordPage.css';
-
-const baseURL = 'http://10.126.59.25:8082';
-
-const ForgotPasswordPage = () => {
-  const [formData, setFormData] = useState({
-    email: '',
-    emailCode: '',
-    newPassword: '',
-    confirmPassword: ''
-  });
-
-  const [errors, setErrors] = useState({
-    email: '',
-    emailCode: '',
-    newPassword: '',
-    confirmPassword: ''
-  });
-
-  const [emailCodeSent, setEmailCodeSent] = useState(false);
-  const [countdown, setCountdown] = useState(0);
-  const [sendingCode, setSendingCode] = useState(false);
-  const [isLoading, setIsLoading] = useState(false);
-  const [errorModal, setErrorModal] = useState({
-    visible: false,
-    title: '',
-    content: ''
-  });
-  const [successAlert, setSuccessAlert] = useState({
-    visible: false,
-    message: ''
-  });
-  const [emailCodeSuccessAlert, setEmailCodeSuccessAlert] = useState({
-    visible: false,
-    message: ''
-  });
-
-  const navigate = useNavigate();
-
-  // 显示错误弹窗
-  const showErrorModal = (title, content) => {
-    setErrorModal({
-      visible: true,
-      title: title,
-      content: content
-    });
-  };
-
-  // 关闭错误弹窗
-  const closeErrorModal = () => {
-    setErrorModal({
-      visible: false,
-      title: '',
-      content: ''
-    });
-  };
-
-  // 显示成功提示
-  const showSuccessAlert = (message) => {
-    setSuccessAlert({
-      visible: true,
-      message: message
-    });
-    
-    // 3秒后自动隐藏
-    setTimeout(() => {
-      setSuccessAlert({
-        visible: false,
-        message: ''
-      });
-    }, 3000);
-  };
-
-  // 显示邮件验证码发送成功提示
-  const showEmailCodeSuccessAlert = (message) => {
-    setEmailCodeSuccessAlert({
-      visible: true,
-      message: message
-    });
-    
-    // 5秒后自动隐藏
-    setTimeout(() => {
-      setEmailCodeSuccessAlert({
-        visible: false,
-        message: ''
-      });
-    }, 5000);
-  };
-
-  // 倒计时效果
-  React.useEffect(() => {
-    let timer;
-    if (countdown > 0) {
-      timer = setTimeout(() => {
-        setCountdown(countdown - 1);
-      }, 1000);
-    }
-    return () => clearTimeout(timer);
-  }, [countdown]);
-
-  // 发送邮箱验证码
-  const sendEmailCode = async () => {
-    // 验证邮箱格式
-    if (!formData.email || typeof formData.email !== 'string' || !formData.email.trim()) {
-      setErrors(prev => ({
-        ...prev,
-        email: '请先输入邮箱地址'
-      }));
-      return;
-    }
-    
-    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email)) {
-      setErrors(prev => ({
-        ...prev,
-        email: '请输入有效的邮箱地址'
-      }));
-      return;
-    }
-
-    setSendingCode(true);
-    
-    try {
-      // 调用后端API发送验证码
-      const response = await fetch(baseURL + '/send-verification-code', {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/json',
-        },
-        body: JSON.stringify({
-          email: formData.email,
-          type: 'reset_password'
-        })
-      });
-      
-      if (!response.ok) {
-        throw new Error(`HTTP ${response.status}: ${response.statusText}`);
-      }
-      
-      const result = await response.json();
-      
-      if (result.success) {
-        showEmailCodeSuccessAlert('验证码已发送到您的邮箱');
-        setEmailCodeSent(true);
-        setCountdown(60); // 60秒倒计时
-        
-        // 清除邮箱错误提示
-        setErrors(prev => ({
-          ...prev,
-          email: ''
-        }));
-      } else {
-        // 根据具体错误信息进行处理
-        const errorMessage = result.message || '发送验证码失败，请稍后再试';
-        
-        if (errorMessage.includes('用户不存在') || errorMessage.includes('邮箱未注册')) {
-          setErrors(prev => ({
-            ...prev,
-            email: '该邮箱尚未注册，请检查邮箱地址或先注册账户'
-          }));
-        } else {
-          showErrorModal('发送验证码失败', errorMessage);
-        }
-      }
-      
-    } catch (error) {
-      console.error('发送验证码失败:', error);
-      
-      // 根据错误类型显示不同的错误信息
-      if (error.name === 'TypeError' && error.message.includes('Failed to fetch')) {
-        showErrorModal('网络连接失败', '无法连接到服务器，请检查您的网络连接后重试。');
-      } else if (error.message.includes('HTTP 500')) {
-        showErrorModal('服务器错误', '服务器出现了内部错误，请稍后重试。');
-      } else if (error.message.includes('HTTP 429')) {
-        showErrorModal('发送频率限制', '验证码发送过于频繁，请稍后再试。');
-      } else if (error.message.includes('HTTP 400')) {
-        showErrorModal('请求错误', '邮箱格式错误，请检查邮箱地址是否正确。');
-      } else {
-        showErrorModal('发送失败', '发送验证码失败，请稍后重试。');
-      }
-    } finally {
-      setSendingCode(false);
-    }
-  };
-
-  const handleInputChange = (field) => (e) => {
-    const value = e.target.value;
-    setFormData(prev => ({
-      ...prev,
-      [field]: value
-    }));
-    
-    // 清除对应字段的错误提示
-    if (errors[field]) {
-      setErrors(prev => ({
-        ...prev,
-        [field]: ''
-      }));
-    }
-  };
-
-  const handlePasswordChange = (e) => {
-    const value = e.target.value;
-    setFormData(prev => ({
-      ...prev,
-      newPassword: value
-    }));
-    
-    // 清除密码错误提示
-    if (errors.newPassword) {
-      setErrors(prev => ({
-        ...prev,
-        newPassword: ''
-      }));
-    }
-  };
-
-  const handleConfirmPasswordChange = (e) => {
-    const value = e.target.value;
-    setFormData(prev => ({
-      ...prev,
-      confirmPassword: value
-    }));
-    
-    // 清除确认密码错误提示
-    if (errors.confirmPassword) {
-      setErrors(prev => ({
-        ...prev,
-        confirmPassword: ''
-      }));
-    }
-  };
-
-  const validateForm = () => {
-    const newErrors = {
-      email: '',
-      emailCode: '',
-      newPassword: '',
-      confirmPassword: ''
-    };
-    
-    let hasError = false;
-    
-    // 验证邮箱
-    if (!formData.email || typeof formData.email !== 'string' || !formData.email.trim()) {
-      newErrors.email = '请输入邮箱地址';
-      hasError = true;
-    } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email)) {
-      newErrors.email = '请输入有效的邮箱地址';
-      hasError = true;
-    }
-    
-    // 验证邮箱验证码
-    if (!formData.emailCode || typeof formData.emailCode !== 'string' || !formData.emailCode.trim()) {
-      newErrors.emailCode = '请输入邮箱验证码';
-      hasError = true;
-    } else if (formData.emailCode.length !== 6 || !/^\d{6}$/.test(formData.emailCode)) {
-      newErrors.emailCode = '请输入6位数字验证码';
-      hasError = true;
-    }
-    
-    // 验证新密码
-    if (!formData.newPassword || typeof formData.newPassword !== 'string' || !formData.newPassword.trim()) {
-      newErrors.newPassword = '请输入新密码';
-      hasError = true;
-    } else if (formData.newPassword.length < 6) {
-      newErrors.newPassword = '密码长度至少6位';
-      hasError = true;
-    } else if (formData.newPassword.length > 20) {
-      newErrors.newPassword = '密码长度不能超过20位';
-      hasError = true;
-    }
-    
-    // 验证确认密码
-    if (!formData.confirmPassword || typeof formData.confirmPassword !== 'string' || !formData.confirmPassword.trim()) {
-      newErrors.confirmPassword = '请确认新密码';
-      hasError = true;
-    } else if (formData.newPassword !== formData.confirmPassword) {
-      newErrors.confirmPassword = '两次输入的密码不一致';
-      hasError = true;
-    }
-    
-    setErrors(newErrors);
-    return !hasError;
-  };
-
-  const handleSubmit = async (e) => {
-    e.preventDefault();
-    
-    // 验证表单
-    if (!validateForm()) {
-      return;
-    }
-    
-    setIsLoading(true);
-    
-    try {
-      // 验证码验证成功，重置密码
-      const resetResponse = await fetch(baseURL + '/reset-password', {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/json',
-        },
-        body: JSON.stringify({
-          email: formData.email,
-          new_password: hashPassword(formData.newPassword), // 前端加密密码
-          verification_code: hashPassword(formData.emailCode) // 前端加密验证码
-        })
-      });
-      
-      if (!resetResponse.ok) {
-        throw new Error(`HTTP ${resetResponse.status}: ${resetResponse.statusText}`);
-      }
-      
-      const resetResult = await resetResponse.json();
-      
-      if (resetResult.success) {
-        showSuccessAlert('密码重置成功！请使用新密码登录，正在跳转到登录页面...');
-        // 清空表单数据
-        setFormData({
-          email: '',
-          emailCode: '',
-          newPassword: '',
-          confirmPassword: ''
-        });
-        setErrors({
-          email: '',
-          emailCode: '',
-          newPassword: '',
-          confirmPassword: ''
-        });
-        // 延迟跳转到登录页面，让用户看到成功提示
-        setTimeout(() => {
-          navigate('/login');
-        }, 2000);
-      } else {
-        // 处理重置密码失败的情况
-        const errorMessage = resetResult.message || '密码重置失败，请稍后再试';
-        showErrorModal('密码重置失败', errorMessage);
-      }
-      
-    } catch (error) {
-      console.error('密码重置失败:', error);
-      
-      // 根据错误类型显示不同的错误信息
-      if (error.name === 'TypeError' && error.message.includes('Failed to fetch')) {
-        showErrorModal('网络连接失败', '无法连接到服务器，请检查您的网络连接后重试。');
-      } else if (error.message.includes('HTTP 500')) {
-        showErrorModal('服务器内部错误', '服务器出现了内部错误，请稍后重试。');
-      } else if (error.message.includes('HTTP 400')) {
-        showErrorModal('请求参数错误', '请求参数有误，请检查您输入的信息是否正确。');
-      } else if (error.message.includes('HTTP 409')) {
-        showErrorModal('操作冲突', '重置操作发生冲突，请稍后重试。');
-      } else {
-        showErrorModal('重置失败', '密码重置失败，请稍后重试。');
-      }
-    } finally {
-      setIsLoading(false);
-    }
-  };
-
-  return (
-    <div className="register-container">
-      <div className="register-background"></div>
-      
-      {isLoading && (
-        <div className="loading-overlay">
-          <div className="loading-content">
-            <div className="loading-spinner-large"></div>
-            <p className="loading-text">正在重置密码...</p>
-          </div>
-        </div>
-      )}
-      
-      <div className="register-content">
-        <div className="register-card">
-          {/* 成功提示 */}
-          {successAlert.visible && (
-            <div style={{ marginBottom: '16px' }}>
-              <Alert
-                message={successAlert.message}
-                type="success"
-                icon={<CheckCircleOutlined />}
-                showIcon
-                closable
-                onClose={() => setSuccessAlert({ visible: false, message: '' })}
-                style={{
-                  borderRadius: '8px',
-                  border: '1px solid #b7eb8f',
-                  backgroundColor: '#f6ffed'
-                }}
-              />
-            </div>
-          )}
-
-          {/* 邮件验证码发送成功提示 */}
-          {emailCodeSuccessAlert.visible && (
-            <div style={{ marginBottom: '16px' }}>
-              <Alert
-                message={emailCodeSuccessAlert.message}
-                type="success"
-                icon={<CheckCircleOutlined />}
-                showIcon
-                closable
-                onClose={() => setEmailCodeSuccessAlert({ visible: false, message: '' })}
-                style={{
-                  borderRadius: '8px',
-                  border: '1px solid #b7eb8f',
-                  backgroundColor: '#f6ffed'
-                }}
-              />
-            </div>
-          )}
-          
-          <div className="register-header">
-            <h1 className="register-title">重置密码</h1>
-            <p className="register-subtitle">请输入邮箱地址和新密码</p>
-          </div>
-
-          <form className="register-form" onSubmit={handleSubmit}>
-            <div className="form-group">
-              <Input
-                type="email"
-                id="email"
-                name="email"
-                className={`form-input ${errors.email ? 'input-error' : ''}`}
-                placeholder="请输入邮箱地址"
-                value={formData.email}
-                onChange={handleInputChange('email')}
-                prefix={<MailOutlined />}
-                size="large"
-                title=""
-                status={errors.email ? 'error' : ''}
-              />
-              {errors.email && (
-                <div className="error-message">
-                  {errors.email}
-                </div>
-              )}
-            </div>
-
-            <div className="form-group">
-              <div className="email-code-wrapper">
-                <Input
-                  type="text"
-                  id="emailCode"
-                  name="emailCode"
-                  className={`form-input email-code-input ${errors.emailCode ? 'input-error' : ''}`}
-                  placeholder="请输入6位验证码"
-                  value={formData.emailCode}
-                  onChange={handleInputChange('emailCode')}
-                  prefix={<SafetyOutlined />}
-                  maxLength={6}
-                  size="large"
-                  title=""
-                  status={errors.emailCode ? 'error' : ''}
-                />
-                <Button
-                  type="primary"
-                  className="send-code-button"
-                  onClick={sendEmailCode}
-                  loading={sendingCode}
-                  disabled={countdown > 0 || !formData.email || sendingCode}
-                  size="large"
-                >
-                  {countdown > 0 ? `${countdown}s后重发` : (emailCodeSent ? '重新发送' : '发送验证码')}
-                </Button>
-              </div>
-              {errors.emailCode && (
-                <div className="error-message">
-                  {errors.emailCode}
-                </div>
-              )}
-            </div>
-
-            <div className="form-group">
-              <Input.Password
-                id="newPassword"
-                name="newPassword"
-                className={`form-input ${errors.newPassword ? 'input-error' : ''}`}
-                placeholder="请输入新密码"
-                value={formData.newPassword}
-                onChange={handlePasswordChange}
-                prefix={<LockOutlined />}
-                size="large"
-                title=""
-                status={errors.newPassword ? 'error' : ''}
-              />
-              {errors.newPassword && (
-                <div className="error-message">
-                  {errors.newPassword}
-                </div>
-              )}
-            </div>
-
-            <div className="form-group">
-              <Input.Password
-                id="confirmPassword"
-                name="confirmPassword"
-                className={`form-input ${errors.confirmPassword ? 'input-error' : ''}`}
-                placeholder="请确认新密码"
-                value={formData.confirmPassword}
-                onChange={handleConfirmPasswordChange}
-                prefix={<LockOutlined />}
-                size="large"
-                title=""
-                status={errors.confirmPassword ? 'error' : ''}
-              />
-              {errors.confirmPassword && (
-                <div className="error-message">
-                  {errors.confirmPassword}
-                </div>
-              )}
-            </div>
-
-            <button
-              type="submit"
-              className={`register-button ${isLoading ? 'loading' : ''}`}
-              disabled={isLoading}
-            >
-              {isLoading ? (
-                <>
-                  <div className="loading-spinner"></div>
-                  重置中...
-                </>
-              ) : (
-                '重置密码'
-              )}
-            </button>
-          </form>
-
-          <div className="login-link">
-            <p>想起密码了？ <Link to="/login">立即登录</Link></p>
-            <p>还没有账户？ <Link to="/register">立即注册</Link></p>
-          </div>
-        </div>
-      </div>
-
-      {/* 错误弹窗 */}
-      <Modal
-        title={
-          <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
-            <ExclamationCircleOutlined style={{ color: '#ff4d4f', fontSize: '18px' }} />
-            {errorModal.title}
-          </div>
-        }
-        open={errorModal.visible}
-        onOk={closeErrorModal}
-        onCancel={closeErrorModal}
-        okText="我知道了"
-        cancelButtonProps={{ style: { display: 'none' } }}
-        centered
-        className="error-modal"
-      >
-        <div style={{ padding: '16px 0', fontSize: '14px', lineHeight: '1.6' }}>
-          {errorModal.content}
-        </div>
-      </Modal>
-    </div>
-  );
-};
-
-export default ForgotPasswordPage;
diff --git a/rhj/frontend/src/pages/LoginPage/LoginPage.css b/rhj/frontend/src/pages/LoginPage/LoginPage.css
deleted file mode 100644
index ab1e24c..0000000
--- a/rhj/frontend/src/pages/LoginPage/LoginPage.css
+++ /dev/null
@@ -1,1288 +0,0 @@
-/* 登录页面容器 */
-.login-container {
-  min-height: 100vh;
-  min-height: 100dvh; /* 动态视口高度，避免移动端地址栏影响 */
-  height: 100vh;
-  height: 100dvh;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  position: relative;
-  overflow: hidden;
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
-    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
-    sans-serif;
-  /* 确保容器稳定定位 */
-  box-sizing: border-box;
-  margin: 0;
-  padding: 0;
-  /* 重置文本对齐 */
-  text-align: initial;
-}
-
-/* 小红书风格背景 */
-.login-background {
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  background: #f8f8f8;
-  z-index: -1;
-}
-
-/* 登录内容区域 */
-.login-content {
-  width: 100%;
-  max-width: 500px; /* 增加桌面端最大宽度 */
-  padding: 0;
-  z-index: 1;
-  /* 确保内容稳定定位 */
-  box-sizing: border-box;
-  position: relative;
-  display: flex;
-  justify-content: center;
-}
-
-/* 小红书风格登录卡片 */
-.login-card {
-  background: #fff;
-  border-radius: 8px;
-  padding: 40px; /* 增加桌面端内边距 */
-  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
-  border: 1px solid #e1e1e1;
-  width: 100%;
-  max-width: 450px; /* 增加桌面端卡片最大宽度 */
-  transition: none;
-}
-
-/* 登录头部 */
-.login-header {
-  text-align: center;
-  margin-bottom: 40px;
-}
-
-/* Logo样式 */
-.logo-section {
-  margin-bottom: 24px;
-}
-
-.logo-icon {
-  width: 60px;
-  height: 60px;
-  background: #ff2442;
-  border-radius: 12px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  font-size: 28px;
-  margin: 0 auto 16px;
-  box-shadow: 0 4px 12px rgba(255, 36, 66, 0.2);
-}
-
-.login-title {
-  font-size: 24px;
-  font-weight: 600;
-  color: #333;
-  margin: 0 0 12px 0;
-  text-align: center;
-}
-
-.login-title::after {
-  display: none;
-}
-
-.login-subtitle {
-  font-size: 14px;
-  color: #999;
-  margin: 0 0 32px 0;
-  font-weight: 400;
-  text-align: center;
-}
-
-/* 表单样式 */
-.login-form {
-  display: flex;
-  flex-direction: column;
-  gap: 24px;
-  width: 100%;
-}
-
-.form-group {
-  display: flex;
-  flex-direction: column;
-  gap: 6px;
-  width: 100%;
-  box-sizing: border-box;
-  margin-bottom: 2px;
-  position: relative; /* 为绝对定位的错误提示提供参考点 */
-}
-
-.form-group .input-wrapper {
-  width: 100%;
-  box-sizing: border-box;
-}
-
-.form-label {
-  font-size: 14px;
-  font-weight: 500;
-  color: #333;
-  margin-bottom: 8px;
-}
-
-.input-wrapper {
-  position: relative;
-  display: flex;
-  align-items: center;
-  width: 100%;
-  box-sizing: border-box;
-}
-
-.form-input {
-  width: 100% !important;
-  height: 44px;
-  padding: 12px 16px 12px 48px;
-  border: 1px solid #e1e1e1;
-  border-radius: 6px;
-  font-size: 14px;
-  transition: border-color 0.2s ease;
-  background: #fff;
-  color: #333;
-  box-sizing: border-box !important;
-  flex: 1;
-  min-width: 0;
-}
-
-/* 针对 Antd Input 组件的特定样式 */
-.form-input.ant-input,
-.form-input.ant-input-affix-wrapper {
-  width: 100% !important;
-  height: 44px !important;
-  border: 1px solid #e1e1e1 !important;
-  border-radius: 6px !important;
-  padding: 12px 48px 12px 48px !important;
-  font-size: 14px !important;
-  background: #fff !important;
-  color: #333 !important;
-  box-sizing: border-box !important;
-  flex: 1 !important;
-  min-width: 0 !important;
-  display: flex !important;
-  align-items: center !important;
-}
-
-.form-input.ant-input-affix-wrapper .ant-input {
-  width: 100% !important;
-  height: 100% !important;
-  padding: 0 !important;
-  border: none !important;
-  background: transparent !important;
-  flex: 1 !important;
-  min-width: 0 !important;
-  box-sizing: border-box !important;
-}
-
-.form-input:focus {
-  outline: none;
-  border-color: #ff2442;
-  box-shadow: none;
-  transform: none;
-}
-
-/* Antd Input focus 样式 */
-.form-input.ant-input:focus,
-.form-input.ant-input-affix-wrapper:focus,
-.form-input.ant-input-affix-wrapper-focused {
-  outline: none !important;
-  border-color: #ff2442 !important;
-  box-shadow: none !important;
-  transform: none !important;
-}
-
-.form-input::placeholder {
-  color: #9ca3af;
-}
-
-.input-icon {
-  position: absolute;
-  left: 16px;
-  top: 50%;
-  transform: translateY(-50%);
-  color: #9ca3af;
-  pointer-events: none;
-  transition: color 0.3s ease;
-  z-index: 2;
-}
-
-.form-input:focus + .input-icon {
-  color: #ff2442;
-}
-
-.password-toggle {
-  position: absolute;
-  right: 12px;
-  top: 50%;
-  transform: translateY(-50%);
-  background: none;
-  border: none;
-  color: #9ca3af;
-  cursor: pointer;
-  padding: 4px;
-  border-radius: 4px;
-  transition: all 0.3s ease;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  z-index: 2;
-  width: 24px;
-  height: 24px;
-}
-
-.password-toggle:hover {
-  color: #ff2442;
-  background-color: rgba(255, 36, 66, 0.1);
-}
-
-/* 表单选项 */
-.form-options {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-top: 8px;
-  margin-bottom: 16px;
-  width: 100%;
-  flex-wrap: nowrap; /* 确保不换行 */
-  min-height: 24px;
-  gap: 8px; /* 添加基础间距 */
-}
-
-/* Ant Design Checkbox 样式兼容 */
-.form-options .ant-checkbox-wrapper {
-  flex: 0 0 auto; /* 不伸缩，保持原始大小 */
-  font-size: 14px;
-  color: #64748b;
-  white-space: nowrap; /* 防止文字换行 */
-  overflow: hidden;
-  text-overflow: ellipsis;
-  max-width: 50%; /* 限制最大宽度 */
-}
-
-.form-options .ant-checkbox-wrapper .ant-checkbox {
-  margin-right: 8px;
-}
-
-.form-options .forgot-password {
-  flex: 0 0 auto; /* 不伸缩，保持原始大小 */
-  margin-left: auto;
-  white-space: nowrap;
-  color: #ff2442;
-  text-decoration: none;
-  font-size: 14px;
-  transition: color 0.3s ease;
-  max-width: 45%; /* 限制最大宽度 */
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
-.form-options .forgot-password:hover {
-  color: #ff1a3a;
-  text-decoration: underline;
-}
-
-.checkbox-wrapper {
-  display: flex;
-  align-items: center;
-  gap: 8px;
-  cursor: pointer;
-  font-size: 14px;
-  color: #64748b;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-  flex-shrink: 0;
-}
-
-.checkbox {
-  position: relative;
-  width: 18px;
-  height: 18px;
-  margin: 0;
-  cursor: pointer;
-  opacity: 0;
-}
-
-.checkmark {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 18px;
-  height: 18px;
-  background-color: #fff;
-  border: 1px solid #e1e1e1;
-  border-radius: 3px;
-  transition: all 0.2s ease;
-}
-
-.checkbox:checked + .checkmark {
-  background-color: #ff2442;
-  border-color: #ff2442;
-}
-
-.checkmark:after {
-  content: "";
-  position: absolute;
-  display: none;
-  left: 5px;
-  top: 2px;
-  width: 4px;
-  height: 8px;
-  border: solid white;
-  border-width: 0 2px 2px 0;
-  transform: rotate(45deg);
-}
-
-.checkbox:checked + .checkmark:after {
-  display: block;
-}
-
-.forgot-password {
-  font-size: 14px;
-  color: #ff2442;
-  text-decoration: none;
-  font-weight: 400;
-  transition: color 0.2s ease;
-  margin-left: auto;
-  flex-shrink: 0;
-  white-space: nowrap;
-}
-
-.forgot-password:hover {
-  color: #d91e3a;
-  text-decoration: underline;
-}
-
-/* 小红书风格登录按钮 */
-.login-button {
-  width: 100%;
-  height: 48px; /* 固定高度，防止布局变化 */
-  padding: 12px;
-  background: #ff2442;
-  color: white;
-  border: none;
-  border-radius: 6px;
-  font-size: 14px;
-  font-weight: 500;
-  cursor: pointer;
-  transition: background-color 0.2s ease;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  gap: 8px;
-  margin-top: 8px;
-  box-sizing: border-box; /* 确保padding包含在总尺寸内 */
-  min-width: 0; /* 防止flex子元素造成宽度变化 */
-}
-
-.login-button:hover:not(:disabled) {
-  background: #d91e3a;
-  transform: none;
-  box-shadow: none;
-}
-
-.login-button:active:not(:disabled) {
-  transform: none;
-}
-
-.login-button:disabled {
-  background: #ccc;
-  cursor: not-allowed;
-  opacity: 0.8;
-}
-
-.login-button.loading {
-  background: #ff7b8a;
-  cursor: not-allowed;
-}
-
-.loading-spinner {
-  width: 16px;
-  height: 16px;
-  border: 2px solid rgba(255, 255, 255, 0.3);
-  border-radius: 50%;
-  border-top-color: #fff;
-  animation: spin 1s ease-in-out infinite;
-}
-
-@keyframes spin {
-  to { transform: rotate(360deg); }
-}
-
-/* 加载遮罩层 */
-.loading-overlay {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  background: rgba(0, 0, 0, 0.5);
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  z-index: 1000;
-  backdrop-filter: blur(4px);
-}
-
-.loading-content {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  gap: 16px;
-  background: white;
-  padding: 32px;
-  border-radius: 12px;
-  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
-}
-
-.loading-spinner-large {
-  width: 40px;
-  height: 40px;
-  border: 4px solid rgba(255, 36, 66, 0.2);
-  border-radius: 50%;
-  border-top-color: #ff2442;
-  animation: spin 1s ease-in-out infinite;
-}
-
-.loading-text {
-  margin: 0;
-  color: #333;
-  font-size: 16px;
-  font-weight: 500;
-}
-
-/* 分隔线 */
-.login-divider {
-  position: relative;
-  text-align: center;
-  margin: 32px 0;
-  color: #9ca3af;
-  font-size: 14px;
-}
-
-.login-divider::before {
-  content: '';
-  position: absolute;
-  top: 50%;
-  left: 0;
-  right: 0;
-  height: 1px;
-  background: linear-gradient(to right, transparent, #e5e7eb, transparent);
-}
-
-.login-divider span {
-  background: rgba(255, 255, 255, 0.95);
-  padding: 0 16px;
-  position: relative;
-  z-index: 1;
-}
-
-/* 社交登录 */
-.social-login {
-  display: flex;
-  flex-direction: column;
-  gap: 12px;
-}
-
-.social-button {
-  width: 100%;
-  padding: 12px 16px;
-  border: 1px solid #e1e1e1;
-  border-radius: 6px;
-  background: white;
-  color: #333;
-  font-size: 14px;
-  font-weight: 400;
-  cursor: pointer;
-  transition: border-color 0.2s ease;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  gap: 8px;
-}
-
-.social-button:hover {
-  border-color: #ccc;
-}
-
-.social-button.google:hover {
-  border-color: #4285f4;
-  box-shadow: 0 4px 12px rgba(66, 133, 244, 0.2);
-}
-
-.social-button.github:hover {
-  border-color: #333;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
-}
-
-.social-button.xiaohongshu:hover {
-  border-color: #ff2442;
-  box-shadow: 0 4px 12px rgba(255, 36, 66, 0.2);
-}
-
-/* 注册链接 */
-.signup-link {
-  text-align: center;
-  margin-top: 20px;
-  padding-top: 20px;
-  border-top: 1px solid #e5e7eb;
-}
-
-.signup-link p {
-  margin: 0;
-  font-size: 14px;
-  color: #64748b;
-}
-
-.signup-link a {
-  color: #ff2442;
-  text-decoration: none;
-  font-weight: 500;
-  transition: color 0.2s ease;
-}
-
-.signup-link a:hover {
-  color: #d91e3a;
-  text-decoration: underline;
-}
-
-/* 有左侧图标时的内边距调整 */
-.input-wrapper.has-icon .form-input {
-  padding-left: 48px !important;
-}
-
-.input-wrapper.has-icon .form-input.ant-input,
-.input-wrapper.has-icon .form-input.ant-input-affix-wrapper {
-  padding-left: 48px !important;
-}
-
-/* 有右侧切换按钮时的内边距调整 */
-.input-wrapper.has-toggle .form-input {
-  padding-right: 48px !important;
-}
-
-.input-wrapper.has-toggle .form-input.ant-input,
-.input-wrapper.has-toggle .form-input.ant-input-affix-wrapper {
-  padding-right: 48px !important;
-}
-
-/* 没有图标时的内边距调整 */
-.input-wrapper:not(.has-icon) .form-input {
-  padding-left: 16px !important;
-}
-
-.input-wrapper:not(.has-icon) .form-input.ant-input,
-.input-wrapper:not(.has-icon) .form-input.ant-input-affix-wrapper {
-  padding-left: 16px !important;
-}
-
-/* 没有切换按钮时的内边距调整 */
-.input-wrapper:not(.has-toggle) .form-input {
-  padding-right: 16px !important;
-}
-
-.input-wrapper:not(.has-toggle) .form-input.ant-input,
-.input-wrapper:not(.has-toggle) .form-input.ant-input-affix-wrapper {
-  padding-right: 16px !important;
-}
-
-/* 确保输入框内容完全填充 */
-.form-input.ant-input-affix-wrapper .ant-input-suffix {
-  position: absolute !important;
-  right: 12px !important;
-  top: 50% !important;
-  transform: translateY(-50%) !important;
-  margin: 0 !important;
-  padding: 0 !important;
-}
-
-.form-input.ant-input-affix-wrapper .ant-input-prefix {
-  position: absolute !important;
-  left: 16px !important;
-  top: 50% !important;
-  transform: translateY(-50%) !important;
-  margin: 0 !important;
-  padding: 0 !important;
-}
-
-/* 确保所有输入框完全填充其容器 */
-.form-group {
-  display: flex;
-  flex-direction: column;
-  gap: 8px;
-  width: 100%;
-  box-sizing: border-box;
-}
-
-.form-group .input-wrapper {
-  width: 100%;
-  box-sizing: border-box;
-}
-
-/* 防止输入框溢出容器 */
-.form-input,
-.form-input.ant-input,
-.form-input.ant-input-affix-wrapper {
-  max-width: 100% !important;
-  overflow: hidden !important;
-}
-
-/* 确保内部输入元素不会超出边界 */
-.form-input.ant-input-affix-wrapper .ant-input {
-  max-width: 100% !important;
-  overflow: hidden !important;
-  text-overflow: ellipsis !important;
-}
-
-/* 精细间距控制 */
-.login-header + .login-form {
-  margin-top: -4px;
-}
-
-.login-form .form-group:not(:last-child) {
-  margin-bottom: 2px;
-}
-
-.login-form .form-group:last-of-type {
-  margin-bottom: 6px;
-}
-
-.login-button + .signup-link {
-  margin-top: 14px;
-}
-
-/* 响应式设计 */
-@media (max-width: 768px) {
-  /* 重置body和html确保一致性 */
-  html, body {
-    height: 100%;
-    height: 100dvh;
-    margin: 0;
-    padding: 0;
-    overflow-x: hidden;
-    box-sizing: border-box;
-  }
-  
-  .login-container {
-    padding: 16px;
-    align-items: center;
-    justify-content: center;
-    min-height: 100vh;
-    min-height: 100dvh; /* 动态视口高度 */
-    /* 强制重置可能影响定位的样式 */
-    margin: 0;
-    box-sizing: border-box;
-    /* 防止内容溢出影响布局 */
-    overflow-x: hidden;
-    overflow-y: auto;
-    /* 确保flexbox在所有移动设备上表现一致 */
-    -webkit-box-align: center;
-    -webkit-box-pack: center;
-    display: flex !important;
-    position: relative;
-  }
-  
-  .login-content {
-    max-width: 100%;
-    padding: 20px;
-    /* 确保内容区域稳定 */
-    margin: 0 auto;
-    box-sizing: border-box;
-    /* 防止宽度计算问题 */
-    width: calc(100% - 40px);
-    max-width: 480px; /* 增加最大宽度 */
-    position: relative;
-    display: flex;
-    justify-content: center;
-  }
-  
-  .login-card {
-    padding: 32px 28px; /* 增加内边距 */
-    border-radius: 16px;
-    /* 确保卡片稳定定位 */
-    margin: 0;
-    box-sizing: border-box;
-    width: 100%;
-    max-width: 450px; /* 增加卡片最大宽度 */
-    /* 防止backdrop-filter导致的渲染差异 */
-    will-change: auto;
-    position: relative;
-    /* 防止触摸操作影响布局 */
-    -webkit-touch-callout: none;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    -webkit-tap-highlight-color: transparent;
-  }
-  
-  .login-title {
-    font-size: 24px;
-  }
-  
-  .form-input {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px;
-    font-size: 16px; /* 防止iOS Safari缩放 */
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input,
-  .form-input.ant-input-affix-wrapper {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px !important;
-    font-size: 16px !important;
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input-affix-wrapper .ant-input {
-    width: 100% !important;
-    height: 100% !important;
-    padding: 0 !important;
-    border: none !important;
-    background: transparent !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-    box-sizing: border-box !important;
-  }
-  
-  .social-login {
-    gap: 10px;
-  }
-  
-  .social-button {
-    padding: 12px 16px;
-    font-size: 14px;
-  }
-  
-  .form-options {
-    display: flex !important;
-    flex-direction: row !important;
-    justify-content: space-between !important;
-    align-items: center !important;
-    gap: 8px !important;
-    width: 100% !important;
-    flex-wrap: nowrap !important;
-    min-height: 22px !important;
-    margin-top: 8px !important;
-    margin-bottom: 16px !important;
-  }
-  
-  .checkbox-wrapper {
-    font-size: 13px;
-    flex: 0 0 auto !important;
-    white-space: nowrap !important;
-    overflow: hidden !important;
-    text-overflow: ellipsis !important;
-    max-width: 48% !important;
-  }
-  
-  .forgot-password {
-    font-size: 13px;
-    margin-left: auto;
-    flex: 0 0 auto !important;
-    white-space: nowrap !important;
-    overflow: hidden !important;
-    text-overflow: ellipsis !important;
-    max-width: 48% !important;
-  }
-  
-  /* Ant Design Checkbox 的特殊处理 */
-  .form-options .ant-checkbox-wrapper {
-    flex: 0 0 auto !important;
-    font-size: 13px !important;
-    white-space: nowrap !important;
-    overflow: hidden !important;
-    text-overflow: ellipsis !important;
-    max-width: 48% !important;
-  }
-}
-
-@media (max-width: 480px) {
-  .login-container {
-    padding: 16px;
-    align-items: center;
-    justify-content: center;
-    min-height: 100vh;
-    min-height: 100dvh; /* 动态视口高度 */
-    /* 强制重置样式 */
-    margin: 0;
-    box-sizing: border-box;
-    position: relative;
-    /* 确保垂直居中 */
-    display: flex !important;
-  }
-  
-  .login-content {
-    /* 更严格的尺寸控制 */
-    width: calc(100vw - 32px);
-    max-width: 420px; /* 增加最大宽度 */
-    padding: 16px;
-    margin: 0 auto;
-    box-sizing: border-box;
-    display: flex;
-    justify-content: center;
-  }
-  
-  .login-card {
-    padding: 28px 24px; /* 增加内边距 */
-    border-radius: 12px;
-    /* 确保卡片完全稳定 */
-    margin: 0;
-    box-sizing: border-box;
-    width: 100%;
-    position: relative;
-    /* 防止变换导致的位置偏移 */
-    transform: none !important;
-    /* 防止触摸操作影响布局 */
-    -webkit-touch-callout: none;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    /* 防止点击时的高亮效果影响布局 */
-    -webkit-tap-highlight-color: transparent;
-  }
-  
-  .login-title {
-    font-size: 22px;
-  }
-  
-  .form-input {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px;
-    font-size: 16px; /* 防止iOS Safari缩放 */
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input,
-  .form-input.ant-input-affix-wrapper {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px !important;
-    font-size: 16px !important;
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input-affix-wrapper .ant-input {
-    width: 100% !important;
-    height: 100% !important;
-    padding: 0 !important;
-    border: none !important;
-    background: transparent !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-    box-sizing: border-box !important;
-  }
-  
-  .social-login {
-    gap: 10px;
-  }
-  
-  .social-button {
-    padding: 12px 16px;
-    font-size: 14px;
-  }
-  
-  .form-options {
-    display: flex !important;
-    flex-direction: row !important;
-    justify-content: space-between !important;
-    align-items: center !important;
-    gap: 6px !important;
-    width: 100% !important;
-    min-height: 20px !important;
-    flex-wrap: nowrap !important;
-    margin-top: 8px !important;
-    margin-bottom: 16px !important;
-  }
-  
-  .checkbox-wrapper {
-    flex: 0 0 auto !important;
-    font-size: 12px !important;
-    white-space: nowrap !important;
-    overflow: hidden !important;
-    text-overflow: ellipsis !important;
-    max-width: 45% !important;
-  }
-  
-  .forgot-password {
-    flex: 0 0 auto !important;
-    font-size: 12px !important;
-    margin-left: auto !important;
-    white-space: nowrap !important;
-    overflow: hidden !important;
-    text-overflow: ellipsis !important;
-    max-width: 45% !important;
-  }
-  
-/* 移动端优化 */
-  .background-pattern {
-    display: none;
-  }
-  
-  /* 禁用可能影响位置的悬停效果 */
-  .login-card:hover {
-    transform: none !important;
-  }
-}
-
-/* 超小屏幕优化（320px及以下） */
-@media (max-width: 320px) {
-  .login-content {
-    padding: 16px;
-  }
-  
-  .login-card {
-    padding: 24px;
-  }
-  
-  .form-options {
-    display: flex !important;
-    flex-direction: row !important;
-    justify-content: space-between !important;
-    align-items: center !important;
-    gap: 4px !important;
-    width: 100% !important;
-    flex-wrap: nowrap !important;
-    min-height: 18px !important;
-    margin-top: 6px !important;
-    margin-bottom: 14px !important;
-  }
-  
-  .checkbox-wrapper {
-    flex: 0 0 auto !important;
-    font-size: 11px !important;
-    white-space: nowrap !important;
-    overflow: hidden !important;
-    text-overflow: ellipsis !important;
-    max-width: 42% !important;
-    line-height: 1.2 !important;
-  }
-  
-  .forgot-password {
-    flex: 0 0 auto !important;
-    font-size: 11px !important;
-    margin-left: auto !important;
-    white-space: nowrap !important;
-    overflow: hidden !important;
-    text-overflow: ellipsis !important;
-    max-width: 42% !important;
-    line-height: 1.2 !important;
-  }
-  
-  /* Ant Design Checkbox 的特殊处理 */
-  .form-options .ant-checkbox-wrapper {
-    flex: 0 0 auto !important;
-    font-size: 11px !important;
-    white-space: nowrap !important;
-    overflow: hidden !important;
-    text-overflow: ellipsis !important;
-    max-width: 42% !important;
-    line-height: 1.2 !important;
-  }
-}
-
-/* 极小屏幕优化（280px及以下） */
-@media (max-width: 280px) {
-  .form-options {
-    display: flex !important;
-    flex-direction: row !important;
-    justify-content: space-between !important;
-    align-items: center !important;
-    gap: 2px !important;
-    width: 100% !important;
-    flex-wrap: nowrap !important;
-    min-height: 16px !important;
-    margin-top: 6px !important;
-    margin-bottom: 14px !important;
-  }
-  
-  .form-options .ant-checkbox-wrapper {
-    flex: 0 0 auto !important;
-    font-size: 10px !important;
-    white-space: nowrap !important;
-    overflow: hidden !important;
-    text-overflow: ellipsis !important;
-    max-width: 40% !important;
-    line-height: 1.1 !important;
-  }
-  
-  .form-options .forgot-password {
-    flex: 0 0 auto !important;
-    font-size: 10px !important;
-    margin-left: auto !important;
-    white-space: nowrap !important;
-    overflow: hidden !important;
-    text-overflow: ellipsis !important;
-    max-width: 40% !important;
-    line-height: 1.1 !important;
-  }
-  
-  .form-options .ant-checkbox-wrapper .ant-checkbox {
-    margin-right: 2px !important;
-    transform: scale(0.8) !important; /* 进一步缩小checkbox */
-  }
-}
-
-/* 高对比度模式支持 */
-@media (prefers-contrast: high) {
-  .login-card {
-    background: white;
-    border: 2px solid #000;
-  }
-  
-  .form-input {
-    border-color: #000;
-  }
-  
-  .form-input:focus {
-    border-color: #0066cc;
-    box-shadow: 0 0 0 2px #0066cc;
-  }
-}
-
-/* 减少动画模式 */
-@media (prefers-reduced-motion: reduce) {
-  .background-pattern {
-    animation: none;
-  }
-  
-  .login-card,
-  .form-input,
-  .login-button,
-  .social-button {
-    transition: none;
-  }
-}
-
-/* 深色模式支持 */
-@media (prefers-color-scheme: dark) {
-  .login-background {
-    background: linear-gradient(135deg, #1a202c 0%, #2d3748 100%);
-  }
-  
-  .login-card {
-    background: rgba(26, 32, 44, 0.95);
-    border-color: rgba(255, 255, 255, 0.1);
-  }
-  
-  .login-title {
-    color: #f7fafc;
-  }
-  
-  .login-subtitle {
-    color: #a0aec0;
-  }
-  
-  .form-label {
-    color: #e2e8f0;
-  }
-  
-  .form-input {
-    background: #2d3748;
-    border-color: #4a5568;
-    color: #f7fafc;
-  }
-  
-  .form-input:focus {
-    border-color: #ff2442;
-  }
-  
-  .social-button {
-    background: #2d3748;
-    border-color: #4a5568;
-    color: #f7fafc;
-  }
-  
-  .signup-link {
-    border-color: #4a5568;
-  }
-  
-  .signup-link p {
-    color: #a0aec0;
-  }
-  
-  /* 深色模式下的错误提示样式 */
-  .error-message {
-    background: rgba(26, 32, 44, 0.95);
-    color: #ff6b6b;
-  }
-  
-  /* 深色模式下的错误弹窗样式 */
-  .error-modal .ant-modal-header {
-    background: #2d3748;
-    border-color: #4a5568;
-  }
-  
-  .error-modal .ant-modal-title {
-    color: #f7fafc;
-  }
-  
-  .error-modal .ant-modal-body {
-    background: #2d3748;
-    color: #f7fafc;
-  }
-  
-  .error-modal .ant-modal-footer {
-    background: #2d3748;
-  }
-  
-  .error-modal .ant-modal-content {
-    background: #2d3748;
-  }
-}
-
-/* 错误提示样式 - 使用绝对定位避免影响布局 */
-.error-message {
-  position: absolute;
-  top: 95%;
-  left: 4px;
-  right: 4px;
-  font-size: 12px;
-  color: #ff4d4f;
-  margin-top: 4px;
-  display: flex;
-  align-items: center;
-  min-height: 16px;
-  animation: fadeInDown 0.3s ease-out;
-  font-weight: 400;
-  line-height: 1.2;
-  background: rgba(255, 255, 255, 0.95);
-  backdrop-filter: blur(4px);
-  padding: 2px 4px;
-  border-radius: 4px;
-  z-index: 10;
-  pointer-events: none; /* 避免干扰用户交互 */
-}
-
-@keyframes fadeInDown {
-  from {
-    opacity: 0;
-    transform: translateY(-8px);
-  }
-  to {
-    opacity: 1;
-    transform: translateY(0);
-  }
-}
-
-/* 输入框错误状态样式 */
-.form-input.input-error,
-.form-input.input-error.ant-input,
-.form-input.input-error.ant-input-affix-wrapper {
-  border-color: #ff4d4f !important;
-  box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.1) !important;
-  transition: all 0.3s ease !important;
-}
-
-.form-input.input-error:focus,
-.form-input.input-error.ant-input:focus,
-.form-input.input-error.ant-input-affix-wrapper:focus,
-.form-input.input-error.ant-input-affix-wrapper-focused {
-  border-color: #ff4d4f !important;
-  box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important;
-}
-
-/* 错误状态下的图标颜色 */
-.form-input.input-error .anticon {
-  color: #ff4d4f !important;
-}
-
-/* 确保表单组间距一致 */
-.form-group {
-  margin-bottom: 0px;
-}
-
-.form-group:last-of-type {
-  margin-bottom: 0px;
-}
-
-/* 错误弹窗样式 */
-.error-modal .ant-modal-header {
-  background: #fff;
-  border-bottom: 1px solid #f0f0f0;
-  padding: 16px 24px;
-}
-
-.error-modal .ant-modal-title {
-  color: #333;
-  font-weight: 600;
-  font-size: 16px;
-}
-
-.error-modal .ant-modal-body {
-  padding: 16px 24px 24px;
-}
-
-.error-modal .ant-modal-footer {
-  padding: 12px 24px 24px;
-  border-top: none;
-  text-align: center;
-}
-
-.error-modal .ant-btn-primary {
-  background: #ff2442;
-  border-color: #ff2442;
-  font-weight: 500;
-  height: 40px;
-  padding: 0 24px;
-  border-radius: 6px;
-  transition: all 0.2s ease;
-}
-
-.error-modal .ant-btn-primary:hover {
-  background: #d91e3a;
-  border-color: #d91e3a;
-  transform: translateY(-1px);
-  box-shadow: 0 4px 12px rgba(255, 36, 66, 0.3);
-}
-
-.error-modal .ant-modal-content {
-  border-radius: 12px;
-  overflow: hidden;
-  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
-}
-
-/* 错误弹窗遮罩层 */
-.error-modal .ant-modal-mask {
-  background: rgba(0, 0, 0, 0.6);
-  backdrop-filter: blur(4px);
-}
-
-/* 错误弹窗动画 */
-.error-modal .ant-modal {
-  animation: errorModalSlideIn 0.3s ease-out;
-}
-
-@keyframes errorModalSlideIn {
-  from {
-    opacity: 0;
-    transform: translateY(-20px) scale(0.95);
-  }
-  to {
-    opacity: 1;
-    transform: translateY(0) scale(1);
-  }
-}
diff --git a/rhj/frontend/src/pages/LoginPage/LoginPage.js b/rhj/frontend/src/pages/LoginPage/LoginPage.js
deleted file mode 100644
index c315b7d..0000000
--- a/rhj/frontend/src/pages/LoginPage/LoginPage.js
+++ /dev/null
@@ -1,380 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import { Link } from 'react-router-dom';
-import { Input, Checkbox, Modal, Alert } from 'antd';
-import { MailOutlined, LockOutlined, ExclamationCircleOutlined, CheckCircleOutlined } from '@ant-design/icons';
-import { 
-  getRememberedLoginInfo, 
-  saveRememberedLoginInfo, 
-  saveAuthInfo, 
-  isLoggedIn 
-} from '../../utils/auth';
-import { hashPassword } from '../../utils/crypto';
-import './LoginPage.css';
-
-const baseURL = 'http://10.126.59.25:8082';
-
-const LoginPage = () => {
-  const [formData, setFormData] = useState({
-    email: '',
-    password: ''
-  });
-
-  const [rememberMe, setRememberMe] = useState(false);
-  const [isLoading, setIsLoading] = useState(false);
-  const [errors, setErrors] = useState({
-    email: '',
-    password: ''
-  });
-  const [errorModal, setErrorModal] = useState({
-    visible: false,
-    title: '',
-    content: ''
-  });
-  const [successAlert, setSuccessAlert] = useState({
-    visible: false,
-    message: ''
-  });
-
-  // 显示错误弹窗
-  const showErrorModal = (title, content) => {
-    setErrorModal({
-      visible: true,
-      title: title,
-      content: content
-    });
-  };
-
-  // 关闭错误弹窗
-  const closeErrorModal = () => {
-    setErrorModal({
-      visible: false,
-      title: '',
-      content: ''
-    });
-  };
-
-  // 显示成功提示
-  const showSuccessAlert = (message) => {
-    setSuccessAlert({
-      visible: true,
-      message: message
-    });
-    
-    // 3秒后自动隐藏
-    setTimeout(() => {
-      setSuccessAlert({
-        visible: false,
-        message: ''
-      });
-    }, 3000);
-  };
-
-  // 页面加载时检查是否有记住的登录信息
-  useEffect(() => {
-    // 检查是否已经登录
-    if (isLoggedIn()) {
-      // 如果已经有token，可以选择直接跳转到主页面
-      // window.location.href = '/test-dashboard';
-      console.log('用户已登录');
-    }
-
-    // 获取记住的登录信息
-    const rememberedInfo = getRememberedLoginInfo();
-    if (rememberedInfo.rememberMe && rememberedInfo.email) {
-      setFormData({
-        email: rememberedInfo.email,
-        password: rememberedInfo.password
-      });
-      setRememberMe(true);
-    }
-  }, []);
-
-  const handleEmailChange = (e) => {
-    const value = e.target.value;
-    setFormData(prev => ({
-      ...prev,
-      email: value
-    }));
-    
-    // 清除邮箱错误提示
-    if (errors.email) {
-      setErrors(prev => ({
-        ...prev,
-        email: ''
-      }));
-    }
-  };
-
-  const handlePasswordChange = (e) => {
-    const value = e.target.value;
-    setFormData(prev => ({
-      ...prev,
-      password: value
-    }));
-    
-    // 清除密码错误提示
-    if (errors.password) {
-      setErrors(prev => ({
-        ...prev,
-        password: ''
-      }));
-    }
-  };
-
-  const handleRememberMeChange = (e) => {
-    const checked = e.target.checked;
-    setRememberMe(checked);
-    
-    // 如果取消记住我，清除已保存的登录信息
-    if (!checked) {
-      saveRememberedLoginInfo('', '', false);
-    }
-  };
-
-  const validateForm = () => {
-    const newErrors = {
-      email: '',
-      password: ''
-    };
-    
-    let hasError = false;
-    
-    // 验证邮箱
-    if (!formData.email || typeof formData.email !== 'string' || !formData.email.trim()) {
-      newErrors.email = '请输入邮箱地址';
-      hasError = true;
-    } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email)) {
-      newErrors.email = '请输入有效的邮箱地址';
-      hasError = true;
-    }
-    
-    // 验证密码
-    if (!formData.password || typeof formData.password !== 'string' || !formData.password.trim()) {
-      newErrors.password = '请输入密码';
-      hasError = true;
-    } else if (formData.password.length < 6) {
-      newErrors.password = '密码长度至少6位';
-      hasError = true;
-    }
-    
-    setErrors(newErrors);
-    return !hasError;
-  };
-
-  const handleSubmit = async (e) => {
-    e.preventDefault();
-    
-    // 验证表单
-    if (!validateForm()) {
-      return;
-    }
-    
-    setIsLoading(true);
-    
-    try {
-      // 发送登录请求到后端
-      const response = await fetch(baseURL + '/login', {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/json',
-        },
-        body: JSON.stringify({
-          email: formData.email, // 后端支持邮箱登录
-          password: hashPassword(formData.password) // 前端加密密码
-        })
-      });
-      
-      const result = await response.json();
-      
-      if (result.success) {
-        // 显示成功提示
-        showSuccessAlert('登录成功！正在跳转...');
-        
-        // 保存认证信息
-        saveAuthInfo(result.token, result.user, rememberMe);
-        
-        // 保存或清除记住的登录信息
-        saveRememberedLoginInfo(formData.email, formData.password, rememberMe);
-        
-        // 延迟跳转，让用户看到成功提示
-        setTimeout(() => {
-          window.location.href = '/test-dashboard';
-        }, 1500);
-      } else {
-        // 登录失败，显示错误信息
-        let errorTitle = '登录失败';
-        let errorContent = result.message || '登录失败，请检查您的邮箱和密码';
-        
-        // 根据错误类型提供更详细的信息
-        if (result.message) {
-          if (result.message.includes('邮箱') || result.message.includes('email')) {
-            errorTitle = '邮箱验证失败';
-            errorContent = '您输入的邮箱地址不存在或格式不正确，请检查后重试。';
-          } else if (result.message.includes('密码') || result.message.includes('password')) {
-            errorTitle = '密码验证失败';
-            errorContent = '您输入的密码不正确，请检查后重试。如果忘记密码，请点击"忘记密码"进行重置。';
-          } else if (result.message.includes('用户不存在')) {
-            errorTitle = '用户不存在';
-            errorContent = '该邮箱尚未注册，请先注册账户或检查邮箱地址是否正确。';
-          } else if (result.message.includes('账户被锁定') || result.message.includes('locked')) {
-            errorTitle = '账户被锁定';
-            errorContent = '您的账户因安全原因被暂时锁定，请联系客服或稍后重试。';
-          }
-        }
-        
-        showErrorModal(errorTitle, errorContent);
-      }
-    } catch (error) {
-      console.error('登录请求失败:', error);
-      
-      // 根据错误类型显示不同的错误信息
-      if (error.name === 'TypeError' && error.message.includes('fetch')) {
-        showErrorModal('网络连接失败', '无法连接到服务器，请检查您的网络连接后重试。如果问题持续存在，请联系客服。');
-      } else if (error.name === 'AbortError') {
-        showErrorModal('请求超时', '请求超时，请检查网络连接后重试。');
-      } else {
-        showErrorModal('登录失败', '网络连接失败，请检查网络或稍后重试。如果问题持续存在，请联系客服。');
-      }
-    } finally {
-      setIsLoading(false);
-    }
-  };
-
-  return (
-    <div className="login-container">
-      <div className="login-background"></div>
-      
-      {isLoading && (
-        <div className="loading-overlay">
-          <div className="loading-content">
-            <div className="loading-spinner-large"></div>
-            <p className="loading-text">正在登录...</p>
-          </div>
-        </div>
-      )}
-      
-      <div className="login-content">
-        <div className="login-card">
-          {/* 成功提示 */}
-          {successAlert.visible && (
-            <div style={{ marginBottom: '16px' }}>
-              <Alert
-                message={successAlert.message}
-                type="success"
-                icon={<CheckCircleOutlined />}
-                showIcon
-                closable
-                onClose={() => setSuccessAlert({ visible: false, message: '' })}
-                style={{
-                  borderRadius: '8px',
-                  border: '1px solid #b7eb8f',
-                  backgroundColor: '#f6ffed'
-                }}
-              />
-            </div>
-          )}
-          
-          <div className="login-header">
-            <h1 className="login-title">欢迎来到小红书</h1>
-            <p className="login-subtitle">标记我的生活</p>
-          </div>
-
-          <form className="login-form" onSubmit={handleSubmit}>
-            <div className="form-group">
-              <Input
-                type="email"
-                id="email"
-                name="email"
-                className={`form-input ${errors.email ? 'input-error' : ''}`}
-                placeholder="请输入您的邮箱"
-                value={formData.email}
-                onChange={handleEmailChange}
-                prefix={<MailOutlined />}
-                size="large"
-                title=""
-                status={errors.email ? 'error' : ''}
-              />
-              {errors.email && (
-                <div className="error-message">
-                  {errors.email}
-                </div>
-              )}
-            </div>
-
-            <div className="form-group">
-              <Input.Password
-                id="password"
-                name="password"
-                className={`form-input ${errors.password ? 'input-error' : ''}`}
-                placeholder="请输入您的密码"
-                value={formData.password}
-                onChange={handlePasswordChange}
-                prefix={<LockOutlined />}
-                size="large"
-                title=""
-                status={errors.password ? 'error' : ''}
-              />
-              {errors.password && (
-                <div className="error-message">
-                  {errors.password}
-                </div>
-              )}
-            </div>
-
-            <div className="form-options">
-              <Checkbox 
-                checked={rememberMe}
-                onChange={handleRememberMeChange}
-              >
-                记住我
-              </Checkbox>
-              <Link to="/forgot-password" className="forgot-password">忘记密码？</Link>
-            </div>
-
-            <button
-              type="submit"
-              className={`login-button ${isLoading ? 'loading' : ''}`}
-              disabled={isLoading}
-            >
-              {isLoading ? (
-                <>
-                  <div className="loading-spinner"></div>
-                  登录中...
-                </>
-              ) : (
-                '登录'
-              )}
-            </button>
-          </form>
-
-          <div className="signup-link">
-            <p>还没有账户？ <Link to="/register">立即注册</Link></p>
-          </div>
-        </div>
-      </div>
-
-      {/* 错误弹窗 */}
-      <Modal
-        title={
-          <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
-            <ExclamationCircleOutlined style={{ color: '#ff4d4f', fontSize: '18px' }} />
-            {errorModal.title}
-          </div>
-        }
-        open={errorModal.visible}
-        onOk={closeErrorModal}
-        onCancel={closeErrorModal}
-        okText="我知道了"
-        cancelButtonProps={{ style: { display: 'none' } }}
-        centered
-        className="error-modal"
-      >
-        <div style={{ padding: '16px 0', fontSize: '14px', lineHeight: '1.6' }}>
-          {errorModal.content}
-        </div>
-      </Modal>
-    </div>
-  );
-};
-
-export default LoginPage;
diff --git a/rhj/frontend/src/pages/RegisterPage/RegisterPage.css b/rhj/frontend/src/pages/RegisterPage/RegisterPage.css
deleted file mode 100644
index fc03361..0000000
--- a/rhj/frontend/src/pages/RegisterPage/RegisterPage.css
+++ /dev/null
@@ -1,1027 +0,0 @@
-/* 注册页面容器 */
-.register-container {
-  min-height: 100vh;
-  min-height: 100dvh; /* 动态视口高度，避免移动端地址栏影响 */
-  height: 100vh;
-  height: 100dvh;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  position: relative;
-  overflow: hidden;
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
-    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
-    sans-serif;
-  /* 确保容器稳定定位 */
-  box-sizing: border-box;
-  margin: 0;
-  padding: 0;
-  /* 重置文本对齐 */
-  text-align: initial;
-}
-
-/* 小红书风格背景 */
-.register-background {
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  background: #f8f8f8;
-  z-index: -1;
-}
-
-/* 注册内容区域 */
-.register-content {
-  width: 100%;
-  max-width: 500px; /* 增加桌面端最大宽度 */
-  padding: 0;
-  z-index: 1;
-  /* 确保内容稳定定位 */
-  box-sizing: border-box;
-  position: relative;
-  display: flex;
-  justify-content: center;
-}
-
-/* 小红书风格注册卡片 */
-.register-card {
-  background: #fff;
-  border-radius: 8px;
-  padding: 40px; /* 增加桌面端内边距 */
-  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
-  border: 1px solid #e1e1e1;
-  width: 100%;
-  max-width: 450px; /* 增加桌面端卡片最大宽度 */
-  transition: none;
-}
-
-/* 注册头部 */
-.register-header {
-  text-align: center;
-  margin-bottom: 40px;
-}
-
-/* Logo样式 */
-.logo-section {
-  margin-bottom: 24px;
-}
-
-.logo-icon {
-  width: 60px;
-  height: 60px;
-  background: #ff2442;
-  border-radius: 12px;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  font-size: 28px;
-  margin: 0 auto 16px;
-  box-shadow: 0 4px 12px rgba(255, 36, 66, 0.2);
-}
-
-.register-title {
-  font-size: 24px;
-  font-weight: 600;
-  color: #333;
-  margin: 0 0 12px 0;
-  text-align: center;
-}
-
-.register-title::after {
-  display: none;
-}
-
-.register-subtitle {
-  font-size: 14px;
-  color: #999;
-  margin: 0 0 32px 0;
-  font-weight: 400;
-  text-align: center;
-}
-
-/* 表单样式 */
-.register-form {
-  display: flex;
-  flex-direction: column;
-  gap: 20px;
-  width: 100%;
-}
-
-.form-group {
-  display: flex;
-  flex-direction: column;
-  gap: 6px;
-  width: 100%;
-  box-sizing: border-box;
-  margin-bottom: 2px;
-  position: relative; /* 为绝对定位的错误提示提供参考点 */
-}
-
-.form-group .input-wrapper {
-  width: 100%;
-  box-sizing: border-box;
-}
-
-.form-label {
-  font-size: 14px;
-  font-weight: 500;
-  color: #333;
-  margin-bottom: 8px;
-}
-
-.input-wrapper {
-  position: relative;
-  display: flex;
-  align-items: center;
-  width: 100%;
-  box-sizing: border-box;
-}
-
-.form-input {
-  width: 100% !important;
-  height: 44px;
-  padding: 12px 16px 12px 48px;
-  border: 1px solid #e1e1e1;
-  border-radius: 6px;
-  font-size: 14px;
-  transition: border-color 0.2s ease;
-  background: #fff;
-  color: #333;
-  box-sizing: border-box !important;
-  flex: 1;
-  min-width: 0;
-}
-
-/* 针对 Antd Input 组件的特定样式 */
-.form-input.ant-input,
-.form-input.ant-input-affix-wrapper {
-  width: 100% !important;
-  height: 44px !important;
-  border: 1px solid #e1e1e1 !important;
-  border-radius: 6px !important;
-  padding: 12px 48px 12px 48px !important;
-  font-size: 14px !important;
-  background: #fff !important;
-  color: #333 !important;
-  box-sizing: border-box !important;
-  flex: 1 !important;
-  min-width: 0 !important;
-  display: flex !important;
-  align-items: center !important;
-}
-
-.form-input.ant-input-affix-wrapper .ant-input {
-  width: 100% !important;
-  height: 100% !important;
-  padding: 0 !important;
-  border: none !important;
-  background: transparent !important;
-  flex: 1 !important;
-  min-width: 0 !important;
-  box-sizing: border-box !important;
-}
-
-.form-input:focus {
-  outline: none;
-  border-color: #ff2442;
-  box-shadow: none;
-  transform: none;
-}
-
-/* Antd Input focus 样式 */
-.form-input.ant-input:focus,
-.form-input.ant-input-affix-wrapper:focus,
-.form-input.ant-input-affix-wrapper-focused {
-  outline: none !important;
-  border-color: #ff2442 !important;
-  box-shadow: none !important;
-  transform: none !important;
-}
-
-.form-input::placeholder {
-  color: #9ca3af;
-}
-
-.input-icon {
-  position: absolute;
-  left: 16px;
-  top: 50%;
-  transform: translateY(-50%);
-  color: #9ca3af;
-  pointer-events: none;
-  transition: color 0.3s ease;
-  z-index: 2;
-}
-
-.form-input:focus + .input-icon {
-  color: #ff2442;
-}
-
-.password-toggle {
-  position: absolute;
-  right: 12px;
-  top: 50%;
-  transform: translateY(-50%);
-  background: none;
-  border: none;
-  color: #9ca3af;
-  cursor: pointer;
-  padding: 4px;
-  border-radius: 4px;
-  transition: all 0.3s ease;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  z-index: 2;
-  width: 24px;
-  height: 24px;
-}
-
-.password-toggle:hover {
-  color: #ff2442;
-  background-color: rgba(255, 36, 66, 0.1);
-}
-
-/* 邮箱验证码输入框容器 */
-.email-code-wrapper {
-  display: flex;
-  gap: 8px;
-  width: 100%;
-  box-sizing: border-box;
-  align-items: flex-start;
-}
-
-.email-code-input {
-  flex: 1;
-  min-width: 0;
-}
-
-.send-code-button {
-  height: 44px !important;
-  padding: 0 16px !important;
-  background: #ff2442 !important;
-  border-color: #ff2442 !important;
-  border-radius: 6px !important;
-  font-size: 14px !important;
-  font-weight: 500 !important;
-  white-space: nowrap !important;
-  flex-shrink: 0 !important;
-  min-width: 100px !important;
-  display: flex !important;
-  align-items: center !important;
-  justify-content: center !important;
-  transition: all 0.2s ease !important;
-  box-sizing: border-box !important;
-}
-
-.send-code-button:hover:not(:disabled) {
-  background: #d91e3a !important;
-  border-color: #d91e3a !important;
-  transform: none !important;
-  box-shadow: none !important;
-}
-
-.send-code-button:disabled {
-  background: #f5f5f5 !important;
-  border-color: #d9d9d9 !important;
-  color: #bfbfbf !important;
-  cursor: not-allowed !important;
-}
-
-.send-code-button.ant-btn-loading {
-  background: #ff2442 !important;
-  border-color: #ff2442 !important;
-  color: white !important;
-}
-
-/* 小红书风格注册按钮 */
-.register-button {
-  width: 100%;
-  height: 48px; /* 固定高度，防止布局变化 */
-  padding: 12px;
-  background: #ff2442;
-  color: white;
-  border: none;
-  border-radius: 6px;
-  font-size: 14px;
-  font-weight: 500;
-  cursor: pointer;
-  transition: background-color 0.2s ease;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  gap: 8px;
-  margin-top: 8px;
-  position: relative; /* 为绝对定位的加载状态做准备 */
-  box-sizing: border-box; /* 确保padding包含在总尺寸内 */
-  min-width: 0; /* 防止flex子元素造成宽度变化 */
-}
-
-.register-button:hover:not(:disabled) {
-  background: #d91e3a;
-  transform: none;
-  box-shadow: none;
-}
-
-.register-button:active:not(:disabled) {
-  transform: none;
-}
-
-.register-button:disabled {
-  background: #ccc;
-  cursor: not-allowed;
-  opacity: 0.8;
-}
-
-.register-button.loading {
-  background: #ff7b8a;
-  cursor: not-allowed;
-}
-
-.loading-spinner {
-  width: 16px;
-  height: 16px;
-  border: 2px solid rgba(255, 255, 255, 0.3);
-  border-radius: 50%;
-  border-top-color: #fff;
-  animation: spin 1s ease-in-out infinite;
-}
-
-@keyframes spin {
-  to { transform: rotate(360deg); }
-}
-
-/* 加载遮罩层 */
-.loading-overlay {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  background: rgba(0, 0, 0, 0.5);
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  z-index: 1000;
-  backdrop-filter: blur(4px);
-}
-
-.loading-content {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  gap: 16px;
-  background: white;
-  padding: 32px;
-  border-radius: 12px;
-  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
-}
-
-.loading-spinner-large {
-  width: 40px;
-  height: 40px;
-  border: 4px solid rgba(255, 36, 66, 0.2);
-  border-radius: 50%;
-  border-top-color: #ff2442;
-  animation: spin 1s ease-in-out infinite;
-}
-
-.loading-text {
-  margin: 0;
-  color: #333;
-  font-size: 16px;
-  font-weight: 500;
-}
-
-/* 分隔线 */
-.register-divider {
-  position: relative;
-  text-align: center;
-  margin: 32px 0;
-  color: #9ca3af;
-  font-size: 14px;
-}
-
-.register-divider::before {
-  content: '';
-  position: absolute;
-  top: 50%;
-  left: 0;
-  right: 0;
-  height: 1px;
-  background: linear-gradient(to right, transparent, #e5e7eb, transparent);
-}
-
-.register-divider span {
-  background: rgba(255, 255, 255, 0.95);
-  padding: 0 16px;
-  position: relative;
-  z-index: 1;
-}
-
-/* 社交登录 */
-.social-login {
-  display: flex;
-  flex-direction: column;
-  gap: 12px;
-}
-
-.social-button {
-  width: 100%;
-  padding: 12px 16px;
-  border: 1px solid #e1e1e1;
-  border-radius: 6px;
-  background: white;
-  color: #333;
-  font-size: 14px;
-  font-weight: 400;
-  cursor: pointer;
-  transition: border-color 0.2s ease;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  gap: 8px;
-}
-
-.social-button:hover {
-  border-color: #ccc;
-}
-
-.social-button.google:hover {
-  border-color: #4285f4;
-  box-shadow: 0 4px 12px rgba(66, 133, 244, 0.2);
-}
-
-.social-button.github:hover {
-  border-color: #333;
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
-}
-
-.social-button.xiaohongshu:hover {
-  border-color: #ff2442;
-  box-shadow: 0 4px 12px rgba(255, 36, 66, 0.2);
-}
-
-/* 登录链接 */
-.login-link {
-  text-align: center;
-  margin-top: 20px;
-  padding-top: 20px;
-  border-top: 1px solid #e5e7eb;
-}
-
-.login-link p {
-  margin: 0;
-  font-size: 14px;
-  color: #64748b;
-}
-
-.login-link a {
-  color: #ff2442;
-  text-decoration: none;
-  font-weight: 500;
-  transition: color 0.2s ease;
-}
-
-.login-link a:hover {
-  color: #d91e3a;
-  text-decoration: underline;
-}
-
-/* 有左侧图标时的内边距调整 */
-.input-wrapper.has-icon .form-input {
-  padding-left: 48px !important;
-}
-
-.input-wrapper.has-icon .form-input.ant-input,
-.input-wrapper.has-icon .form-input.ant-input-affix-wrapper {
-  padding-left: 48px !important;
-}
-
-/* 有右侧切换按钮时的内边距调整 */
-.input-wrapper.has-toggle .form-input {
-  padding-right: 48px !important;
-}
-
-.input-wrapper.has-toggle .form-input.ant-input,
-.input-wrapper.has-toggle .form-input.ant-input-affix-wrapper {
-  padding-right: 48px !important;
-}
-
-/* 没有图标时的内边距调整 */
-.input-wrapper:not(.has-icon) .form-input {
-  padding-left: 16px !important;
-}
-
-.input-wrapper:not(.has-icon) .form-input.ant-input,
-.input-wrapper:not(.has-icon) .form-input.ant-input-affix-wrapper {
-  padding-left: 16px !important;
-}
-
-/* 没有切换按钮时的内边距调整 */
-.input-wrapper:not(.has-toggle) .form-input {
-  padding-right: 16px !important;
-}
-
-.input-wrapper:not(.has-toggle) .form-input.ant-input,
-.input-wrapper:not(.has-toggle) .form-input.ant-input-affix-wrapper {
-  padding-right: 16px !important;
-}
-
-/* 确保输入框内容完全填充 */
-.form-input.ant-input-affix-wrapper .ant-input-suffix {
-  position: absolute !important;
-  right: 12px !important;
-  top: 50% !important;
-  transform: translateY(-50%) !important;
-  margin: 0 !important;
-  padding: 0 !important;
-}
-
-.form-input.ant-input-affix-wrapper .ant-input-prefix {
-  position: absolute !important;
-  left: 16px !important;
-  top: 50% !important;
-  transform: translateY(-50%) !important;
-  margin: 0 !important;
-  padding: 0 !important;
-}
-
-/* 确保所有输入框完全填充其容器 */
-.form-group {
-  display: flex;
-  flex-direction: column;
-  gap: 8px;
-  width: 100%;
-  box-sizing: border-box;
-}
-
-.form-group .input-wrapper {
-  width: 100%;
-  box-sizing: border-box;
-}
-
-/* 防止输入框溢出容器 */
-.form-input,
-.form-input.ant-input,
-.form-input.ant-input-affix-wrapper {
-  max-width: 100% !important;
-  overflow: hidden !important;
-}
-
-/* 确保内部输入元素不会超出边界 */
-.form-input.ant-input-affix-wrapper .ant-input {
-  max-width: 100% !important;
-  overflow: hidden !important;
-  text-overflow: ellipsis !important;
-}
-
-/* 精细间距控制 */
-.register-header + .register-form {
-  margin-top: -4px;
-}
-
-.register-form .form-group:not(:last-child) {
-  margin-bottom: 2px;
-}
-
-.register-form .form-group:last-of-type {
-  margin-bottom: 6px;
-}
-
-.register-button + .login-link {
-  margin-top: 14px;
-}
-
-/* 响应式设计 */
-@media (max-width: 768px) {
-  /* 重置body和html确保一致性 */
-  html, body {
-    height: 100%;
-    height: 100dvh;
-    margin: 0;
-    padding: 0;
-    overflow-x: hidden;
-    box-sizing: border-box;
-  }
-  
-  .register-container {
-    padding: 16px;
-    align-items: center;
-    justify-content: center;
-    min-height: 100vh;
-    min-height: 100dvh; /* 动态视口高度 */
-    /* 强制重置可能影响定位的样式 */
-    margin: 0;
-    box-sizing: border-box;
-    /* 防止内容溢出影响布局 */
-    overflow-x: hidden;
-    overflow-y: auto;
-    /* 确保flexbox在所有移动设备上表现一致 */
-    -webkit-box-align: center;
-    -webkit-box-pack: center;
-    display: flex !important;
-    position: relative;
-  }
-  
-  .register-content {
-    max-width: 100%;
-    padding: 20px;
-    /* 确保内容区域稳定 */
-    margin: 0 auto;
-    box-sizing: border-box;
-    /* 防止宽度计算问题 */
-    width: calc(100% - 40px);
-    max-width: 480px; /* 增加最大宽度 */
-    position: relative;
-    display: flex;
-    justify-content: center;
-  }
-  
-  .register-card {
-    padding: 32px 28px; /* 增加内边距 */
-    border-radius: 16px;
-    /* 确保卡片稳定定位 */
-    margin: 0;
-    box-sizing: border-box;
-    width: 100%;
-    max-width: 450px; /* 增加卡片最大宽度 */
-    /* 防止backdrop-filter导致的渲染差异 */
-    will-change: auto;
-    position: relative;
-    /* 防止触摸操作影响布局 */
-    -webkit-touch-callout: none;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    -webkit-tap-highlight-color: transparent;
-  }
-  
-  .register-title {
-    font-size: 24px;
-  }
-  
-  .form-input {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px;
-    font-size: 16px; /* 防止iOS Safari缩放 */
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input,
-  .form-input.ant-input-affix-wrapper {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px !important;
-    font-size: 16px !important;
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input-affix-wrapper .ant-input {
-    width: 100% !important;
-    height: 100% !important;
-    padding: 0 !important;
-    border: none !important;
-    background: transparent !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-    box-sizing: border-box !important;
-  }
-  
-  .social-login {
-    gap: 10px;
-  }
-  
-  .social-button {
-    padding: 12px 16px;
-    font-size: 14px;
-  }
-}
-
-@media (max-width: 480px) {
-  .register-container {
-    padding: 16px;
-    align-items: center;
-    justify-content: center;
-    min-height: 100vh;
-    min-height: 100dvh; /* 动态视口高度 */
-    /* 强制重置样式 */
-    margin: 0;
-    box-sizing: border-box;
-    position: relative;
-    /* 确保垂直居中 */
-    display: flex !important;
-  }
-  
-  .register-content {
-    /* 更严格的尺寸控制 */
-    width: calc(100vw - 32px);
-    max-width: 420px; /* 增加最大宽度 */
-    padding: 16px;
-    margin: 0 auto;
-    box-sizing: border-box;
-    display: flex;
-    justify-content: center;
-  }
-  
-  .register-card {
-    padding: 28px 24px; /* 增加内边距 */
-    border-radius: 12px;
-    /* 确保卡片完全稳定 */
-    margin: 0;
-    box-sizing: border-box;
-    width: 100%;
-    position: relative;
-    /* 防止变换导致的位置偏移 */
-    transform: none !important;
-    /* 防止触摸操作影响布局 */
-    -webkit-touch-callout: none;
-    -webkit-user-select: none;
-    -khtml-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    /* 防止点击时的高亮效果影响布局 */
-    -webkit-tap-highlight-color: transparent;
-  }
-  
-  .register-title {
-    font-size: 22px;
-  }
-  
-  .form-input {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px;
-    font-size: 16px; /* 防止iOS Safari缩放 */
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input,
-  .form-input.ant-input-affix-wrapper {
-    width: 100% !important;
-    height: 44px !important;
-    padding: 12px 48px 12px 48px !important;
-    font-size: 16px !important;
-    box-sizing: border-box !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-  }
-  
-  .form-input.ant-input-affix-wrapper .ant-input {
-    width: 100% !important;
-    height: 100% !important;
-    padding: 0 !important;
-    border: none !important;
-    background: transparent !important;
-    flex: 1 !important;
-    min-width: 0 !important;
-    box-sizing: border-box !important;
-  }
-  
-  .social-login {
-    gap: 10px;
-  }
-  
-  .social-button {
-    padding: 12px 16px;
-    font-size: 14px;
-  }
-  
-  /* 移动端优化 */
-  .background-pattern {
-    display: none;
-  }
-  
-  /* 禁用可能影响位置的悬停效果 */
-  .register-card:hover {
-    transform: none !important;
-  }
-}
-
-/* 高对比度模式支持 */
-@media (prefers-contrast: high) {
-  .register-card {
-    background: white;
-    border: 2px solid #000;
-  }
-  
-  .form-input {
-    border-color: #000;
-  }
-  
-  .form-input:focus {
-    border-color: #0066cc;
-    box-shadow: 0 0 0 2px #0066cc;
-  }
-}
-
-/* 减少动画模式 */
-@media (prefers-reduced-motion: reduce) {
-  .background-pattern {
-    animation: none;
-  }
-  
-  .register-card,
-  .form-input,
-  .register-button,
-  .social-button {
-    transition: none;
-  }
-}
-
-/* 深色模式支持 */
-@media (prefers-color-scheme: dark) {
-  .register-background {
-    background: linear-gradient(135deg, #1a202c 0%, #2d3748 100%);
-  }
-  
-  .register-card {
-    background: rgba(26, 32, 44, 0.95);
-    border-color: rgba(255, 255, 255, 0.1);
-  }
-  
-  .register-title {
-    color: #f7fafc;
-  }
-  
-  .register-subtitle {
-    color: #a0aec0;
-  }
-  
-  .form-label {
-    color: #e2e8f0;
-  }
-  
-  .form-input {
-    background: #2d3748;
-    border-color: #4a5568;
-    color: #f7fafc;
-  }
-  
-  .form-input:focus {
-    border-color: #ff2442;
-  }
-  
-  .social-button {
-    background: #2d3748;
-    border-color: #4a5568;
-    color: #f7fafc;
-  }
-  
-  .login-link {
-    border-color: #4a5568;
-  }
-  
-  .login-link p {
-    color: #a0aec0;
-  }
-  
-  /* 深色模式下的错误提示样式 */
-  .error-message {
-    background: rgba(26, 32, 44, 0.95);
-    color: #ff6b6b;
-  }
-}
-
-/* 错误提示样式 - 使用绝对定位避免影响布局 */
-.error-message {
-  position: absolute;
-  top: 95%;
-  left: 4px;
-  right: 4px;
-  font-size: 12px;
-  color: #ff4d4f;
-  margin-top: 4px;
-  display: flex;
-  align-items: center;
-  min-height: 16px;
-  animation: fadeInDown 0.3s ease-out;
-  font-weight: 400;
-  line-height: 1.2;
-  background: rgba(255, 255, 255, 0.95);
-  backdrop-filter: blur(4px);
-  padding: 2px 4px;
-  border-radius: 4px;
-  z-index: 10;
-  pointer-events: none; /* 避免干扰用户交互 */
-}
-
-@keyframes fadeInDown {
-  from {
-    opacity: 0;
-    transform: translateY(-8px);
-  }
-  to {
-    opacity: 1;
-    transform: translateY(0);
-  }
-}
-
-/* 输入框错误状态样式 */
-.form-input.input-error,
-.form-input.input-error.ant-input,
-.form-input.input-error.ant-input-affix-wrapper {
-  border-color: #ff4d4f !important;
-  box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.1) !important;
-  transition: all 0.3s ease !important;
-}
-
-.form-input.input-error:focus,
-.form-input.input-error.ant-input:focus,
-.form-input.input-error.ant-input-affix-wrapper:focus,
-.form-input.input-error.ant-input-affix-wrapper-focused {
-  border-color: #ff4d4f !important;
-  box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2) !important;
-}
-
-/* 错误状态下的图标颜色 */
-.form-input.input-error .anticon {
-  color: #ff4d4f !important;
-}
-
-/* 确保表单组间距一致 */
-.form-group {
-  margin-bottom: 0px;
-}
-
-.form-group:last-of-type {
-  margin-bottom: 0px;
-}
-
-/* 错误弹窗样式 */
-.error-modal .ant-modal-header {
-  background: #fff;
-  border-bottom: 1px solid #f0f0f0;
-  padding: 16px 24px;
-}
-
-.error-modal .ant-modal-title {
-  color: #333;
-  font-weight: 600;
-  font-size: 16px;
-}
-
-.error-modal .ant-modal-body {
-  padding: 16px 24px 24px;
-}
-
-.error-modal .ant-modal-footer {
-  padding: 12px 24px 24px;
-  border-top: none;
-  text-align: center;
-}
-
-.error-modal .ant-btn-primary {
-  background: #ff2442;
-  border-color: #ff2442;
-  font-weight: 500;
-  height: 40px;
-  padding: 0 24px;
-  border-radius: 6px;
-  transition: all 0.2s ease;
-}
-
-.error-modal .ant-btn-primary:hover {
-  background: #d91e3a;
-  border-color: #d91e3a;
-  transform: translateY(-1px);
-  box-shadow: 0 4px 12px rgba(255, 36, 66, 0.3);
-}
-
-.error-modal .ant-modal-content {
-  border-radius: 12px;
-  overflow: hidden;
-  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
-}
-
-/* 错误弹窗遮罩层 */
-.error-modal .ant-modal-mask {
-  background: rgba(0, 0, 0, 0.6);
-  backdrop-filter: blur(4px);
-}
-
-/* 错误弹窗动画 */
-.error-modal .ant-modal {
-  animation: errorModalSlideIn 0.3s ease-out;
-}
-
-@keyframes errorModalSlideIn {
-  from {
-    opacity: 0;
-    transform: translateY(-20px) scale(0.95);
-  }
-  to {
-    opacity: 1;
-    transform: translateY(0) scale(1);
-  }
-}
diff --git a/rhj/frontend/src/pages/RegisterPage/RegisterPage.js b/rhj/frontend/src/pages/RegisterPage/RegisterPage.js
deleted file mode 100644
index 836e1cf..0000000
--- a/rhj/frontend/src/pages/RegisterPage/RegisterPage.js
+++ /dev/null
@@ -1,625 +0,0 @@
-import React, { useState } from 'react';
-import { Link, useNavigate } from 'react-router-dom';
-import { Input, Button, message, Modal, Alert } from 'antd';
-import { MailOutlined, LockOutlined, UserOutlined, SafetyOutlined, ExclamationCircleOutlined, CheckCircleOutlined } from '@ant-design/icons';
-import { hashPassword } from '../../utils/crypto';
-import './RegisterPage.css';
-
-const baseURL = 'http://10.126.59.25:8082';
-
-const RegisterPage = () => {
-  const [formData, setFormData] = useState({
-    username: '',
-    email: '',
-    emailCode: '',
-    password: '',
-    confirmPassword: ''
-  });
-
-  const [errors, setErrors] = useState({
-    username: '',
-    email: '',
-    emailCode: '',
-    password: '',
-    confirmPassword: ''
-  });
-
-  const [emailCodeSent, setEmailCodeSent] = useState(false);
-  const [countdown, setCountdown] = useState(0);
-  const [sendingCode, setSendingCode] = useState(false);
-  const [isLoading, setIsLoading] = useState(false);
-  const [errorModal, setErrorModal] = useState({
-    visible: false,
-    title: '',
-    content: ''
-  });
-  const [successAlert, setSuccessAlert] = useState({
-    visible: false,
-    message: ''
-  });
-  const [emailCodeSuccessAlert, setEmailCodeSuccessAlert] = useState({
-    visible: false,
-    message: ''
-  });
-
-  const navigate = useNavigate();
-
-  // 显示错误弹窗
-  const showErrorModal = (title, content) => {
-    setErrorModal({
-      visible: true,
-      title: title,
-      content: content
-    });
-  };
-
-  // 关闭错误弹窗
-  const closeErrorModal = () => {
-    setErrorModal({
-      visible: false,
-      title: '',
-      content: ''
-    });
-  };
-
-  // 显示成功提示
-  const showSuccessAlert = (message) => {
-    setSuccessAlert({
-      visible: true,
-      message: message
-    });
-    
-    // 3秒后自动隐藏
-    setTimeout(() => {
-      setSuccessAlert({
-        visible: false,
-        message: ''
-      });
-    }, 3000);
-  };
-
-  // 显示邮件验证码发送成功提示
-  const showEmailCodeSuccessAlert = (message) => {
-    setEmailCodeSuccessAlert({
-      visible: true,
-      message: message
-    });
-    
-    // 5秒后自动隐藏
-    setTimeout(() => {
-      setEmailCodeSuccessAlert({
-        visible: false,
-        message: ''
-      });
-    }, 5000);
-  };
-
-  // 倒计时效果
-  React.useEffect(() => {
-    let timer;
-    if (countdown > 0) {
-      timer = setTimeout(() => {
-        setCountdown(countdown - 1);
-      }, 1000);
-    }
-    return () => clearTimeout(timer);
-  }, [countdown]);
-
-  // 发送邮箱验证码
-  const sendEmailCode = async () => {
-    // 验证邮箱格式
-    if (!formData.email || typeof formData.email !== 'string' || !formData.email.trim()) {
-      setErrors(prev => ({
-        ...prev,
-        email: '请先输入邮箱地址'
-      }));
-      return;
-    }
-    
-    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email)) {
-      setErrors(prev => ({
-        ...prev,
-        email: '请输入有效的邮箱地址'
-      }));
-      return;
-    }
-
-    setSendingCode(true);
-    
-    try {
-      // 调用后端API发送验证码
-      const response = await fetch(baseURL + '/send-verification-code', {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/json',
-        },
-        body: JSON.stringify({
-          email: formData.email,
-          verification_type: 'register'
-        })
-      });
-      
-      if (!response.ok) {
-        throw new Error(`HTTP ${response.status}: ${response.statusText}`);
-      }
-      
-      const result = await response.json();
-      
-      if (result.success) {
-        showEmailCodeSuccessAlert('验证码已发送到您的邮箱');
-        setEmailCodeSent(true);
-        setCountdown(60); // 60秒倒计时
-        
-        // 清除邮箱错误提示
-        setErrors(prev => ({
-          ...prev,
-          email: ''
-        }));
-      } else {
-        // 根据具体错误信息进行处理
-        const errorMessage = result.message || '发送验证码失败，请稍后再试';
-        
-        if (errorMessage.includes('邮箱') && (errorMessage.includes('已注册') || errorMessage.includes('已存在'))) {
-          setErrors(prev => ({
-            ...prev,
-            email: errorMessage
-          }));
-        } else {
-          showErrorModal('发送验证码失败', errorMessage);
-        }
-      }
-      
-    } catch (error) {
-      console.error('发送验证码失败:', error);
-      
-      // 根据错误类型显示不同的错误信息
-      if (error.name === 'TypeError' && error.message.includes('Failed to fetch')) {
-        showErrorModal('网络连接失败', '无法连接到服务器，请检查您的网络连接后重试。如果问题持续存在，请联系客服。');
-      } else if (error.message.includes('HTTP 500')) {
-        showErrorModal('服务器错误', '服务器出现了内部错误，请稍后重试。如果问题持续存在，请联系客服。');
-      } else if (error.message.includes('HTTP 429')) {
-        showErrorModal('发送频率限制', '验证码发送过于频繁，请稍后再试。为了防止垃圾邮件，系统限制了发送频率。');
-      } else if (error.message.includes('HTTP 400')) {
-        showErrorModal('请求错误', '邮箱格式错误，请检查邮箱地址是否正确。');
-      } else {
-        showErrorModal('发送失败', '发送验证码失败，请稍后重试。如果问题持续存在，请联系客服。');
-      }
-    } finally {
-      setSendingCode(false);
-    }
-  };
-
-  const handleInputChange = (field) => (e) => {
-    const value = e.target.value;
-    setFormData(prev => ({
-      ...prev,
-      [field]: value
-    }));
-    
-    // 清除对应字段的错误提示
-    if (errors[field]) {
-      setErrors(prev => ({
-        ...prev,
-        [field]: ''
-      }));
-    }
-  };
-
-  const handlePasswordChange = (e) => {
-    const value = e.target.value;
-    setFormData(prev => ({
-      ...prev,
-      password: value
-    }));
-    
-    // 清除密码错误提示
-    if (errors.password) {
-      setErrors(prev => ({
-        ...prev,
-        password: ''
-      }));
-    }
-  };
-
-  const handleConfirmPasswordChange = (e) => {
-    const value = e.target.value;
-    setFormData(prev => ({
-      ...prev,
-      confirmPassword: value
-    }));
-    
-    // 清除确认密码错误提示
-    if (errors.confirmPassword) {
-      setErrors(prev => ({
-        ...prev,
-        confirmPassword: ''
-      }));
-    }
-  };
-
-  const validateForm = () => {
-    const newErrors = {
-      username: '',
-      email: '',
-      emailCode: '',
-      password: '',
-      confirmPassword: ''
-    };
-    
-    let hasError = false;
-    
-    // 验证用户名
-    if (!formData.username || typeof formData.username !== 'string' || !formData.username.trim()) {
-      newErrors.username = '请输入用户名';
-      hasError = true;
-    } else if (formData.username.length < 2) {
-      newErrors.username = '用户名至少2个字符';
-      hasError = true;
-    } else if (formData.username.length > 20) {
-      newErrors.username = '用户名不能超过20个字符';
-      hasError = true;
-    }
-    
-    // 验证邮箱
-    if (!formData.email || typeof formData.email !== 'string' || !formData.email.trim()) {
-      newErrors.email = '请输入邮箱地址';
-      hasError = true;
-    } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email)) {
-      newErrors.email = '请输入有效的邮箱地址';
-      hasError = true;
-    }
-    
-    // 验证邮箱验证码
-    if (!formData.emailCode || typeof formData.emailCode !== 'string' || !formData.emailCode.trim()) {
-      newErrors.emailCode = '请输入邮箱验证码';
-      hasError = true;
-    } else if (formData.emailCode.length !== 6 || !/^\d{6}$/.test(formData.emailCode)) {
-      newErrors.emailCode = '请输入6位数字验证码';
-      hasError = true;
-    }
-    
-    // 验证密码
-    if (!formData.password || typeof formData.password !== 'string' || !formData.password.trim()) {
-      newErrors.password = '请输入密码';
-      hasError = true;
-    } else if (formData.password.length < 6) {
-      newErrors.password = '密码长度至少6位';
-      hasError = true;
-    } else if (formData.password.length > 20) {
-      newErrors.password = '密码长度不能超过20位';
-      hasError = true;
-    }
-    
-    // 验证确认密码
-    if (!formData.confirmPassword || typeof formData.confirmPassword !== 'string' || !formData.confirmPassword.trim()) {
-      newErrors.confirmPassword = '请确认密码';
-      hasError = true;
-    } else if (formData.password !== formData.confirmPassword) {
-      newErrors.confirmPassword = '两次输入的密码不一致';
-      hasError = true;
-    }
-    
-    setErrors(newErrors);
-    return !hasError;
-  };
-
-  const handleSubmit = async (e) => {
-    e.preventDefault();
-    
-    // 验证表单
-    if (!validateForm()) {
-      return;
-    }
-    
-    setIsLoading(true);
-    
-    try {
-      // 调用后端API进行注册
-      const registerResponse = await fetch(baseURL + '/register', {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/json',
-        },
-        body: JSON.stringify({
-          username: formData.username,
-          email: formData.email,
-          password: hashPassword(formData.password), // 前端加密密码
-          verification_code: hashPassword(formData.emailCode) // 前端加密验证码
-        })
-      });
-      
-      if (!registerResponse.ok) {
-        throw new Error(`HTTP ${registerResponse.status}: ${registerResponse.statusText}`);
-      }
-      
-      const registerResult = await registerResponse.json();
-      
-      if (registerResult.success) {
-        showSuccessAlert('注册成功！欢迎加入小红书，正在跳转到登录页面...');
-        // 清空表单数据
-        setFormData({
-          username: '',
-          email: '',
-          emailCode: '',
-          password: '',
-          confirmPassword: ''
-        });
-        setErrors({
-          username: '',
-          email: '',
-          emailCode: '',
-          password: '',
-          confirmPassword: ''
-        });
-        // 延迟跳转到登录页面，让用户看到成功提示
-        setTimeout(() => {
-          navigate('/login');
-        }, 2000);
-      } else {
-        // 处理不同的注册失败情况
-        const errorMessage = registerResult.message || '注册失败，请稍后再试';
-        
-        // 如果是邮箱已存在的错误，将错误显示在邮箱字段下方
-        if (errorMessage.includes('邮箱') && (errorMessage.includes('已存在') || errorMessage.includes('已注册'))) {
-          setErrors(prev => ({
-            ...prev,
-            email: errorMessage
-          }));
-        } 
-        // 如果是用户名已存在的错误，将错误显示在用户名字段下方
-        else if (errorMessage.includes('用户名') && (errorMessage.includes('已存在') || errorMessage.includes('已被使用'))) {
-          setErrors(prev => ({
-            ...prev,
-            username: errorMessage
-          }));
-        } 
-        else {
-          // 其他错误显示在消息框中
-          message.error(errorMessage);
-        }
-      }
-      
-    } catch (error) {
-      console.error('注册失败:', error);
-      
-      // 根据错误类型显示不同的错误信息
-      if (error.name === 'TypeError' && error.message.includes('Failed to fetch')) {
-        showErrorModal('网络连接失败', '无法连接到服务器，请检查您的网络连接后重试。如果问题持续存在，请联系客服。');
-      } else if (error.message.includes('HTTP 500')) {
-        showErrorModal('服务器内部错误', '服务器出现了内部错误，请稍后重试或联系客服。技术团队已收到通知。');
-      } else if (error.message.includes('HTTP 400')) {
-        showErrorModal('请求参数错误', '请求参数有误，请检查您输入的信息是否正确。');
-      } else if (error.message.includes('HTTP 409')) {
-        showErrorModal('用户信息冲突', '您输入的邮箱或用户名可能已被其他用户使用，请尝试使用其他邮箱或用户名。');
-      } else if (error.message.includes('HTTP')) {
-        showErrorModal('请求失败', `请求失败 (${error.message})，请稍后重试。如果问题持续存在，请联系客服。`);
-      } else {
-        showErrorModal('注册失败', '注册过程中发生未知错误，请稍后重试。如果问题持续存在，请联系客服。');
-      }
-    } finally {
-      setIsLoading(false);
-    }
-  };
-
-  return (
-    <div className="register-container">
-      <div className="register-background"></div>
-      
-      {isLoading && (
-        <div className="loading-overlay">
-          <div className="loading-content">
-            <div className="loading-spinner-large"></div>
-            <p className="loading-text">正在注册...</p>
-          </div>
-        </div>
-      )}
-      
-      <div className="register-content">
-        <div className="register-card">
-          {/* 成功提示 */}
-          {successAlert.visible && (
-            <div style={{ marginBottom: '16px' }}>
-              <Alert
-                message={successAlert.message}
-                type="success"
-                icon={<CheckCircleOutlined />}
-                showIcon
-                closable
-                onClose={() => setSuccessAlert({ visible: false, message: '' })}
-                style={{
-                  borderRadius: '8px',
-                  border: '1px solid #b7eb8f',
-                  backgroundColor: '#f6ffed'
-                }}
-              />
-            </div>
-          )}
-
-          {/* 邮件验证码发送成功提示 */}
-          {emailCodeSuccessAlert.visible && (
-            <div style={{ marginBottom: '16px' }}>
-              <Alert
-                message={emailCodeSuccessAlert.message}
-                type="success"
-                icon={<CheckCircleOutlined />}
-                showIcon
-                closable
-                onClose={() => setEmailCodeSuccessAlert({ visible: false, message: '' })}
-                style={{
-                  borderRadius: '8px',
-                  border: '1px solid #b7eb8f',
-                  backgroundColor: '#f6ffed'
-                }}
-              />
-            </div>
-          )}
-          
-          <div className="register-header">
-            <h1 className="register-title">加入小红书</h1>
-            <p className="register-subtitle">发现美好生活，分享精彩瞬间</p>
-          </div>
-
-          <form className="register-form" onSubmit={handleSubmit}>
-            <div className="form-group">
-              <Input
-                type="text"
-                id="username"
-                name="username"
-                className={`form-input ${errors.username ? 'input-error' : ''}`}
-                placeholder="请输入用户名"
-                value={formData.username}
-                onChange={handleInputChange('username')}
-                prefix={<UserOutlined />}
-                size="large"
-                title=""
-                status={errors.username ? 'error' : ''}
-              />
-              {errors.username && (
-                <div className="error-message">
-                  {errors.username}
-                </div>
-              )}
-            </div>
-
-            <div className="form-group">
-              <Input
-                type="email"
-                id="email"
-                name="email"
-                className={`form-input ${errors.email ? 'input-error' : ''}`}
-                placeholder="请输入邮箱地址"
-                value={formData.email}
-                onChange={handleInputChange('email')}
-                prefix={<MailOutlined />}
-                size="large"
-                title=""
-                status={errors.email ? 'error' : ''}
-              />
-              {errors.email && (
-                <div className="error-message">
-                  {errors.email}
-                </div>
-              )}
-            </div>
-
-            <div className="form-group">
-              <div className="email-code-wrapper">
-                <Input
-                  type="text"
-                  id="emailCode"
-                  name="emailCode"
-                  className={`form-input email-code-input ${errors.emailCode ? 'input-error' : ''}`}
-                  placeholder="请输入6位验证码"
-                  value={formData.emailCode}
-                  onChange={handleInputChange('emailCode')}
-                  prefix={<SafetyOutlined />}
-                  maxLength={6}
-                  size="large"
-                  title=""
-                  status={errors.emailCode ? 'error' : ''}
-                />
-                <Button
-                  type="primary"
-                  className="send-code-button"
-                  onClick={sendEmailCode}
-                  loading={sendingCode}
-                  disabled={countdown > 0 || !formData.email || sendingCode}
-                  size="large"
-                >
-                  {countdown > 0 ? `${countdown}s后重发` : (emailCodeSent ? '重新发送' : '发送验证码')}
-                </Button>
-              </div>
-              {errors.emailCode && (
-                <div className="error-message">
-                  {errors.emailCode}
-                </div>
-              )}
-            </div>
-
-            <div className="form-group">
-              <Input.Password
-                id="password"
-                name="password"
-                className={`form-input ${errors.password ? 'input-error' : ''}`}
-                placeholder="请输入密码"
-                value={formData.password}
-                onChange={handlePasswordChange}
-                prefix={<LockOutlined />}
-                size="large"
-                title=""
-                status={errors.password ? 'error' : ''}
-              />
-              {errors.password && (
-                <div className="error-message">
-                  {errors.password}
-                </div>
-              )}
-            </div>
-
-            <div className="form-group">
-              <Input.Password
-                id="confirmPassword"
-                name="confirmPassword"
-                className={`form-input ${errors.confirmPassword ? 'input-error' : ''}`}
-                placeholder="请确认密码"
-                value={formData.confirmPassword}
-                onChange={handleConfirmPasswordChange}
-                prefix={<LockOutlined />}
-                size="large"
-                title=""
-                status={errors.confirmPassword ? 'error' : ''}
-              />
-              {errors.confirmPassword && (
-                <div className="error-message">
-                  {errors.confirmPassword}
-                </div>
-              )}
-            </div>
-
-            <button
-              type="submit"
-              className={`register-button ${isLoading ? 'loading' : ''}`}
-              disabled={isLoading}
-            >
-              {isLoading ? (
-                <>
-                  <div className="loading-spinner"></div>
-                  注册中...
-                </>
-              ) : (
-                '立即注册'
-              )}
-            </button>
-          </form>
-
-          <div className="login-link">
-            <p>已有账户？ <Link to="/login">立即登录</Link></p>
-          </div>
-        </div>
-      </div>
-
-      {/* 错误弹窗 */}
-      <Modal
-        title={
-          <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
-            <ExclamationCircleOutlined style={{ color: '#ff4d4f', fontSize: '18px' }} />
-            {errorModal.title}
-          </div>
-        }
-        open={errorModal.visible}
-        onOk={closeErrorModal}
-        onCancel={closeErrorModal}
-        okText="我知道了"
-        cancelButtonProps={{ style: { display: 'none' } }}
-        centered
-        className="error-modal"
-      >
-        <div style={{ padding: '16px 0', fontSize: '14px', lineHeight: '1.6' }}>
-          {errorModal.content}
-        </div>
-      </Modal>
-    </div>
-  );
-};
-
-export default RegisterPage;
diff --git a/rhj/frontend/src/pages/TestDashboard/TestDashboard.css b/rhj/frontend/src/pages/TestDashboard/TestDashboard.css
deleted file mode 100644
index a9e1c80..0000000
--- a/rhj/frontend/src/pages/TestDashboard/TestDashboard.css
+++ /dev/null
@@ -1,189 +0,0 @@
-.test-dashboard {
-  min-height: 100vh;
-  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-  padding: 20px;
-}
-
-.dashboard-header {
-  text-align: center;
-  margin-bottom: 30px;
-  color: white;
-}
-
-.dashboard-header h1 {
-  font-size: 2.5rem;
-  margin-bottom: 10px;
-  text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
-}
-
-.dashboard-header p {
-  font-size: 1.1rem;
-  opacity: 0.9;
-}
-
-.dashboard-content {
-  max-width: 1200px;
-  margin: 0 auto;
-  display: flex;
-  flex-direction: column;
-  gap: 20px;
-}
-
-.user-info-card,
-.token-info-card,
-.api-test-card {
-  background: white;
-  border-radius: 12px;
-  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
-  border: none;
-}
-
-.user-info-card .ant-card-head {
-  background: linear-gradient(90deg, #4f46e5 0%, #7c3aed 100%);
-  border-radius: 12px 12px 0 0;
-  border-bottom: none;
-}
-
-.user-info-card .ant-card-head-title {
-  color: white;
-  font-weight: 600;
-}
-
-.user-info-card .ant-card-extra .ant-btn {
-  color: white;
-  border-color: rgba(255, 255, 255, 0.3);
-}
-
-.user-info-card .ant-card-extra .ant-btn:hover {
-  background: rgba(255, 255, 255, 0.1);
-  border-color: rgba(255, 255, 255, 0.5);
-}
-
-.user-info-card .ant-card-extra .ant-btn-danger {
-  background: #ef4444;
-  border-color: #ef4444;
-}
-
-.user-info-card .ant-card-extra .ant-btn-danger:hover {
-  background: #dc2626;
-  border-color: #dc2626;
-}
-
-.token-info-card .ant-card-head {
-  background: linear-gradient(90deg, #059669 0%, #0d9488 100%);
-  border-radius: 12px 12px 0 0;
-  border-bottom: none;
-}
-
-.token-info-card .ant-card-head-title {
-  color: white;
-  font-weight: 600;
-}
-
-.api-test-card .ant-card-head {
-  background: linear-gradient(90deg, #ea580c 0%, #dc2626 100%);
-  border-radius: 12px 12px 0 0;
-  border-bottom: none;
-}
-
-.api-test-card .ant-card-head-title {
-  color: white;
-  font-weight: 600;
-}
-
-.token-display {
-  background: #f8fafc;
-  padding: 20px;
-  border-radius: 8px;
-  border: 1px solid #e2e8f0;
-}
-
-.token-text {
-  background: #1e293b;
-  color: #10b981;
-  padding: 12px;
-  border-radius: 6px;
-  font-family: 'Courier New', monospace;
-  font-size: 14px;
-  word-break: break-all;
-  margin: 10px 0;
-  border: 1px solid #334155;
-}
-
-.token-note {
-  color: #64748b;
-  font-size: 12px;
-  font-style: italic;
-  margin: 10px 0 0 0;
-}
-
-.loading-container {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  height: 100vh;
-  color: white;
-}
-
-.spinner {
-  width: 40px;
-  height: 40px;
-  border: 4px solid rgba(255, 255, 255, 0.3);
-  border-left-color: white;
-  border-radius: 50%;
-  animation: spin 1s linear infinite;
-  margin-bottom: 20px;
-}
-
-@keyframes spin {
-  to {
-    transform: rotate(360deg);
-  }
-}
-
-.loading-container p {
-  font-size: 1.1rem;
-  opacity: 0.9;
-}
-
-/* 响应式设计 */
-@media (max-width: 768px) {
-  .test-dashboard {
-    padding: 10px;
-  }
-  
-  .dashboard-header h1 {
-    font-size: 2rem;
-  }
-  
-  .dashboard-content {
-    gap: 15px;
-  }
-  
-  .user-info-card .ant-card-extra {
-    flex-direction: column;
-    gap: 8px;
-  }
-  
-  .token-text {
-    font-size: 12px;
-  }
-}
-
-/* Ant Design 组件样式覆写 */
-.ant-descriptions-item-label {
-  font-weight: 600;
-  color: #374151;
-  background: #f9fafb;
-}
-
-.ant-descriptions-item-content {
-  color: #111827;
-}
-
-.ant-tag {
-  font-weight: 500;
-  border-radius: 6px;
-  padding: 2px 8px;
-}
diff --git a/rhj/frontend/src/pages/TestDashboard/TestDashboard.js b/rhj/frontend/src/pages/TestDashboard/TestDashboard.js
deleted file mode 100644
index 0ecaaf4..0000000
--- a/rhj/frontend/src/pages/TestDashboard/TestDashboard.js
+++ /dev/null
@@ -1,295 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import { Card, Button, Descriptions, Avatar, Tag, Space, message } from 'antd';
-import { UserOutlined, LogoutOutlined, ReloadOutlined } from '@ant-design/icons';
-import { getUserInfo, getAuthToken, isLoggedIn, saveAuthInfo, createAuthenticatedRequest } from '../../utils/auth';
-import LogoutButton from '../../components/LogoutButton/LogoutButton';
-import './TestDashboard.css';
-
-const TestDashboard = () => {
-  const [userInfo, setUserInfo] = useState(null);
-  const [token, setToken] = useState(null);
-  const [loading, setLoading] = useState(false);
-  const [jwtTestLoading, setJwtTestLoading] = useState(false);
-
-  useEffect(() => {
-    // 检查用户是否已登录
-    if (!isLoggedIn()) {
-      window.location.href = '/';
-      return;
-    }
-
-    // 获取用户信息和token
-    const authToken = getAuthToken();
-    const authUserInfo = getUserInfo();
-    
-    setToken(authToken);
-    setUserInfo(authUserInfo);
-  }, []);
-
-  const handleRefreshProfile = async () => {
-    if (!token) {
-      message.error('未找到认证token');
-      return;
-    }
-
-    setLoading(true);
-    try {
-      const response = await fetch('http://10.126.59.25:8082/profile', createAuthenticatedRequest());
-
-      const result = await response.json();
-      
-      if (result.success) {
-        setUserInfo(result.user);
-        // 更新存储的用户信息，保持原有的存储方式（localStorage或sessionStorage）
-        const isRemembered = localStorage.getItem('authToken');
-        saveAuthInfo(token, result.user, !!isRemembered);
-        message.success('用户信息刷新成功');
-      } else {
-        message.error(`获取用户信息失败: ${result.message}`);
-      }
-    } catch (error) {
-      console.error('刷新用户信息失败:', error);
-      message.error('网络连接失败');
-    } finally {
-      setLoading(false);
-    }
-  };
-
-  const handleLogout = async () => {
-    if (!token) {
-      // 清除存储并跳转
-      localStorage.removeItem('authToken');
-      localStorage.removeItem('userInfo');
-      sessionStorage.removeItem('authToken');
-      sessionStorage.removeItem('userInfo');
-      window.location.href = '/';
-      return;
-    }
-
-    try {
-      const response = await fetch('http://10.126.59.25:8082/logout', {
-        method: 'POST',
-        headers: {
-          'Authorization': `Bearer ${token}`,
-          'Content-Type': 'application/json',
-        }
-      });
-
-      const result = await response.json();
-      
-      if (result.success) {
-        message.success('退出登录成功');
-      } else {
-        message.warning(`退出登录: ${result.message}`);
-      }
-    } catch (error) {
-      console.error('退出登录请求失败:', error);
-      message.warning('网络请求失败，但将清除本地数据');
-    } finally {
-      // 无论请求成功与否，都清除本地存储并跳转
-      localStorage.removeItem('authToken');
-      localStorage.removeItem('userInfo');
-      sessionStorage.removeItem('authToken');
-      sessionStorage.removeItem('userInfo');
-      window.location.href = '/';
-    }
-  };
-
-  const handleTestJWT = async () => {
-    if (!token) {
-      message.error('未找到认证token');
-      return;
-    }
-
-    setJwtTestLoading(true);
-    try {
-      const response = await fetch('http://10.126.59.25:8082/test-jwt', {
-        method: 'POST',
-        headers: {
-          'Authorization': `Bearer ${token}`,
-          'Content-Type': 'application/json',
-        },
-        body: JSON.stringify({
-          token: token, // 可选：在请求体中也发送token进行额外验证
-          test_purpose: 'frontend_jwt_test'
-        })
-      });
-
-      const result = await response.json();
-      
-      if (result.success) {
-        message.success(`JWT令牌验证成功！用户: ${result.user.username}`);
-        console.log('JWT验证详细结果:', result);
-        
-        // 如果有额外的token验证结果，也显示出来
-        if (result.additional_token_verification) {
-          console.log('额外token验证:', result.additional_token_verification);
-        }
-      } else {
-        message.error(`JWT令牌验证失败: ${result.message}`);
-      }
-    } catch (error) {
-      console.error('JWT令牌验证失败:', error);
-      message.error('网络连接失败');
-    } finally {
-      setJwtTestLoading(false);
-    }
-  };
-
-  const getRoleColor = (role) => {
-    switch (role) {
-      case 'superadmin':
-        return 'red';
-      case 'admin':
-        return 'orange';
-      case 'user':
-      default:
-        return 'blue';
-    }
-  };
-
-  const getStatusColor = (status) => {
-    switch (status) {
-      case 'active':
-        return 'green';
-      case 'banned':
-        return 'red';
-      case 'muted':
-        return 'orange';
-      default:
-        return 'default';
-    }
-  };
-
-  if (!userInfo) {
-    return (
-      <div className="test-dashboard">
-        <div className="loading-container">
-          <div className="spinner"></div>
-          <p>加载用户信息中...</p>
-        </div>
-      </div>
-    );
-  }
-
-  return (
-    <div className="test-dashboard">
-      <div className="dashboard-header">
-        <h1>测试仪表板</h1>
-        <p>登录成功！以下是从后端返回的用户信息：</p>
-      </div>
-
-      <div className="dashboard-content">
-        <Card
-          title={
-            <Space>
-              <Avatar size={40} icon={<UserOutlined />} src={userInfo.avatar} />
-              <span>用户信息</span>
-            </Space>
-          }
-          extra={
-            <Space>
-              <Button 
-                type="primary" 
-                icon={<ReloadOutlined />}
-                loading={loading}
-                onClick={handleRefreshProfile}
-              >
-                刷新信息
-              </Button>
-              <LogoutButton onLogout={() => window.location.href = '/'} />
-            </Space>
-          }
-          className="user-info-card"
-        >
-          <Descriptions column={2} bordered>
-            <Descriptions.Item label="用户ID">{userInfo.id}</Descriptions.Item>
-            <Descriptions.Item label="用户名">{userInfo.username}</Descriptions.Item>
-            <Descriptions.Item label="邮箱">{userInfo.email}</Descriptions.Item>
-            <Descriptions.Item label="角色">
-              <Tag color={getRoleColor(userInfo.role)}>
-                {userInfo.role}
-              </Tag>
-            </Descriptions.Item>
-            <Descriptions.Item label="账号状态">
-              <Tag color={getStatusColor(userInfo.status)}>
-                {userInfo.status}
-              </Tag>
-            </Descriptions.Item>
-            <Descriptions.Item label="个人简介" span={2}>
-              {userInfo.bio || '暂无个人简介'}
-            </Descriptions.Item>
-            <Descriptions.Item label="创建时间">
-              {userInfo.created_at ? new Date(userInfo.created_at).toLocaleString() : '未知'}
-            </Descriptions.Item>
-            <Descriptions.Item label="更新时间">
-              {userInfo.updated_at ? new Date(userInfo.updated_at).toLocaleString() : '未知'}
-            </Descriptions.Item>
-          </Descriptions>
-        </Card>
-
-        <Card title="登录状态信息" className="login-status-card">
-          <div className="login-status-display">
-            <Descriptions column={1} bordered>
-              <Descriptions.Item label="登录方式">
-                <Tag color={localStorage.getItem('authToken') ? 'green' : 'blue'}>
-                  {localStorage.getItem('authToken') ? '记住我登录 (持久化)' : '普通登录 (会话)'}
-                </Tag>
-              </Descriptions.Item>
-              <Descriptions.Item label="Token存储位置">
-                {localStorage.getItem('authToken') ? 'localStorage (浏览器关闭后仍保持登录)' : 'sessionStorage (浏览器关闭后需重新登录)'}
-              </Descriptions.Item>
-              <Descriptions.Item label="记住的登录信息">
-                {localStorage.getItem('rememberMe') === 'true' ? 
-                  `已保存邮箱: ${localStorage.getItem('rememberedEmail') || '无'}` : 
-                  '未保存登录信息'
-                }
-              </Descriptions.Item>
-            </Descriptions>
-          </div>
-        </Card>
-
-        <Card title="Token信息" className="token-info-card">
-          <div className="token-display">
-            <p><strong>认证Token:</strong></p>
-            <div className="token-text">
-              {token ? `${token.substring(0, 50)}...` : '未找到token'}
-            </div>
-            <p className="token-note">
-              * Token已被安全截断显示，完整token存储在浏览器存储中
-            </p>
-          </div>
-        </Card>
-
-        <Card title="API测试" className="api-test-card">
-          <Space direction="vertical" style={{ width: '100%' }}>
-            <p>您可以使用以下按钮测试不同的API接口：</p>
-            <Space wrap>
-              <Button onClick={handleRefreshProfile} loading={loading}>
-                测试 GET /profile
-              </Button>
-              <Button onClick={handleLogout}>
-                测试 POST /logout
-              </Button>
-              <Button 
-                onClick={handleTestJWT} 
-                loading={jwtTestLoading}
-                type="primary"
-              >
-                测试 POST /test-jwt
-              </Button>
-              <Button 
-                type="dashed"
-                onClick={() => window.open('http://10.126.59.25:8082/health', '_blank')}
-              >
-                测试 GET /health
-              </Button>
-            </Space>
-          </Space>
-        </Card>
-      </div>
-    </div>
-  );
-};
-
-export default TestDashboard;
diff --git a/rhj/frontend/src/utils/auth.js b/rhj/frontend/src/utils/auth.js
deleted file mode 100644
index d04e102..0000000
--- a/rhj/frontend/src/utils/auth.js
+++ /dev/null
@@ -1,155 +0,0 @@
-// 认证相关的工具函数
-
-/**
- * 获取当前用户的认证token
- * @returns {string|null} 认证token，如果未登录则返回null
- */
-export const getAuthToken = () => {
-  // 优先从localStorage获取（记住我的情况）
-  const localToken = localStorage.getItem('authToken');
-  if (localToken) {
-    return localToken;
-  }
-  
-  // 然后从sessionStorage获取（不记住我的情况）
-  const sessionToken = sessionStorage.getItem('authToken');
-  return sessionToken;
-};
-
-/**
- * 获取当前用户信息
- * @returns {object|null} 用户信息，如果未登录则返回null
- */
-export const getUserInfo = () => {
-  // 优先从localStorage获取
-  const localUserInfo = localStorage.getItem('userInfo');
-  if (localUserInfo) {
-    try {
-      return JSON.parse(localUserInfo);
-    } catch (error) {
-      console.error('解析localStorage中的用户信息失败:', error);
-    }
-  }
-  
-  // 然后从sessionStorage获取
-  const sessionUserInfo = sessionStorage.getItem('userInfo');
-  if (sessionUserInfo) {
-    try {
-      return JSON.parse(sessionUserInfo);
-    } catch (error) {
-      console.error('解析sessionStorage中的用户信息失败:', error);
-    }
-  }
-  
-  return null;
-};
-
-/**
- * 检查用户是否已登录
- * @returns {boolean} 是否已登录
- */
-export const isLoggedIn = () => {
-  const token = getAuthToken();
-  return !!token;
-};
-
-/**
- * 获取记住的登录信息
- * @returns {object} 包含email, password, rememberMe的对象
- */
-export const getRememberedLoginInfo = () => {
-  const email = localStorage.getItem('rememberedEmail') || '';
-  const password = localStorage.getItem('rememberedPassword') || '';
-  const rememberMe = localStorage.getItem('rememberMe') === 'true';
-  
-  return {
-    email,
-    password,
-    rememberMe
-  };
-};
-
-/**
- * 保存记住的登录信息
- * @param {string} email 邮箱
- * @param {string} password 密码
- * @param {boolean} remember 是否记住
- */
-export const saveRememberedLoginInfo = (email, password, remember) => {
-  if (remember) {
-    localStorage.setItem('rememberedEmail', email);
-    localStorage.setItem('rememberedPassword', password);
-    localStorage.setItem('rememberMe', 'true');
-  } else {
-    localStorage.removeItem('rememberedEmail');
-    localStorage.removeItem('rememberedPassword');
-    localStorage.removeItem('rememberMe');
-  }
-};
-
-/**
- * 保存用户认证信息
- * @param {string} token 认证token
- * @param {object} userInfo 用户信息
- * @param {boolean} remember 是否记住登录状态
- */
-export const saveAuthInfo = (token, userInfo, remember = false) => {
-  if (remember) {
-    // 记住我：保存到localStorage
-    localStorage.setItem('authToken', token);
-    localStorage.setItem('userInfo', JSON.stringify(userInfo));
-    
-    // 清除sessionStorage
-    sessionStorage.removeItem('authToken');
-    sessionStorage.removeItem('userInfo');
-  } else {
-    // 不记住我：保存到sessionStorage
-    sessionStorage.setItem('authToken', token);
-    sessionStorage.setItem('userInfo', JSON.stringify(userInfo));
-    
-    // 清除localStorage中的认证信息（但保留记住的登录表单信息）
-    localStorage.removeItem('authToken');
-    localStorage.removeItem('userInfo');
-  }
-};
-
-/**
- * 清除所有认证信息（退出登录）
- * @param {boolean} clearRemembered 是否同时清除记住的登录信息
- */
-export const clearAuthInfo = (clearRemembered = false) => {
-  // 清除认证token和用户信息
-  localStorage.removeItem('authToken');
-  localStorage.removeItem('userInfo');
-  sessionStorage.removeItem('authToken');
-  sessionStorage.removeItem('userInfo');
-  
-  // 如果需要，清除记住的登录信息
-  if (clearRemembered) {
-    localStorage.removeItem('rememberedEmail');
-    localStorage.removeItem('rememberedPassword');
-    localStorage.removeItem('rememberMe');
-  }
-};
-
-/**
- * 创建带认证头的fetch请求配置
- * @param {object} options 原始fetch配置
- * @returns {object} 带认证头的fetch配置
- */
-export const createAuthenticatedRequest = (options = {}) => {
-  const token = getAuthToken();
-  
-  if (!token) {
-    throw new Error('用户未登录');
-  }
-  
-  return {
-    ...options,
-    headers: {
-      ...options.headers,
-      'Authorization': `Bearer ${token}`,
-      'Content-Type': 'application/json'
-    }
-  };
-};
diff --git a/rhj/frontend/src/utils/crypto.js b/rhj/frontend/src/utils/crypto.js
deleted file mode 100644
index eac10f0..0000000
--- a/rhj/frontend/src/utils/crypto.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// 密码加密工具函数
-import CryptoJS from 'crypto-js';
-
-/**
- * 使用 SHA256 加密密码
- * @param {string} password 原始密码
- * @returns {string} 加密后的密码
- */
-export const hashPassword = (password) => {
-  if (!password || typeof password !== 'string') {
-    throw new Error('密码必须是非空字符串');
-  }
-  
-  return CryptoJS.SHA256(password).toString();
-};
-
-/**
- * 验证密码是否已经被加密
- * @param {string} password 密码字符串
- * @returns {boolean} 是否为已加密的密码（64位十六进制字符串）
- */
-export const isEncryptedPassword = (password) => {
-  if (!password || typeof password !== 'string') {
-    return false;
-  }
-  
-  // SHA256 加密后是64位十六进制字符串
-  return /^[a-f0-9]{64}$/i.test(password);
-};
-
-/**
- * 安全的密码加密函数，避免重复加密
- * @param {string} password 密码
- * @returns {string} 加密后的密码
- */
-export const safeHashPassword = (password) => {
-  if (!password) {
-    throw new Error('密码不能为空');
-  }
-  
-  // 如果已经是加密的密码，直接返回
-  if (isEncryptedPassword(password)) {
-    return password;
-  }
-  
-  // 否则进行加密
-  return hashPassword(password);
-};
