import Axios, { AxiosRequestConfig, Method } from 'axios'; // import { Dialog } from '@alifd/next'; import { showLoading, hideLoading } from '../ui/loading'; import { showToast } from '../ui/toast'; import { getUrlParam } from '../utils'; Axios.defaults.withCredentials = true; Axios.defaults.xsrfCookieName = ''; Axios.defaults.xsrfHeaderName = ''; export default Axios; const defaultAppCode = getUrlParam('appCode') || 'epoch'; declare global { interface Window { devEnv?: string; } } interface DataOrParams { data?: any; params?: any; } interface ApiOptions { code: string; app?: string; method?: Method; data?: any; contentType?: string; headers?: any; disableLoading?: boolean; disableWarning?: boolean; } export function request(options: AxiosRequestConfig) { const { method, data, ...config } = options; const dataOrParams: DataOrParams = {}; if (['PUT', 'POST'].includes(method.toUpperCase())) { dataOrParams.data = data; } else { dataOrParams.params = data; } return Axios.request({ method, ...config, ...dataOrParams, }); } export async function callApi(options: ApiOptions) { const env = window.devEnv || ''; const { code, app = defaultAppCode, method = 'POST', contentType = 'application/json', headers = {}, disableLoading, disableWarning, } = options; let url = code; if (url[0] !== '/') { url = `/api/${app}/${code}`; } if (url[0] === '/') { url = `${env}${url}`; } const dataOrParams: DataOrParams = {}; if (['PUT', 'POST'].includes(method.toUpperCase())) { dataOrParams.data = options.data; } else { dataOrParams.params = options.data; } try { if (!disableLoading) { showLoading(); } if (contentType) { headers['content-type'] = contentType; } const res = await Axios.request({ method, url, headers, ...dataOrParams, }); if (res.status === 302) { // todo } console.log('==========='); console.log(res); return res.data; } catch (e) { if (!disableWarning) { showToast({ content: '请求出错', type: 'error' }); } } finally { if (!disableLoading) { hideLoading(); } } } export function callService( service: EpochService, params: Record = {}, options: Partial = {}, ) { const { appCode, code, input } = service?.value || {}; const data = {} as any; if (input && input.length) { input.reduce((obj, { name, bind }) => { obj[name] = bind; return obj; }, data); } return callApi({ code, app: appCode, data: { ...data, ...params, }, ...options, }); } export interface EpochService { mode: 'service'; service: string; value: { serviceType?: string; appCode: string; code: string; name?: string; input?: Array<{ name: string; bind: any; }>; }; }