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

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

Change-Id: Iaa4502616970e75e3268537f73c75dac8f60e24d
diff --git a/src/features/forum/services/forumApi.js b/src/features/forum/services/forumApi.js
new file mode 100644
index 0000000..68feca1
--- /dev/null
+++ b/src/features/forum/services/forumApi.js
@@ -0,0 +1,117 @@
+import request from "../../../services/request";
+
+// 帖子相关API
+export const createPost = (postData) => {
+  const token = localStorage.getItem("token");
+  return request
+    .post(
+      "/posts/create", 
+      postData, 
+      { headers: { token } }
+    )
+    .then((response) => {
+      if (response.data && response.data.success) {
+        return response.data;
+      } else {
+        return Promise.reject(new Error(response.data.message || "创建帖子失败"));
+      }
+    });
+};
+
+export const getPosts = (filters) => {
+  const token = localStorage.getItem("token");
+  
+  // 构建查询参数
+  let queryParams = new URLSearchParams();
+  if (filters) {
+    if (filters.username) queryParams.append("username", filters.username);
+    if (filters.title) queryParams.append("title", filters.title);
+    if (filters.author) queryParams.append("author", filters.author);
+    if (filters.date) queryParams.append("date", filters.date);
+  }
+  
+  return request
+    .get(
+      `/posts/list?${queryParams.toString()}`, 
+      { headers: { token } }
+    )
+    .then((response) => {
+      if (response.data && response.data.success) {
+        return response.data;
+      } else {
+        return Promise.reject(new Error(response.data.message || "获取帖子列表失败"));
+      }
+    });
+};
+
+export const deletePost = (username, pid) => {
+  const token = localStorage.getItem("token");
+  return request
+    .delete(
+      "/posts/delete", 
+      { 
+        headers: { token },
+        data: { username, pid }
+      }
+    )
+    .then((response) => {
+      if (response.data && response.data.success) {
+        return response.data;
+      } else {
+        return Promise.reject(new Error(response.data.message || "删除帖子失败"));
+      }
+    });
+};
+
+// 评论相关API
+export const addComment = (commentData) => {
+  const token = localStorage.getItem("token");
+  return request
+    .post(
+      "/comment/add", 
+      commentData, 
+      { headers: { token } }
+    )
+    .then((response) => {
+      if (response.data && response.data.success) {
+        return response.data;
+      } else {
+        return Promise.reject(new Error(response.data.message || "添加评论失败"));
+      }
+    });
+};
+
+export const getComments = (postId, username) => {
+  const token = localStorage.getItem("token");
+  return request
+    .get(
+      `/comment/get?postId=${postId}&username=${username}`, 
+      { headers: { token } }
+    )
+    .then((response) => {
+      if (response.data && response.data.success) {
+        return response.data;
+      } else {
+        return Promise.reject(new Error(response.data.message || "获取评论失败"));
+      }
+    });
+};
+
+export const deleteComment = (username, commentId) => {
+  const token = localStorage.getItem("token");
+  return request
+    .delete(
+      "/comment/delete", 
+      { 
+        headers: { token },
+        data: { username, commentId }
+      }
+    )
+    .then((response) => {
+      if (response.data && response.data.success) {
+        return response.data;
+      } else {
+        return Promise.reject(new Error(response.data.message || "删除评论失败"));
+      }
+    });
+}; 
\ No newline at end of file