diff --git a/Merge/front/src/components/HomeFeed.jsx b/Merge/front/src/components/HomeFeed.jsx
index 2e42621..82e027a 100644
--- a/Merge/front/src/components/HomeFeed.jsx
+++ b/Merge/front/src/components/HomeFeed.jsx
@@ -259,8 +259,8 @@
             return {
               id:     d.id,
               title:  d.title,
-              authorId: d.user_id,
-              avatar: `https://i.pravatar.cc/40?img=${d.user_id}`,
+              author: `作者 ${d.user_id}`,
+              // avatar: `https://i.pravatar.cc/40?img=${d.user_id}`,
               img:    d.media_urls?.[0] || '', // 用第一张媒体作为封面
               likes:  d.heat
             }
diff --git a/Merge/front/src/components/PerformanceLogs.js b/Merge/front/src/components/PerformanceLogs.js
index 00f7e7d..f87ef7a 100644
--- a/Merge/front/src/components/PerformanceLogs.js
+++ b/Merge/front/src/components/PerformanceLogs.js
@@ -8,11 +8,29 @@
 function PerformanceLogs({ userId }) {
   const [data, setData] = useState([]);
   const [loading, setLoading] = useState(true);
+  const [unauthorized, setUnauthorized] = useState(false);
 
   useEffect(() => {
     setLoading(true);
     fetchSysCost(userId)
-      .then(list => {
+      .then(result => {
+        // 检查是否是权限错误
+        if (result && result.status === 'error' && result.message === 'Unauthorized') {
+          setUnauthorized(true);
+          setData([]);
+          return;
+        }
+        
+        // 确保数据是数组格式
+        let list = [];
+        if (Array.isArray(result)) {
+          list = result;
+        } else if (Array.isArray(result.data)) {
+          list = result.data;
+        } else if (Array.isArray(result.syscost)) {
+          list = result.syscost;
+        }
+        
         const msList = list.map(item => ({
           ...item,
           elapsed_time: item.elapsed_time * 1000,
@@ -23,8 +41,15 @@
         }));
         console.log('Converted data:', msList[0]); // debug first item
         setData(msList);
+        setUnauthorized(false);
       })
-      .catch(err => console.error('fetchSysCost error:', err))
+      .catch(err => {
+        console.error('fetchSysCost error:', err);
+        if (err.message === 'Unauthorized') {
+          setUnauthorized(true);
+          setData([]);
+        }
+      })
       .finally(() => setLoading(false));
   }, [userId]);
 
@@ -58,6 +83,35 @@
     );
   }
 
+  if (unauthorized) {
+    return (
+      <section className="dashboard-performance">
+        <div style={{ 
+          display: 'flex', 
+          justifyContent: 'center', 
+          alignItems: 'center', 
+          height: '400px',
+          flexDirection: 'column',
+          textAlign: 'center'
+        }}>
+          <div style={{ 
+            fontSize: '18px',
+            color: '#ff4d4f',
+            marginBottom: '10px'
+          }}>
+            权限不足，无法访问性能监控数据
+          </div>
+          <div style={{ 
+            fontSize: '14px',
+            color: '#666'
+          }}>
+            请联系管理员获取相应权限
+          </div>
+        </div>
+      </section>
+    );
+  }
+
   return (
     <section className="dashboard-performance">
       {/* 响应时间图表 */}
diff --git a/Merge/front/src/components/UserManagement.js b/Merge/front/src/components/UserManagement.js
index bed6b8f..8eb48e3 100644
--- a/Merge/front/src/components/UserManagement.js
+++ b/Merge/front/src/components/UserManagement.js
@@ -19,16 +19,41 @@
   const { userId: superAdminId } = useParams()
 
   const [users, setUsers] = useState([])
+  const [unauthorized, setUnauthorized] = useState(false)
 
   useEffect(() => {
     async function load() {
       try {
         // 调用接口获取用户列表
         const data = await fetchUserList(superAdminId)
-        setUsers(data)
+        
+        // 检查是否是权限错误
+        if (data && data.status === 'error' && data.message === 'Unauthorized') {
+          setUnauthorized(true)
+          setUsers([])
+          return
+        }
+        
+        // 确保数据是数组格式
+        let userList = []
+        if (Array.isArray(data)) {
+          userList = data
+        } else if (Array.isArray(data.data)) {
+          userList = data.data
+        } else if (Array.isArray(data.users)) {
+          userList = data.users
+        }
+        
+        setUsers(userList)
+        setUnauthorized(false)
       } catch (e) {
         console.error(e)
-        message.error('获取用户列表失败：' + e.message)
+        if (e.message === 'Unauthorized') {
+          setUnauthorized(true)
+          setUsers([])
+        } else {
+          message.error('获取用户列表失败：' + e.message)
+        }
       }
     }
 
@@ -41,13 +66,22 @@
   // 处理角色变更
   const handleRoleChange = async (userId, newRole) => {
     try {
+      let result
       if (newRole === '用户') {
-        await giveUser(superAdminId, userId)
+        result = await giveUser(userId)
       } else if (newRole === '管理员') {
-        await giveAdmin(superAdminId, userId)
+        result = await giveAdmin(userId)
       } else if (newRole === '超级管理员') {
-        await giveSuperAdmin(superAdminId, userId)
+        result = await giveSuperAdmin(userId)
       }
+      
+      // 检查返回结果是否有权限错误
+      if (result && result.status === 'error' && result.message === 'Unauthorized') {
+        setUnauthorized(true)
+        message.error('权限不足，无法执行此操作')
+        return
+      }
+      
       // 本地更新状态
       setUsers(us =>
         us.map(u => (u.id === userId ? { ...u, role: newRole } : u))
@@ -55,7 +89,12 @@
       message.success('修改成功')
     } catch (e) {
       console.error(e)
-      message.error('修改失败：' + e.message)
+      if (e.message === 'Unauthorized') {
+        setUnauthorized(true)
+        message.error('权限不足，无法执行此操作')
+      } else {
+        message.error('修改失败：' + e.message)
+      }
     }
   }
 
@@ -91,12 +130,23 @@
 
   return (
     <div className="admin-container">
-      <Table
-        dataSource={users}
-        columns={columns}
-        rowKey="id"
-        pagination={false}
-      />
+      {unauthorized ? (
+        <div style={{ 
+          textAlign: 'center', 
+          padding: '50px', 
+          fontSize: '18px',
+          color: '#ff4d4f'
+        }}>
+          权限不足，无法访问用户管理功能
+        </div>
+      ) : (
+        <Table
+          dataSource={users}
+          columns={columns}
+          rowKey="id"
+          pagination={false}
+        />
+      )}
     </div>
   )
 }
diff --git a/Merge/front/src/components/UserProfile.jsx b/Merge/front/src/components/UserProfile.jsx
index 6cddcbd..c957473 100644
--- a/Merge/front/src/components/UserProfile.jsx
+++ b/Merge/front/src/components/UserProfile.jsx
@@ -30,14 +30,15 @@
   CircularProgress,
   Snackbar,
   Alert,
-  Menu
+  Menu,
+  Pagination,
+  Stack
 } from '@mui/material';
 import { useParams } from 'react-router-dom';
 import { 
   CameraAlt, 
   Edit, 
   Favorite, 
-  Bookmark, 
   Share, 
   MoreVert, 
   LocationOn, 
@@ -50,11 +51,9 @@
   Notifications,
   Person,
   Collections,
-  Group,
   ChevronLeft,
   ChevronRight,
-  Close,
-  People
+  Close
 } from '@mui/icons-material';
 import { createTheme, ThemeProvider } from '@mui/material/styles';
 import { Link, useNavigate } from 'react-router-dom';
@@ -64,14 +63,12 @@
   getCurrentUser, 
   getUser, 
   updateUser as updateUserApi,
-  getFavorites,
   followUser as followUserApi,
   unfollowUser as unfollowUserApi,
   getUserPosts,
-  getUserFollowing,
-  getUserInteractions,
-  getUserFollowers
+  getUserInteractions
 } from '../api/api_ljc';
+import { fetchPost } from '../api/posts_wzy';
 
 // 创建小红书主题
 const theme = createTheme({
@@ -122,21 +119,24 @@
   const navigate = useNavigate();
   const [activeTab, setActiveTab] = useState(0);
   const [isEditing, setIsEditing] = useState(false);
-  const [followers, setFollowers] = useState([]);
   const [snackbar, setSnackbar] = useState({ open: false, message: '', severity: 'success' });
   const [anchorEl, setAnchorEl] = useState(null);
   
   // 用户数据状态
   const [currentUser, setCurrentUser] = useState(null);
   const [profileUser, setProfileUser] = useState(null);
-  const [favorites, setFavorites] = useState([]);
-  const [following, setFollowing] = useState([]);
   const [posts, setPosts] = useState([]);
+  const [allPosts, setAllPosts] = useState([]); // 存储所有帖子数据
   const [interactions, setInteractions] = useState({ 
     likes_count: 0, 
     favorites_count: 0 
   });
   
+  // 分页状态
+  const [currentPage, setCurrentPage] = useState(1);
+  const [postsPerPage] = useState(8); // 每页显示8个帖子
+  const [totalPages, setTotalPages] = useState(0);
+  
   // 加载状态
   const [loading, setLoading] = useState(true);
   const [updating, setUpdating] = useState(false);
@@ -158,6 +158,30 @@
     setSnackbar({ open: true, message, severity });
   };
 
+  // 分页处理函数
+  const updatePaginatedPosts = (page, allPostsData) => {
+    const startIndex = (page - 1) * postsPerPage;
+    const endIndex = startIndex + postsPerPage;
+    const paginatedPosts = allPostsData.slice(startIndex, endIndex);
+    setPosts(paginatedPosts);
+    setTotalPages(Math.ceil(allPostsData.length / postsPerPage));
+  };
+
+  const handlePageChange = (newPage) => {
+    if (newPage >= 1 && newPage <= totalPages) {
+      setCurrentPage(newPage);
+      updatePaginatedPosts(newPage, allPosts);
+    }
+  };
+
+  const handlePrevPage = () => {
+    handlePageChange(currentPage - 1);
+  };
+
+  const handleNextPage = () => {
+    handlePageChange(currentPage + 1);
+  };
+
   // 加载用户数据
   useEffect(() => {
     const fetchInteractions = async () => {
@@ -181,9 +205,9 @@
       showSnackbar('关注成功');
       
       // 更新粉丝列表状态（将刚关注的用户标记为已关注）
-      setFollowers(prev => prev.map(user => 
-        user.id === followeeId ? { ...user, is_following: true } : user
-      ));
+      // setFollowers(prev => prev.map(user => 
+      //   user.id === followeeId ? { ...user, is_following: true } : user
+      // ));
       
       // 更新当前用户关注数
       if (currentUser) {
@@ -220,7 +244,31 @@
         
         // 获取用户帖子
         const postsRes = await getUserPosts(userId);
-        setPosts(postsRes.data);
+        
+        // 为了拿到 media_urls，这里需要拉取每个帖子的详情
+        const postsWithDetails = await Promise.all(
+          postsRes.data.map(async post => {
+            try {
+              const detail = await fetchPost(post.id);
+              return {
+                ...post,
+                media_urls: detail.media_urls || [],
+                user_id: detail.user_id
+              };
+            } catch (error) {
+              console.error(`获取帖子 ${post.id} 详情失败:`, error);
+              return {
+                ...post,
+                media_urls: [],
+                user_id: null
+              };
+            }
+          })
+        );
+        
+        setAllPosts(postsWithDetails); // 存储所有帖子
+        updatePaginatedPosts(1, postsWithDetails); // 初始化第一页数据
+        setCurrentPage(1); // 重置到第一页
         
         // 获取用户互动数据（获赞和收藏数量）
         const interactionsRes = await getUserInteractions(userId);
@@ -239,41 +287,11 @@
 
   // 根据标签页加载数据
   useEffect(() => {
-    const fetchTabData = async () => {
-      if (!profileUser) return;
-      
-      try {
-        setTabLoading(true);
-        
-        if (activeTab === 1) {
-          // 加载收藏数据
-          const favoritesRes = await getFavorites(userId);
-          setFavorites(favoritesRes.data);
-        } else if (activeTab === 2) {
-          // 加载关注列表
-          const followingRes = await getUserFollowing(userId);
-          setFollowing(followingRes.data);
-          console.log(followingRes.data)
-        }  else if (activeTab === 3) {
-          // 加载粉丝列表
-          const followersRes = await getUserFollowers(userId);
-          // 
-          setFollowers(followersRes.data.data);
-          console.log(followersRes.data.data)
-        }
-        
-      } catch (error) {
-        console.error('加载数据失败:', error);
-        showSnackbar('加载数据失败，请重试', 'error');
-      } finally {
-        setTabLoading(false);
-      }
-    };
-    
-    fetchTabData();
+    // 由于只有笔记标签页，不需要根据activeTab加载不同数据
   }, [activeTab, userId, profileUser]);
 
   const handleTabChange = (event, newValue) => {
+    // 由于只有一个标签页，不需要切换逻辑
     setActiveTab(newValue);
   };
 
@@ -290,15 +308,6 @@
       // 更新用户信息
       const updatedUser = await getUser(userId);
       setProfileUser(updatedUser.data);
-      // 关注/取关后强制刷新关注和粉丝列表，保证页面和数据库同步
-      if (activeTab === 2) {
-        const followingRes = await getUserFollowing(userId);
-        setFollowing(followingRes.data);
-      }
-      if (activeTab === 3) {
-        const followersRes = await getUserFollowers(userId);
-        setFollowers(followersRes.data.data);
-      }
     } catch (error) {
       console.error('关注操作失败:', error);
       showSnackbar('操作失败，请重试', 'error');
@@ -310,11 +319,6 @@
       await followUserApi(followeeId);
       showSnackbar('关注成功');
       
-      // 更新粉丝列表状态
-      setFollowers(prev => prev.map(user => 
-        user.id === followeeId ? {...user, is_following: true} : user
-      ));
-      
       // 更新当前用户关注数
       if (currentUser) {
         setCurrentUser(prev => ({
@@ -336,9 +340,6 @@
       await unfollowUserApi(followeeId);
       showSnackbar('已取消关注');
       
-      // 更新关注列表
-      setFollowing(prev => prev.filter(user => user.id !== followeeId));
-      
       // 更新当前用户关注数
       if (currentUser) {
         setCurrentUser(prev => ({
@@ -571,7 +572,7 @@
                 <Grid container spacing={2} sx={{ mt: 2 }}>
                   <Grid item>
                     <Box textAlign="center">
-                      <Typography variant="h6">{posts.length}</Typography>
+                      <Typography variant="h6">{allPosts.length}</Typography>
                       <Typography variant="body2" color="textSecondary">笔记</Typography>
                     </Box>
                   </Grid>
@@ -615,346 +616,117 @@
               }}
             >
               <Tab icon={isMobile ? <Collections /> : null} label="笔记" />
-              <Tab icon={isMobile ? <Bookmark /> : null} label="收藏" />
-              <Tab icon={isMobile ? <Group /> : null} label="关注" />
-              <Tab icon={isMobile ? <People /> : null} label="粉丝" />
             </Tabs>
           </Box>
 
           {/* 内容区域 */}
           <Box sx={{ mt: 3 }}>
-            {activeTab === 0 && (
-              <Grid container spacing={3}>
-                {tabLoading ? (
-                  <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>
-                    <CircularProgress />
-                  </Grid>
-                ) : posts.length > 0 ? (
-                  posts.map((post, index) => (
-                    <Grid item xs={12} sm={6} lg={3} key={post.id}>
-                      <Card elevation={0} sx={{ 
-                        bgcolor: 'white', 
-                        borderRadius: 3,
-                        height: '100%',
-                        display: 'flex',
-                        flexDirection: 'column'
-                      }}>
+            {/* 只保留笔记标签页 */}
+            <Grid container spacing={3}>
+              {tabLoading ? (
+                <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>
+                  <CircularProgress />
+                </Grid>
+              ) : allPosts.length === 0 ? (
+                <Grid item xs={12}>
+                  <Box sx={{ 
+                    display: 'flex', 
+                    flexDirection: 'column', 
+                    alignItems: 'center', 
+                    py: 8,
+                    textAlign: 'center'
+                  }}>
+                    <Collections sx={{ fontSize: 60, color: 'grey.300', mb: 2 }} />
+                    <Typography variant="h6" sx={{ mb: 1 }}>
+                      还没有发布笔记
+                    </Typography>
+                    <Typography variant="body1" color="textSecondary" sx={{ mb: 3 }}>
+                      {isOwnProfile ? '分享你的生活点滴吧～' : '该用户还没有发布任何笔记'}
+                    </Typography>
+                    {isOwnProfile && (
+                      <Button variant="contained" color="primary">
+                        发布第一篇笔记
+                      </Button>
+                    )}
+                  </Box>
+                </Grid>
+              ) : (
+                // 显示当前页的帖子
+                posts.map((post, index) => (
+                  <Grid item xs={12} sm={6} lg={3} key={post.id}>
+                    <Card elevation={0} sx={{ 
+                      bgcolor: 'white', 
+                      borderRadius: 3,
+                      height: '100%',
+                      display: 'flex',
+                      flexDirection: 'column'
+                    }}>
+                      {/* 只有当帖子有 media_urls 时才显示图片 */}
+                      {post.media_urls && post.media_urls.length > 0 && (
                         <CardMedia
                           component="img"
                           height="180"
-                          image={`https://source.unsplash.com/random/400x300?${index + 1}`}
+                          image={post.media_urls[0]}
                           alt={post.title}
                         />
-                        <CardContent sx={{ flexGrow: 1 }}>
-                          <Typography gutterBottom variant="h6" component="div">
-                            {post.title}
-                          </Typography>
-                          <Typography variant="body2" color="text.secondary">
-                            {post.content.substring(0, 60)}...
-                          </Typography>
-                        </CardContent>
-                        <CardActions sx={{ justifyContent: 'space-between', px: 2, pb: 2 }}>
-                          <Box>
-                            <IconButton aria-label="add to favorites">
-                              <Favorite />
-                              <Typography variant="body2" sx={{ ml: 1 }}>
-                                {post.heat || Math.floor(Math.random() * 1000) + 1000}
-                              </Typography>
-                            </IconButton>
-                            <IconButton aria-label="share">
-                              <Share />
-                            </IconButton>
-                          </Box>
-                          <Chip 
-                            label={post.type === 'image' ? '图文' : post.type === 'video' ? '视频' : '文档'} 
-                            size="small" 
-                            color="primary" 
-                            variant="outlined" 
-                          />
-                        </CardActions>
-                      </Card>
-                    </Grid>
-                  ))
-                ) : (
-                  <Grid item xs={12}>
-                    <Box sx={{ 
-                      display: 'flex', 
-                      flexDirection: 'column', 
-                      alignItems: 'center', 
-                      py: 8,
-                      textAlign: 'center'
-                    }}>
-                      <Collections sx={{ fontSize: 60, color: 'grey.300', mb: 2 }} />
-                      <Typography variant="h6" sx={{ mb: 1 }}>
-                        还没有发布笔记
-                      </Typography>
-                      <Typography variant="body1" color="textSecondary" sx={{ mb: 3 }}>
-                        {isOwnProfile ? '分享你的生活点滴吧～' : '该用户还没有发布任何笔记'}
-                      </Typography>
-                      {isOwnProfile && (
-                        <Button variant="contained" color="primary">
-                          发布第一篇笔记
-                        </Button>
                       )}
-                    </Box>
+                      <CardContent sx={{ flexGrow: 1 }}>
+                        <Typography gutterBottom variant="h6" component="div">
+                          {post.title}
+                        </Typography>
+                        <Typography variant="body2" color="text.secondary">
+                          {post.content ? post.content.substring(0, 60) + '...' : '暂无内容'}
+                        </Typography>
+                      </CardContent>
+                      <CardActions sx={{ justifyContent: 'space-between', px: 2, pb: 2 }}>
+                        <Box>
+                          <IconButton aria-label="add to favorites">
+                            <Favorite />
+                            <Typography variant="body2" sx={{ ml: 1 }}>
+                              {post.heat || Math.floor(Math.random() * 1000) + 1000}
+                            </Typography>
+                          </IconButton>
+                          <IconButton aria-label="share">
+                            <Share />
+                          </IconButton>
+                        </Box>
+                        <Chip 
+                          label={post.type === 'image' ? '图文' : post.type === 'video' ? '视频' : '文档'} 
+                          size="small" 
+                          color="primary" 
+                          variant="outlined" 
+                        />
+                      </CardActions>
+                    </Card>
                   </Grid>
-                )}
-                
-                {posts.length > 0 && (
-                  <Grid item xs={12}>
-                    <Box sx={{ display: 'flex', justifyContent: 'center', mt: 3 }}>
-                      <Button 
-                        variant="outlined" 
-                        sx={{ 
-                          borderRadius: 20, 
-                          px: 4,
-                          display: 'flex',
-                          alignItems: 'center'
-                        }}
-                      >
-                        <ChevronLeft sx={{ mr: 1 }} />
-                        上一页
-                        <ChevronRight sx={{ ml: 2 }} />
-                      </Button>
-                    </Box>
-                  </Grid>
-                )}
-              </Grid>
-            )}
-            
-            {activeTab === 1 && (
-              <Grid container spacing={3}>
-                {tabLoading ? (
-                  <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>
-                    <CircularProgress />
-                  </Grid>
-                ) : favorites.length > 0 ? (
-                  favorites.map((favorite) => (
-                    <Grid item xs={12} sm={6} md={4} lg={3} key={favorite.id}>
-                      <Card elevation={0} sx={{ 
-                        bgcolor: 'white', 
-                        borderRadius: 3,
-                        transition: 'transform 0.3s, box-shadow 0.3s',
-                        '&:hover': {
-                          transform: 'translateY(-5px)',
-                          boxShadow: 3
+                ))
+              )}
+              
+              {/* 分页组件 */}
+              {allPosts.length > postsPerPage && (
+                <Grid item xs={12}>
+                  <Stack spacing={2} alignItems="center" sx={{ mt: 4 }}>
+                    <Typography variant="body2" color="textSecondary">
+                      共 {allPosts.length} 篇笔记，第 {currentPage} 页，共 {totalPages} 页
+                    </Typography>
+                    <Pagination 
+                      count={totalPages}
+                      page={currentPage}
+                      onChange={(event, page) => handlePageChange(page)}
+                      color="primary"
+                      size={isMobile ? "small" : "medium"}
+                      showFirstButton 
+                      showLastButton
+                      sx={{
+                        '& .MuiPaginationItem-root': {
+                          borderRadius: 2,
                         }
-                      }}>
-                        <Box sx={{ 
-                          height: 160, 
-                          position: 'relative',
-                          borderTopLeftRadius: 16,
-                          borderTopRightRadius: 16,
-                          overflow: 'hidden'
-                        }}>
-                          <CardMedia
-                            component="img"
-                            height="160"
-                            image={`https://source.unsplash.com/random/400x300?${favorite.id}`}
-                            alt={favorite.title}
-                          />
-                          <Box sx={{
-                            position: 'absolute',
-                            top: 8,
-                            right: 8,
-                            bgcolor: 'rgba(0,0,0,0.6)',
-                            color: 'white',
-                            px: 1,
-                            py: 0.5,
-                            borderRadius: 4,
-                            fontSize: 12
-                          }}>
-                            {favorite.type === 'image' ? '图文' : favorite.type === 'video' ? '视频' : '文档'}
-                          </Box>
-                        </Box>
-                        <CardContent>
-                          <Typography gutterBottom variant="subtitle1" fontWeight="medium">
-                            {favorite.title}
-                          </Typography>
-                          <Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
-                            <Box sx={{ display: 'flex', alignItems: 'center' }}>
-                              <Favorite fontSize="small" color="error" />
-                              <Typography variant="body2" sx={{ ml: 0.5 }}>
-                                {favorite.heat || Math.floor(Math.random() * 1000) + 1000}
-                              </Typography>
-                            </Box>
-                            <Box sx={{ display: 'flex', alignItems: 'center' }}>
-                              <Bookmark fontSize="small" color="primary" />
-                              <Typography variant="body2" sx={{ ml: 0.5 }}>
-                                {Math.floor(Math.random() * 500) + 100}
-                              </Typography>
-                            </Box>
-                          </Box>
-                        </CardContent>
-                      </Card>
-                    </Grid>
-                  ))
-                ) : (
-                  <Grid item xs={12}>
-                    <Box sx={{ 
-                      display: 'flex', 
-                      flexDirection: 'column', 
-                      alignItems: 'center', 
-                      py: 8,
-                      textAlign: 'center'
-                    }}>
-                      <Bookmark sx={{ fontSize: 60, color: 'grey.300', mb: 2 }} />
-                      <Typography variant="h6" sx={{ mb: 1 }}>
-                        {isOwnProfile ? '你还没有收藏内容' : '该用户没有收藏内容'}
-                      </Typography>
-                      <Typography variant="body1" color="textSecondary">
-                        {isOwnProfile ? '看到喜欢的笔记可以收藏起来哦～' : ''}
-                      </Typography>
-                    </Box>
-                  </Grid>
-                )}
-              </Grid>
-            )}
-            
-            {activeTab === 2 && (
-              <Grid container spacing={3}>
-                {tabLoading ? (
-                  <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>
-                    <CircularProgress />
-                  </Grid>
-                ) : following.length > 0 ? (
-                  following.map((follow) => (
-                    <Grid item xs={12} sm={6} md={4} key={follow.id}>
-                      <Paper 
-                        elevation={0} 
-                        sx={{ 
-                          bgcolor: 'white', 
-                          borderRadius: 3,
-                          p: 2,
-                          display: 'flex',
-                          alignItems: 'center',
-                          cursor: 'pointer',
-                          '&:hover': {
-                            boxShadow: 1
-                          }
-                        }}
-                        onClick={() => navigateToUserProfile(follow.id)}
-                      >
-                        <Avatar 
-                          src={follow.avatar || 'https://randomuser.me/api/portraits/men/22.jpg'} 
-                          sx={{ width: 60, height: 60 }} 
-                        />
-                        <Box sx={{ ml: 2, flexGrow: 1 }}>
-                          <Typography fontWeight="medium">{follow.username}</Typography>
-                          <Typography variant="body2" color="textSecondary">
-                            {follow.followers_count || Math.floor(Math.random() * 100) + 10} 粉丝
-                          </Typography>
-                        </Box>
-                        {isOwnProfile && (
-                          <Button 
-                            variant="outlined" 
-                            size="small"
-                            sx={{ borderRadius: 20 }}
-                            onClick={(e) => handleUnfollow(follow.id, e)}
-                          >
-                            已关注
-                          </Button>
-                        )}
-                      </Paper>
-                    </Grid>
-                  ))
-                ) : (
-                  <Grid item xs={12}>
-                    <Box sx={{ 
-                      display: 'flex', 
-                      flexDirection: 'column', 
-                      alignItems: 'center', 
-                      py: 8,
-                      textAlign: 'center'
-                    }}>
-                      <Group sx={{ fontSize: 60, color: 'grey.300', mb: 2 }} />
-                      <Typography variant="h6" sx={{ mb: 1 }}>
-                        {isOwnProfile ? '你还没有关注任何人' : '该用户还没有关注任何人'}
-                      </Typography>
-                      <Typography variant="body1" color="textSecondary">
-                        {isOwnProfile ? '发现有趣的人并关注他们吧～' : ''}
-                      </Typography>
-                    </Box>
-                  </Grid>
-                )}
-              </Grid>
-            )}
-            {activeTab === 3 && (
-              <Grid container spacing={3}>
-                {tabLoading ? (
-                  <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center', py: 4 }}>
-                    <CircularProgress />
-                  </Grid>
-                ) : followers.length > 0 ? (
-                  followers.map((follower) => (
-                    <Grid item xs={12} sm={6} md={4} key={follower.id}>
-                      <Paper 
-                        elevation={0} 
-                        sx={{ 
-                          bgcolor: 'white', 
-                          borderRadius: 3,
-                          p: 2,
-                          display: 'flex',
-                          alignItems: 'center',
-                          cursor: 'pointer',
-                          '&:hover': {
-                            boxShadow: 1
-                          }
-                        }}
-                        onClick={() => navigateToUserProfile(follower.id)}
-                      >
-                        <Avatar 
-                          src={follower.avatar || 'https://randomuser.me/api/portraits/men/22.jpg'} 
-                          sx={{ width: 60, height: 60 }} 
-                        />
-                        <Box sx={{ ml: 2, flexGrow: 1 }}>
-                          <Typography fontWeight="medium">{follower.username}</Typography>
-                          <Typography variant="body2" color="textSecondary">
-                            {follower.bio || '暂无简介'}
-                          </Typography>
-                        </Box>
-                        {currentUser && currentUser.id !== follower.id && (
-                          <Button 
-                            variant={follower.is_following ? "outlined" : "contained"}
-                            color="primary"
-                            size="small"
-                            sx={{ borderRadius: 20 }}
-                            onClick={(e) => {
-                              e.stopPropagation();
-                              if (follower.is_following) {
-                                handleUnfollow(follower.id, e);
-                              } else {
-                                handleFollowUser(follower.id);
-                              }
-                            }}
-                          >
-                            {follower.is_following ? '已关注' : '关注'}
-                          </Button>
-                        )}
-                      </Paper>
-                    </Grid>
-                  ))
-                ) : (
-                  <Grid item xs={12}>
-                    <Box sx={{ 
-                      display: 'flex', 
-                      flexDirection: 'column', 
-                      alignItems: 'center', 
-                      py: 8,
-                      textAlign: 'center'
-                    }}>
-                      <People sx={{ fontSize: 60, color: 'grey.300', mb: 2 }} />
-                      <Typography variant="h6" sx={{ mb: 1 }}>
-                        {isOwnProfile ? '你还没有粉丝' : '该用户还没有粉丝'}
-                      </Typography>
-                      <Typography variant="body1" color="textSecondary">
-                        {isOwnProfile ? '分享更多内容来吸引粉丝吧～' : ''}
-                      </Typography>
-                    </Box>
-                  </Grid>
-                )}
-              </Grid>
-            )}
+                      }}
+                    />
+                  </Stack>
+                </Grid>
+              )}
+            </Grid>
           </Box>
         </Container>
 
