diff --git a/reading-platform-frontend/src/api/index.ts b/reading-platform-frontend/src/api/index.ts index a8d4081..9e60cb3 100644 --- a/reading-platform-frontend/src/api/index.ts +++ b/reading-platform-frontend/src/api/index.ts @@ -1,20 +1,20 @@ -import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; -import { message } from 'ant-design-vue'; +import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; +import { message } from "ant-design-vue"; // 创建axios实例 const request: AxiosInstance = axios.create({ // 由各调用方提供完整路径(例如 /api/v1/teacher/tasks),这里不再追加前缀 - baseURL: '', + baseURL: "", timeout: 30000, headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, }); // 请求拦截器 request.interceptors.request.use( (config) => { - const token = localStorage.getItem('token'); + const token = localStorage.getItem("token"); if (token) { config.headers.Authorization = `Bearer ${token}`; } @@ -22,14 +22,20 @@ request.interceptors.request.use( }, (error) => { return Promise.reject(error); - } + }, ); // 响应拦截器 request.interceptors.response.use( (response: AxiosResponse) => { + console.log(response); // 直接返回响应数据 - return response.data; + // @ts-ignore + if (config._new === true) { + return response.data; + } else { + return response.data.data; + } }, (error) => { const { response } = error; @@ -39,33 +45,33 @@ request.interceptors.response.use( switch (status) { case 401: - message.error('登录已过期,请重新登录'); - localStorage.removeItem('token'); - localStorage.removeItem('user'); - localStorage.removeItem('role'); - localStorage.removeItem('name'); - window.location.href = '/login'; + message.error("登录已过期,请重新登录"); + localStorage.removeItem("token"); + localStorage.removeItem("user"); + localStorage.removeItem("role"); + localStorage.removeItem("name"); + window.location.href = "/login"; break; case 403: - message.error('没有权限访问'); + message.error("没有权限访问"); break; case 404: - message.error('请求的资源不存在'); + message.error("请求的资源不存在"); break; case 500: - message.error('服务器错误'); + message.error("服务器错误"); break; default: - message.error(data?.message || '请求失败'); + message.error(data?.message || "请求失败"); } - } else if (error.code === 'ECONNABORTED') { - message.error('请求超时'); + } else if (error.code === "ECONNABORTED") { + message.error("请求超时"); } else { - message.error('网络错误'); + message.error("网络错误"); } return Promise.reject(error); - } + }, ); // 导出请求方法 @@ -77,11 +83,19 @@ export const http = { return request.get(url, config); }, - post(url: string, data?: any, config?: AxiosRequestConfig): Promise { + post( + url: string, + data?: any, + config?: AxiosRequestConfig, + ): Promise { return request.post(url, data, config); }, - put(url: string, data?: any, config?: AxiosRequestConfig): Promise { + put( + url: string, + data?: any, + config?: AxiosRequestConfig, + ): Promise { return request.put(url, data, config); }, @@ -89,7 +103,11 @@ export const http = { return request.delete(url, config); }, - patch(url: string, data?: any, config?: AxiosRequestConfig): Promise { + patch( + url: string, + data?: any, + config?: AxiosRequestConfig, + ): Promise { return request.patch(url, data, config); }, }; diff --git a/reading-platform-frontend/src/api/request.ts b/reading-platform-frontend/src/api/request.ts index 4b178b5..3f68af9 100644 --- a/reading-platform-frontend/src/api/request.ts +++ b/reading-platform-frontend/src/api/request.ts @@ -2,9 +2,11 @@ * orval mutator - 让自动生成的 API 复用项目 axios 实例 * 带 token 注入、统一错误处理、Result 自动解包 */ -import type { AxiosRequestConfig } from 'axios' -import axiosInstance from './index' +import type { AxiosRequestConfig } from "axios"; +import axiosInstance from "./index"; export const request = (config: AxiosRequestConfig): Promise => { - return axiosInstance(config) as Promise -} + // @ts-ignore + config._new = true; + return axiosInstance(config) as Promise; +};