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

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

Change-Id: Iaa4502616970e75e3268537f73c75dac8f60e24d
diff --git a/src/features/auth/services/authApi.js b/src/features/auth/services/authApi.js
new file mode 100644
index 0000000..dd40a80
--- /dev/null
+++ b/src/features/auth/services/authApi.js
@@ -0,0 +1,165 @@
+// src/features/auth/services/authApi.js
+import request from "../../../services/request";
+import { message } from "antd";
+
+// 使用API前缀
+const API_PREFIX = "/user";
+const ADMIN_PREFIX = "/admin";
+
+// 导出API函数
+export const loginUser = (credentials) => {
+  return request.post(`${API_PREFIX}/login`, credentials).then((response) => {
+    if (response.data && response.data.success) {
+      // 保存token和用户信息到localStorage
+      localStorage.setItem("token", response.data.data.token);
+      localStorage.setItem("user", JSON.stringify(response.data.data.user));
+      return response.data;
+    } else {
+      return Promise.reject(new Error(response.data.message || "登录失败"));
+    }
+  });
+};
+
+export const adminLogin = (credentials) => {
+  return request.post(`${ADMIN_PREFIX}/login`, credentials).then((response) => {
+    if (response.data && response.data.success) {
+      // 保存token和用户信息到localStorage
+      localStorage.setItem("token", response.data.data.token);
+      localStorage.setItem("user", JSON.stringify(response.data.data.user));
+      return response.data;
+    } else {
+      return Promise.reject(new Error(response.data.message || "管理员登录失败"));
+    }
+  });
+};
+
+export const registerUser = (userData) => {
+  return request.post(`${API_PREFIX}/register`, userData).then((response) => {
+    if (response.data && response.data.success) {
+      return response.data;
+    } else {
+      return Promise.reject(new Error(response.data.message || "注册失败"));
+    }
+  });
+};
+
+export const updateUsername = (username, newUsername) => {
+  const token = localStorage.getItem("token");
+  return request
+    .post(`${API_PREFIX}/update/username`, 
+    { username, newUsername }, 
+    { headers: { token } })
+    .then((response) => {
+      if (response.data && response.data.success) {
+        // 更新本地存储的用户信息
+        const user = JSON.parse(localStorage.getItem("user") || "{}");
+        user.username = newUsername;
+        localStorage.setItem("user", JSON.stringify(user));
+        return response.data;
+      } else {
+        return Promise.reject(
+          new Error(response.data.message || "修改用户名失败")
+        );
+      }
+    });
+};
+
+export const updatePassword = (username, newPassword) => {
+  const token = localStorage.getItem("token");
+  return request
+    .post(`${API_PREFIX}/update/password`, 
+    { username, newPassword }, 
+    { headers: { token } })
+    .then((response) => {
+      if (response.data && response.data.success) {
+        return response.data;
+      } else {
+        return Promise.reject(
+          new Error(response.data.message || "修改密码失败")
+        );
+      }
+    });
+};
+
+export const updateEmail = (username, newEmail) => {
+  const token = localStorage.getItem("token");
+  return request
+    .post(`${API_PREFIX}/update/email`, 
+    { username, newEmail }, 
+    { headers: { token } })
+    .then((response) => {
+      if (response.data && response.data.success) {
+        // 更新本地存储的用户信息
+        const user = JSON.parse(localStorage.getItem("user") || "{}");
+        user.email = newEmail;
+        localStorage.setItem("user", JSON.stringify(user));
+        return response.data;
+      } else {
+        return Promise.reject(
+          new Error(response.data.message || "修改邮箱失败")
+        );
+      }
+    });
+};
+
+export const getUserInfo = (username) => {
+  const token = localStorage.getItem("token");
+  return request
+    .get(`${API_PREFIX}/get/info?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 getUserList = (username) => {
+  const token = localStorage.getItem("token");
+  return request
+    .get(`/user/list?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 deleteUser = (username, targetUsername) => {
+  const token = localStorage.getItem("token");
+  return request
+    .delete(`/user/delete`, 
+    { 
+      headers: { token },
+      data: { username, targetUsername }
+    })
+    .then((response) => {
+      if (response.data && response.data.success) {
+        return response.data;
+      } else {
+        return Promise.reject(
+          new Error(response.data.message || "删除用户失败")
+        );
+      }
+    });
+};
+
+export const logoutUser = () => {
+  // 清除本地存储
+  localStorage.removeItem("token");
+  localStorage.removeItem("user");
+
+  return Promise.resolve({
+    success: true,
+    message: "注销成功"
+  });
+};