feat(auth): 实现登录注册功能并重构 App 组件

- 新增登录和注册页面组件
- 实现用户认证和权限管理逻辑
- 重构 App 组件,使用 Router 和 AuthProvider
- 添加管理员面板和论坛页面组件

Change-Id: Iaa4502616970e75e3268537f73c75dac8f60e24d
diff --git a/src/mock/index.js b/src/mock/index.js
index 8fd2118..46a5209 100644
--- a/src/mock/index.js
+++ b/src/mock/index.js
@@ -9,89 +9,240 @@
 const users = [
   {
     id: 1,
-    username: 'admin',
-    password: 'admin123',
-    email: 'admin@example.com',
-    role: 'admin',
-    avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=admin'
+    username: 'LukasWu',
+    password: '060050bbb',
+    email: '22301102@bjtu.edu.cn',
+    role: 'user',
+    userType: 0, // 普通用户
+    avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=LukasWu',
+    createTime: '2025-05-13 17:51:08'
   },
   {
     id: 2,
-    username: 'user',
-    password: 'user123',
-    email: 'user@example.com',
-    role: 'user',
-    avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=user'
+    username: 'IcyIron',
+    password: '111111',
+    email: 'icyiron@example.com',
+    role: 'admin',
+    userType: 1, // 管理员
+    avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=IcyIron',
+    createTime: '2025-05-13 18:00:00'
   },
   {
     id: 3,
-    username: 'moderator',
-    password: 'mod123',
-    email: 'mod@example.com',
-    role: 'moderator',
-    avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=moderator'
+    username: 'tanzhennan727',
+    password: 'password123',
+    email: 'tanzhennan727@example.com',
+    role: 'user',
+    userType: 0,
+    avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=tanzhennan727',
+    createTime: '2025-05-14 10:00:00'
   },
   {
     id: 4,
-    username: 'blacklisted',
-    password: 'black123',
-    email: 'black@example.com',
-    role: 'blacklisted',
-    avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=blacklisted'
-  },
-  {
-    id: 5,
-    username: 'veteran',
-    password: 'vet123',
-    email: 'veteran@example.com',
-    role: 'veteran',
-    avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=veteran'
-  },
-  {
-    id: 6,
-    username: 'newbie',
-    password: 'new123',
-    email: 'newbie@example.com',
-    role: 'newbie',
-    avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=newbie'
+    username: 'ybt',
+    password: 'ybt123',
+    email: 'ybt@example.com',
+    role: 'user',
+    userType: 0,
+    avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=ybt',
+    createTime: '2025-05-15 14:30:00'
   }
 ]
 
-// 模拟登录接口
-Mock.mock('/api/auth/login', 'post', (options) => {
-  const { username, password } = JSON.parse(options.body)
-  const user = users.find(u => u.username === username && u.password === password)
+// 模拟帖子数据
+const posts = [
+  {
+    id: 1,
+    title: '如何成为云顶高手',
+    content: '向icyiron学习',
+    author: 'LukasWu',
+    createTime: '2025-05-18 16:43:51',
+    views: 256,
+    likes: 57
+  },
+  {
+    id: 101,
+    title: '北京交通大学实训心得',
+    content: '实训非常有趣,学到了很多知识',
+    author: 'LukasWu',
+    createTime: '2025-05-17 09:30:00',
+    views: 128,
+    likes: 32
+  },
+  {
+    id: 102,
+    title: '前端开发技巧分享',
+    content: 'React和Vue的使用经验总结...',
+    author: 'IcyIron',
+    createTime: '2025-05-16 15:20:00',
+    views: 345,
+    likes: 89
+  },
+  {
+    id: 103,
+    title: '后端接口设计规范',
+    content: 'RESTful API设计的最佳实践...',
+    author: 'tanzhennan727',
+    createTime: '2025-05-15 11:10:00',
+    views: 210,
+    likes: 45
+  },
+  {
+    id: 104,
+    title: '数据库优化技巧',
+    content: 'MySQL索引优化与查询性能提升...',
+    author: 'ybt',
+    createTime: '2025-05-14 16:40:00',
+    views: 178,
+    likes: 36
+  },
+  {
+    id: 105,
+    title: '云顶之弈攻略',
+    content: '最强阵容搭配与装备选择...',
+    author: 'IcyIron',
+    createTime: '2025-05-13 20:15:00',
+    views: 567,
+    likes: 120
+  }
+]
+
+// 模拟评论数据
+const comments = [
+  {
+    id: 1001,
+    postId: 105,
+    content: '感谢分享,学到了很多!',
+    author: 'LukasWu',
+    createTime: '2025-05-19 12:30:15'
+  },
+  {
+    id: 1002,
+    postId: 105,
+    content: '这个阵容我试了,确实很强',
+    author: 'tanzhennan727',
+    createTime: '2025-05-19 14:25:30'
+  },
+  {
+    id: 1003,
+    postId: 101,
+    content: '实训课程安排得很合理',
+    author: 'ybt',
+    createTime: '2025-05-18 10:15:45'
+  },
+  {
+    id: 1004,
+    postId: 102,
+    content: 'React Hooks确实好用',
+    author: 'LukasWu',
+    createTime: '2025-05-17 16:40:20'
+  },
+  {
+    id: 1005,
+    postId: 103,
+    content: '接口文档写得很清晰',
+    author: 'IcyIron',
+    createTime: '2025-05-16 09:35:10'
+  }
+]
+
+// 生成JWT格式的token
+const generateToken = (username, userType) => {
+  const header = { alg: 'HS256', typ: 'JWT' };
+  const payload = {
+    username: username,
+    userType: userType,
+    exp: Math.floor(Date.now() / 1000) + 86400 // 24小时后过期
+  };
+  
+  // Base64编码
+  const encodeBase64 = (obj) => {
+    return btoa(JSON.stringify(obj)).replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
+  };
+  
+  const headerEncoded = encodeBase64(header);
+  const payloadEncoded = encodeBase64(payload);
+  
+  // 在实际应用中应该使用正确的签名算法,这里简化处理
+  const signature = encodeBase64(`${username}-${Date.now()}`);
+  
+  return `${headerEncoded}.${payloadEncoded}.${signature}`;
+};
+
+// 验证token
+const verifyToken = (token) => {
+  if (!token) return false;
+  
+  try {
+    // 解析token的payload部分
+    const parts = token.split('.');
+    if (parts.length !== 3) return false;
+    
+    const payload = JSON.parse(atob(parts[1].replace(/-/g, '+').replace(/_/g, '/')));
+    const now = Math.floor(Date.now() / 1000);
+    
+    // 检查过期时间
+    if (payload.exp <= now) return false;
+    
+    // 检查用户是否存在
+    const user = users.find(u => u.username === payload.username);
+    if (!user) return false;
+    
+    return { valid: true, user, userType: payload.userType };
+  } catch (e) {
+    return false;
+  }
+};
+
+// 用户信息相关接口
+
+// 1. 用户登录
+Mock.mock('/user/login', 'post', (options) => {
+  const body = JSON.parse(options.body);
+  const { username, password } = body;
+  
+  const user = users.find(u => u.username === username && u.password === password);
   
   if (user) {
-    const { password, ...userWithoutPassword } = user
+    const token = generateToken(user.username, user.userType);
+    
     return {
       code: 200,
       message: '登录成功',
+      success: true,
       data: {
-        token: `mock-token-${user.id}-${Date.now()}`,
-        user: userWithoutPassword
+        token,
+        user: {
+          id: user.id,
+          username: user.username,
+          email: user.email,
+          role: user.role,
+          userType: user.userType,
+          avatar: user.avatar
+        }
       }
-    }
+    };
   } else {
     return {
       code: 401,
       message: '用户名或密码错误',
-      data: null
-    }
+      success: false
+    };
   }
-})
+});
 
-// 模拟注册接口
-Mock.mock('/api/auth/register', 'post', (options) => {
-  const { username, email, password } = JSON.parse(options.body)
+// 2. 用户注册
+Mock.mock('/user/register', 'post', (options) => {
+  const body = JSON.parse(options.body);
+  const { username, password, email } = body;
   
   // 检查用户名是否已存在
   if (users.some(u => u.username === username)) {
     return {
       code: 400,
       message: '用户名已存在',
-      data: null
-    }
+      success: false
+    };
   }
   
   // 检查邮箱是否已存在
@@ -99,8 +250,8 @@
     return {
       code: 400,
       message: '邮箱已被注册',
-      data: null
-    }
+      success: false
+    };
   }
   
   // 创建新用户
@@ -109,39 +260,671 @@
     username,
     password,
     email,
-    role: 'newbie', // 默认为新人角色
-    avatar: `https://api.dicebear.com/7.x/avataaars/svg?seed=${username}`
-  }
+    role: 'user',
+    userType: 0, // 普通用户
+    avatar: `https://api.dicebear.com/7.x/avataaars/svg?seed=${username}`,
+    createTime: new Date().toISOString().replace('T', ' ').substring(0, 19)
+  };
   
-  users.push(newUser)
+  users.push(newUser);
+  
+  const token = generateToken(newUser.username, newUser.userType);
   
   return {
     code: 200,
     message: '注册成功',
-    data: null
-  }
-})
+    success: true,
+    data: {
+      token,
+      user: {
+        id: newUser.id,
+        username: newUser.username,
+        email: newUser.email,
+        role: newUser.role,
+        userType: newUser.userType,
+        avatar: newUser.avatar
+      }
+    }
+  };
+});
 
-// 模拟获取用户信息接口
-Mock.mock('/api/user/info', 'get', (options) => {
-  // 在实际应用中,这里会从token中解析用户ID
-  // 这里简化处理,假设已登录用户是admin
-  const user = users.find(u => u.username === 'admin')
+// 3. 修改用户名
+Mock.mock('/user/update/username', 'post', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
   
-  if (user) {
-    const { password, ...userWithoutPassword } = user
+  if (!auth || !auth.valid) {
+    return {
+      code: 401,
+      message: '未授权访问',
+      success: false
+    };
+  }
+  
+  const body = JSON.parse(options.body);
+  const { username, newUsername } = body;
+  
+  // 检查用户名是否存在
+  const userIndex = users.findIndex(u => u.username === username);
+  if (userIndex === -1) {
+    return {
+      code: 404,
+      message: '用户不存在',
+      success: false
+    };
+  }
+  
+  // 检查新用户名是否已被使用
+  if (users.some(u => u.username === newUsername && u.id !== users[userIndex].id)) {
+    return {
+      code: 400,
+      message: '用户名已存在',
+      success: false
+    };
+  }
+  
+  // 更新用户名
+  users[userIndex].username = newUsername;
+  users[userIndex].avatar = `https://api.dicebear.com/7.x/avataaars/svg?seed=${newUsername}`;
+  
+  return {
+    code: 200,
+    message: '用户名修改成功',
+    success: true,
+    data: {
+      user: {
+        id: users[userIndex].id,
+        username: users[userIndex].username,
+        email: users[userIndex].email,
+        role: users[userIndex].role,
+        userType: users[userIndex].userType,
+        avatar: users[userIndex].avatar
+      }
+    }
+  };
+});
+
+// 4. 修改密码
+Mock.mock('/user/update/password', 'post', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid) {
+    return {
+      code: 401,
+      message: '未授权访问',
+      success: false
+    };
+  }
+  
+  const body = JSON.parse(options.body);
+  const { username, newPassword } = body;
+  
+  // 检查用户名是否存在
+  const userIndex = users.findIndex(u => u.username === username);
+  if (userIndex === -1) {
+    return {
+      code: 404,
+      message: '用户不存在',
+      success: false
+    };
+  }
+  
+  // 更新密码
+  users[userIndex].password = newPassword;
+  
+  return {
+    code: 200,
+    message: '密码修改成功',
+    success: true
+  };
+});
+
+// 5. 修改邮箱
+Mock.mock('/user/update/email', 'post', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid) {
+    return {
+      code: 401,
+      message: '未授权访问',
+      success: false
+    };
+  }
+  
+  const body = JSON.parse(options.body);
+  const { username, newEmail } = body;
+  
+  // 检查用户名是否存在
+  const userIndex = users.findIndex(u => u.username === username);
+  if (userIndex === -1) {
+    return {
+      code: 404,
+      message: '用户不存在',
+      success: false
+    };
+  }
+  
+  // 检查邮箱是否已被使用
+  if (users.some(u => u.email === newEmail && u.id !== users[userIndex].id)) {
+    return {
+      code: 400,
+      message: '邮箱已被注册',
+      success: false
+    };
+  }
+  
+  // 更新邮箱
+  users[userIndex].email = newEmail;
+  
+  return {
+    code: 200,
+    message: '邮箱修改成功',
+    success: true,
+    data: {
+      user: {
+        id: users[userIndex].id,
+        username: users[userIndex].username,
+        email: users[userIndex].email,
+        role: users[userIndex].role,
+        userType: users[userIndex].userType,
+        avatar: users[userIndex].avatar
+      }
+    }
+  };
+});
+
+// 6. 获取用户信息
+Mock.mock(new RegExp('/user/get/info\\?username=.+'), 'get', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid) {
+    return {
+      code: 401,
+      message: '未授权访问',
+      success: false
+    };
+  }
+  
+  const url = options.url;
+  const username = url.split('username=')[1];
+  
+  const user = users.find(u => u.username === username);
+  if (!user) {
+    return {
+      code: 404,
+      message: '用户不存在',
+      success: false
+    };
+  }
+  
+  return {
+    code: 200,
+    message: '获取用户信息成功',
+    success: true,
+    data: {
+      user: {
+        id: user.id,
+        username: user.username,
+        email: user.email,
+        role: user.role,
+        userType: user.userType,
+        avatar: user.avatar,
+        createTime: user.createTime
+      }
+    }
+  };
+});
+
+// 帖子相关接口
+
+// 7. 新建帖子
+Mock.mock('/posts/create', 'post', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid) {
+    return {
+      code: 401,
+      message: '未授权访问',
+      success: false
+    };
+  }
+  
+  const body = JSON.parse(options.body);
+  const { title, content, author } = body;
+  
+  // 生成新帖子ID
+  const id = posts.length > 0 ? Math.max(...posts.map(p => p.id)) + 1 : 1;
+  
+  const newPost = {
+    id,
+    title,
+    content,
+    author,
+    createTime: new Date().toISOString().replace('T', ' ').substring(0, 19),
+    views: 0,
+    likes: 0
+  };
+  
+  posts.push(newPost);
+  
+  return {
+    code: 200,
+    message: '帖子发布成功',
+    success: true,
+    data: { post: newPost }
+  };
+});
+
+// 8. 查询帖子
+Mock.mock(new RegExp('/posts/list\\?.*'), 'get', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid) {
+    return {
+      code: 401,
+      message: '未授权访问',
+      success: false
+    };
+  }
+  
+  const url = options.url;
+  const params = new URLSearchParams(url.split('?')[1]);
+  
+  const username = params.get('username');
+  const title = params.get('title');
+  const author = params.get('author');
+  const date = params.get('date');
+  
+  // 过滤帖子
+  let filteredPosts = [...posts];
+  
+  if (title) {
+    filteredPosts = filteredPosts.filter(p => p.title.includes(title));
+  }
+  
+  if (author) {
+    filteredPosts = filteredPosts.filter(p => p.author.includes(author));
+  }
+  
+  if (date) {
+    filteredPosts = filteredPosts.filter(p => p.createTime.startsWith(date));
+  }
+  
+  return {
+    code: 200,
+    message: '查询帖子成功',
+    success: true,
+    data: {
+      total: filteredPosts.length,
+      posts: filteredPosts
+    }
+  };
+});
+
+// 评论相关接口
+
+// 9. 获取帖子评论
+Mock.mock(new RegExp('/comment/get\\?.*'), 'get', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid) {
+    return {
+      code: 401,
+      message: '未授权访问',
+      success: false
+    };
+  }
+  
+  const url = options.url;
+  const params = new URLSearchParams(url.split('?')[1]);
+  
+  const postId = params.get('postId');
+  
+  if (!postId) {
+    return {
+      code: 400,
+      message: '参数错误',
+      success: false
+    };
+  }
+  
+  // 查找帖子
+  const post = posts.find(p => p.id === parseInt(postId));
+  if (!post) {
+    return {
+      code: 404,
+      message: '帖子不存在',
+      success: false
+    };
+  }
+  
+  // 获取帖子的评论
+  const postComments = comments.filter(c => c.postId === parseInt(postId));
+  
+  return {
+    code: 200,
+    message: '获取评论成功',
+    success: true,
+    data: {
+      total: postComments.length,
+      comments: postComments
+    }
+  };
+});
+
+// 10. 发布帖子评论
+Mock.mock('/comment/add', 'post', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid) {
+    return {
+      code: 401,
+      message: '未授权访问',
+      success: false
+    };
+  }
+  
+  const body = JSON.parse(options.body);
+  const { content, username, postId } = body;
+  
+  // 检查帖子是否存在
+  const post = posts.find(p => p.id === parseInt(postId));
+  if (!post) {
+    return {
+      code: 404,
+      message: '帖子不存在',
+      success: false
+    };
+  }
+  
+  // 检查用户是否存在
+  const user = users.find(u => u.username === username);
+  if (!user) {
+    return {
+      code: 404,
+      message: '用户不存在',
+      success: false
+    };
+  }
+  
+  // 生成评论ID
+  const id = comments.length > 0 ? Math.max(...comments.map(c => c.id)) + 1 : 1001;
+  
+  const newComment = {
+    id,
+    postId: parseInt(postId),
+    content,
+    author: username,
+    createTime: new Date().toISOString().replace('T', ' ').substring(0, 19)
+  };
+  
+  comments.push(newComment);
+  
+  return {
+    code: 200,
+    message: '评论发布成功',
+    success: true,
+    data: { comment: newComment }
+  };
+});
+
+// 管理员相关接口
+
+// 11. 管理员登录
+Mock.mock('/admin/login', 'post', (options) => {
+  const body = JSON.parse(options.body);
+  const { username, password } = body;
+  
+  // 查找管理员用户
+  const admin = users.find(u => u.username === username && u.password === password && u.userType === 1);
+  
+  if (admin) {
+    const token = generateToken(admin.username, admin.userType);
+    
     return {
       code: 200,
-      message: '获取用户信息成功',
-      data: userWithoutPassword
-    }
+      message: '管理员登录成功',
+      success: true,
+      data: {
+        token,
+        user: {
+          id: admin.id,
+          username: admin.username,
+          email: admin.email,
+          role: admin.role,
+          userType: admin.userType,
+          avatar: admin.avatar
+        }
+      }
+    };
   } else {
     return {
       code: 401,
-      message: '获取用户信息失败',
-      data: null
-    }
+      message: '用户名或密码错误,或无管理员权限',
+      success: false
+    };
   }
-})
+});
+
+// 12. 获取用户列表 (管理员)
+Mock.mock(new RegExp('/user/list\\?.*'), 'get', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid || auth.userType !== 1) {
+    return {
+      code: 403,
+      message: '无权限访问',
+      success: false
+    };
+  }
+  
+  // 返回除密码外的用户信息
+  const userList = users.map(user => ({
+    id: user.id,
+    username: user.username,
+    email: user.email,
+    role: user.role,
+    userType: user.userType,
+    avatar: user.avatar,
+    createTime: user.createTime
+  }));
+  
+  return {
+    code: 200,
+    message: '获取用户列表成功',
+    success: true,
+    data: {
+      total: userList.length,
+      users: userList
+    }
+  };
+});
+
+// 13. 删除指定用户 (管理员)
+Mock.mock('/user/delete', 'delete', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid || auth.userType !== 1) {
+    return {
+      code: 403,
+      message: '无权限访问',
+      success: false
+    };
+  }
+  
+  const body = JSON.parse(options.body);
+  const { username, targetUsername } = body;
+  
+  // 确保操作者是管理员
+  const admin = users.find(u => u.username === username && u.userType === 1);
+  if (!admin) {
+    return {
+      code: 403,
+      message: '无权限操作',
+      success: false
+    };
+  }
+  
+  // 查找要删除的用户
+  const userIndex = users.findIndex(u => u.username === targetUsername);
+  if (userIndex === -1) {
+    return {
+      code: 404,
+      message: '用户不存在',
+      success: false
+    };
+  }
+  
+  // 不允许删除管理员
+  if (users[userIndex].userType === 1) {
+    return {
+      code: 403,
+      message: '不能删除管理员账户',
+      success: false
+    };
+  }
+  
+  // 删除用户
+  const deletedUser = users.splice(userIndex, 1)[0];
+  
+  return {
+    code: 200,
+    message: '用户删除成功',
+    success: true,
+    data: {
+      username: deletedUser.username
+    }
+  };
+});
+
+// 14. 删除帖子 (管理员)
+Mock.mock('/posts/delete', 'delete', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid || auth.userType !== 1) {
+    return {
+      code: 403,
+      message: '无权限访问',
+      success: false
+    };
+  }
+  
+  const body = JSON.parse(options.body);
+  const { username, pid } = body;
+  
+  // 确保操作者是管理员
+  const admin = users.find(u => u.username === username && u.userType === 1);
+  if (!admin) {
+    return {
+      code: 403,
+      message: '无权限操作',
+      success: false
+    };
+  }
+  
+  // 查找要删除的帖子
+  const postIndex = posts.findIndex(p => p.id === parseInt(pid));
+  if (postIndex === -1) {
+    return {
+      code: 404,
+      message: '帖子不存在',
+      success: false
+    };
+  }
+  
+  // 删除帖子
+  const deletedPost = posts.splice(postIndex, 1)[0];
+  
+  // 同时删除该帖子的所有评论
+  const relatedComments = comments.filter(c => c.postId === parseInt(pid));
+  relatedComments.forEach(comment => {
+    const commentIndex = comments.findIndex(c => c.id === comment.id);
+    if (commentIndex !== -1) {
+      comments.splice(commentIndex, 1);
+    }
+  });
+  
+  return {
+    code: 200,
+    message: '帖子删除成功',
+    success: true,
+    data: {
+      title: deletedPost.title,
+      deletedComments: relatedComments.length
+    }
+  };
+});
+
+// 15. 删除帖子评论 (管理员)
+Mock.mock('/comment/delete', 'delete', (options) => {
+  const headers = options.headers || {};
+  const token = headers.token;
+  const auth = verifyToken(token);
+  
+  if (!auth || !auth.valid || auth.userType !== 1) {
+    return {
+      code: 403,
+      message: '无权限访问',
+      success: false
+    };
+  }
+  
+  const body = JSON.parse(options.body);
+  const { username, commentId } = body;
+  
+  // 确保操作者是管理员
+  const admin = users.find(u => u.username === username && u.userType === 1);
+  if (!admin) {
+    return {
+      code: 403,
+      message: '无权限操作',
+      success: false
+    };
+  }
+  
+  // 查找要删除的评论
+  const commentIndex = comments.findIndex(c => c.id === parseInt(commentId));
+  if (commentIndex === -1) {
+    return {
+      code: 404,
+      message: '评论不存在',
+      success: false
+    };
+  }
+  
+  // 删除评论
+  const deletedComment = comments.splice(commentIndex, 1)[0];
+  
+  return {
+    code: 200,
+    message: '评论删除成功',
+    success: true,
+    data: {
+      commentId: deletedComment.id,
+      postId: deletedComment.postId
+    }
+  };
+});
 
 export default Mock
\ No newline at end of file