From a99df48860061b1149c6377fb666220fb992285f Mon Sep 17 00:00:00 2001 From: Edan's Win11 <961150665@qq.com> Date: Tue, 3 Jun 2025 21:29:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20request=20?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sau_frontend/src/utils/request.js | 99 +++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 sau_frontend/src/utils/request.js diff --git a/sau_frontend/src/utils/request.js b/sau_frontend/src/utils/request.js new file mode 100644 index 0000000..14654ff --- /dev/null +++ b/sau_frontend/src/utils/request.js @@ -0,0 +1,99 @@ +import axios from 'axios' +import { ElMessage } from 'element-plus' + +// 创建axios实例 +const request = axios.create({ + baseURL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:5409', + headers: { + 'Content-Type': 'application/json' + } +}) + +// 请求拦截器 +request.interceptors.request.use( + (config) => { + // 可以在这里添加token等认证信息 + const token = localStorage.getItem('token') + if (token) { + config.headers.Authorization = `Bearer ${token}` + } + return config + }, + (error) => { + console.error('请求错误:', error) + return Promise.reject(error) + } +) + +// 响应拦截器 +request.interceptors.response.use( + (response) => { + const { data } = response + + // 根据后端接口规范处理响应 + if (data.code === 200 || data.success) { + return data + } else { + ElMessage.error(data.message || '请求失败') + return Promise.reject(new Error(data.message || '请求失败')) + } + }, + (error) => { + console.error('响应错误:', error) + + // 处理HTTP错误状态码 + if (error.response) { + const { status } = error.response + switch (status) { + case 401: + ElMessage.error('未授权,请重新登录') + // 可以在这里处理登录跳转 + break + case 403: + ElMessage.error('拒绝访问') + break + case 404: + ElMessage.error('请求地址不存在') + break + case 500: + ElMessage.error('服务器内部错误') + break + default: + ElMessage.error('网络错误') + } + } else { + ElMessage.error('网络连接失败') + } + + return Promise.reject(error) + } +) + +// 封装常用的请求方法 +export const http = { + get(url, params) { + return request.get(url, { params }) + }, + + post(url, data, config = {}) { + return request.post(url, data, config) + }, + + put(url, data, config = {}) { + return request.put(url, data, config) + }, + + delete(url, params) { + return request.delete(url, { params }) + }, + + upload(url, formData) { + return request.post(url, formData, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }) + } +} + +export default request \ No newline at end of file