import {BaseResultContent} from '@models'; import {NETWORK_URL} from '@utils'; import axios from 'axios'; import {useMessage} from 'naive-ui'; // 普通请求 const http = axios.create({ baseURL: NETWORK_URL, headers: { 'Content-Type': 'application/json', 'Cache-Control': 'no-cache', }, }); const exportReg = /export|excel/i; http.interceptors.request.use(function(config) { if (config?.url) { const isExport = exportReg.test(config.url); isExport && (config.responseType = 'blob'); } return config; }); export async function request>(options: { method: 'POST' | 'GET' | 'PUT' | 'DELETE'; url: string; data?: T; skipError?: boolean; useBody?: boolean; signal?: AbortSignal; }) { const {data, skipError, method, url, useBody, signal} = options; let res: BaseResultContent; const useData = useBody ? useBody : method !== 'GET' && method !== 'DELETE'; const message = useMessage(); try { const result = await http.request({ method, url, data: useData ? data : void 0, params: !useData ? data : void 0, signal, }); res = result.data; if (res.msg !== '200' && !skipError && !exportReg.test(url)) message.error(res.errMsg); } catch (error: any) { res = {msg: '510', errMsg: 'NETWORK_ERROR'}; if (!skipError && error.code !== 'ERR_CANCELED' && !exportReg.test(url)) message.error(res.errMsg); } return res; }