diff --git a/src/utils/request.js b/src/utils/request.js
new file mode 100644
index 0000000..c5e5acf
--- /dev/null
+++ b/src/utils/request.js
@@ -0,0 +1,79 @@
+import axios from 'axios';
+import { message } from 'antd';
+
+// 创建 axios 实例
+const request = axios.create({
+  baseURL: '/',
+  timeout: 10000,
+});
+
+// 请求拦截器
+// 请求拦截器中添加权限检查
+request.interceptors.request.use(
+  (config) => {
+    // 从 localStorage 获取 token
+    const token = localStorage.getItem('token');
+    
+    // 如果有 token 则添加到请求头
+    if (token) {
+      config.headers['Authorization'] = `Bearer ${token}`;
+    }
+    
+    // 权限检查（可选）
+    // 例如，对特定API路径进行权限检查
+    if (config.url.startsWith('/api/admin') && !hasAdminPermission()) {
+      // 取消请求
+      return Promise.reject(new Error('无权限执行此操作'));
+    }
+    
+    return config;
+  },
+  (error) => {
+    return Promise.reject(error);
+  }
+);
+
+// 辅助函数：检查是否有管理员权限
+function hasAdminPermission() {
+  const user = JSON.parse(localStorage.getItem('user') || '{}');
+  return user.role === 'admin';
+}
+
+// 响应拦截器
+request.interceptors.response.use(
+  (response) => {
+    return response;
+  },
+  (error) => {
+    if (error.response) {
+      const { status, data } = error.response;
+      
+      // 处理 401 未授权错误（token 无效或过期）
+      if (status === 401) {
+        message.error('登录已过期，请重新登录');
+        
+        // 清除本地存储的 token 和用户信息
+        localStorage.removeItem('token');
+        localStorage.removeItem('user');
+        
+        // 重定向到登录页
+        if (window.location.pathname !== '/login') {
+          window.location.href = '/login';
+        }
+      } else {
+        // 处理其他错误
+        message.error(data.message || '请求失败');
+      }
+    } else if (error.request) {
+      // 请求发出但没有收到响应
+      message.error('网络错误，请检查您的网络连接');
+    } else {
+      // 请求配置出错
+      message.error('请求配置错误');
+    }
+    
+    return Promise.reject(error);
+  }
+);
+
+export default request;
\ No newline at end of file
