import axios from "axios" import { message } from "ant-design-vue" // 创建 Axios 实例 const service = axios.create({ baseURL: "/api/", timeout: 15000, }) // 请求拦截器 service.interceptors.request.use( (config) => { const token = localStorage.getItem("token") if (token) { config.headers["Authorization"] = `Bearer ${token}` } return config }, (error) => { console.error("Request error:", error) return Promise.reject(error) }, ) // 响应拦截器 service.interceptors.response.use( (response) => { const { code, result, message: msg } = response.data if (code === 0) { return result } else { if (code === 401) { message.error(msg) localStorage.removeItem("token") localStorage.removeItem("chatUser") window.location.href = "/login" return Promise.reject(new Error(msg)) } message.error(msg) return Promise.reject(new Error(msg)) } }, (error) => { console.error("Response error:", error) // 详细的错误处理 if (error.code === "ECONNABORTED") { console.log("请求超时,请检查网络连接") } else if (error.response?.status === 0 || error.message.includes("CORS")) { console.log("CORS错误检测到,尝试备用方案...") handleCORSError(error.config) } else if (error.response?.status >= 400 && error.response?.status < 500) { console.log("客户端错误:", error.response.status, error.response.data) } else if (error.response?.status >= 500) { console.log("服务器错误:", error.response.status) } else { console.log("网络错误:", error.message) } message.error("网络请求失败") return Promise.reject(error) }, ) // CORS错误的备用处理方案 const handleCORSError = (config) => { console.log("执行CORS错误备用方案...") // /* "http://g-ws.nailaoyun.cn" + */ const apiUrl = config.url.replace("/api", "") return fetch(apiUrl, { method: config.method.toUpperCase(), headers: { "Content-Type": "application/json", ...config.headers, }, mode: "cors", body: config.data ? JSON.stringify(config.data) : undefined, }) .then((response) => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`) } return response.json() }) .catch((error) => { console.error("备用方案也失败:", error) throw error }) } // 封装请求方法 export const get = (url, params = {}) => { return service.get(url, { params }) } export const post = (url, data = {}) => { return service.post(url, data) } export const upload = (url, file) => { const formData = new FormData() formData.append("file", file) return service.post(url, formData, { headers: { "Content-Type": "multipart/form-data", }, }) } // WebSocket消息发送API export const sendMessage = (data) => { const messageTypeMap = { text: 0, image: 1, audio: 2, video: 3, } // 直接使用固定的后端接口地址 const apiUrl = "/api/send-to-user" const requestData = { sender_user_id: data.senderId, receiver_user_id: data.receiverId, message_type: messageTypeMap[data.type] || 0, message_content: data.content, } console.log("发送消息到API:", apiUrl, requestData) return axios .post(apiUrl, requestData, { headers: { "Content-Type": "application/json", }, timeout: 15000, withCredentials: false, }) .then((response) => { console.log("消息发送成功:", response.data) return response.data }) .catch((error) => { console.error("消息发送失败:", error) throw error }) } export default service