diff --git a/src/api/user.js b/src/api/user.js
new file mode 100644
index 0000000..2cfb40c
--- /dev/null
+++ b/src/api/user.js
@@ -0,0 +1,115 @@
+import request from './request'
+
+export const userApi = {
+  /**
+   * 获取当前用户信息
+   * @returns {Promise<Object>} 用户信息
+   */
+  getCurrentUser() {
+    return request({
+      url: '/user/profile',
+      method: 'get'
+    })
+  },
+
+  /**
+   * 更新用户资料
+   * @param {Object} profileData - 用户资料数据
+   * @returns {Promise<Object>} 更新响应
+   */
+  updateProfile(profileData) {
+    return request({
+      url: '/user/profile',
+      method: 'put',
+      data: profileData
+    })
+  },
+
+  /**
+   * 修改密码
+   * @param {Object} passwordData - 密码数据
+   * @param {string} passwordData.currentPassword - 当前密码
+   * @param {string} passwordData.newPassword - 新密码
+   * @returns {Promise<Object>} 修改响应
+   */
+  changePassword(passwordData) {
+    return request({
+      url: '/user/password',
+      method: 'put',
+      data: passwordData
+    })
+  },
+
+  /**
+   * 上传头像
+   * @param {FormData} formData - 包含头像文件的FormData
+   * @returns {Promise<Object>} 上传响应
+   */
+  uploadAvatar(formData) {
+    return request({
+      url: '/user/avatar',
+      method: 'post',
+      data: formData,
+      headers: {
+        'Content-Type': 'multipart/form-data'
+      }
+    })
+  },
+
+  /**
+   * 获取用户统计信息
+   * @returns {Promise<Object>} 统计信息
+   */
+  getUserStats() {
+    return request({
+      url: '/user/stats',
+      method: 'get'
+    })
+  },
+
+  /**
+   * 获取用户活动记录
+   * @param {Object} params - 查询参数
+   * @param {string} params.type - 活动类型
+   * @param {number} params.page - 页码
+   * @param {number} params.size - 每页大小
+   * @returns {Promise<Object>} 活动记录
+   */
+  getUserActivities(params = {}) {
+    return request({
+      url: '/user/activities',
+      method: 'get',
+      params
+    })
+  },
+
+  /**
+   * 获取用户上传的种子
+   * @param {Object} params - 查询参数
+   * @param {number} params.page - 页码
+   * @param {number} params.size - 每页大小
+   * @returns {Promise<Object>} 种子列表
+   */
+  getUserTorrents(params = {}) {
+    return request({
+      url: '/user/torrents',
+      method: 'get',
+      params
+    })
+  },
+
+  /**
+   * 获取登录历史
+   * @param {Object} params - 查询参数
+   * @param {number} params.page - 页码
+   * @param {number} params.size - 每页大小
+   * @returns {Promise<Object>} 登录历史
+   */
+  getLoginHistory(params = {}) {
+    return request({
+      url: '/user/login-history',
+      method: 'get',
+      params
+    })
+  }
+}
