|
|
|
@ -2,9 +2,48 @@ import type { RequestClient } from './request-client'; |
|
|
|
import type { MakeErrorMessageFn, ResponseInterceptorConfig } from './types'; |
|
|
|
|
|
|
|
import { $t } from '@vben/locales'; |
|
|
|
import { isFunction } from '@vben/utils'; |
|
|
|
|
|
|
|
import axios from 'axios'; |
|
|
|
|
|
|
|
export const defaultResponseInterceptor = ({ |
|
|
|
codeField = 'code', |
|
|
|
dataField = 'data', |
|
|
|
successCode = 0, |
|
|
|
}: { |
|
|
|
/** 响应数据中代表访问结果的字段名 */ |
|
|
|
codeField: string; |
|
|
|
/** 响应数据中装载实际数据的字段名,或者提供一个函数从响应数据中解析需要返回的数据 */ |
|
|
|
dataField: ((response: any) => any) | string; |
|
|
|
/** 当codeField所指定的字段值与successCode相同时,代表接口访问成功。如果提供一个函数,则返回true代表接口访问成功 */ |
|
|
|
successCode: ((code: any) => boolean) | number | string; |
|
|
|
}): ResponseInterceptorConfig => { |
|
|
|
return { |
|
|
|
fulfilled: (response) => { |
|
|
|
const { config, data: responseData, status } = response; |
|
|
|
|
|
|
|
if (config.responseReturn === 'raw') { |
|
|
|
return response; |
|
|
|
} |
|
|
|
const code = responseData[codeField]; |
|
|
|
if ( |
|
|
|
status >= 200 && status < 400 && isFunction(successCode) |
|
|
|
? successCode(code) |
|
|
|
: code === successCode |
|
|
|
) { |
|
|
|
if (config.responseReturn === 'body') { |
|
|
|
return responseData; |
|
|
|
} else { |
|
|
|
return isFunction(dataField) |
|
|
|
? dataField(responseData) |
|
|
|
: responseData[dataField]; |
|
|
|
} |
|
|
|
} |
|
|
|
throw Object.assign({}, response, { response }); |
|
|
|
}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
export const authenticateResponseInterceptor = ({ |
|
|
|
client, |
|
|
|
doReAuthenticate, |
|
|
|
|