// 兼容以前的老项目写法 import { normalizeConfig } from './helpers' import { AjaxInstance, AjaxOption, AnyObj, AxiosMethods } from './types' type OldAjaxMethods = 'query' | 'create' | 'deletes' | 'putWay' | 'patchWay' export type CustomAjaxMethods = (path: string, config?: Partial) => (data?: any, expend?: string) => Promise type MethodMap = { [k in OldAjaxMethods]: AxiosMethods } const methodMap: MethodMap = { query: 'GET', create: 'POST', putWay: 'PUT', deletes: 'DELETE', patchWay: 'PATCH' } export const generateCustomMethod = (ctx: AjaxInstance, name: OldAjaxMethods): CustomAjaxMethods => (path: string, config: Partial = {}) => (data?: any, expand?: string) => { const url = expand ? `${path}/${expand}` : path; if (expand) { // eslint-disable-next-line no-console console.warn(`业务代码中拼接url发送请求的方式即将废弃,请使用ajax.${methodMap[name].toLocaleLowerCase()}接口替换。相关url:${url}`) } const [newParams, newData] = methodMap[name] === 'GET' ? [data, undefined] : [undefined, data] const config1 = normalizeConfig(ctx, { ...config, url, params: newParams, data: newData, method: methodMap[name], }); const options = { ...config1, custom: { ...ctx.$options, ...config1, }, }; return ctx.request(options); }; function addCompatibleMethods(ctx: AjaxInstance) { ctx.query = generateCustomMethod(ctx, 'query'); ctx.create = generateCustomMethod(ctx, 'create'); ctx.deletes = generateCustomMethod(ctx, 'deletes'); ctx.putWay = generateCustomMethod(ctx, 'putWay'); ctx.patchWay = generateCustomMethod(ctx, 'patchWay'); } export default addCompatibleMethods;