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
