Browse Source

feat(wrapper): process the wrapper results

pull/438/head
cKey 4 years ago
parent
commit
30a478ca51
  1. 5
      apps/vue/src/enums/httpEnum.ts
  2. 34
      apps/vue/src/utils/http/axios/index.ts
  3. 4
      apps/vue/types/axios.d.ts

5
apps/vue/src/enums/httpEnum.ts

@ -2,10 +2,9 @@
* @description: Request result set * @description: Request result set
*/ */
export enum ResultEnum { export enum ResultEnum {
CODE = '0',
SUCCESS = 0, SUCCESS = 0,
ERROR = 1, MESSAGE = 'OK',
TIMEOUT = 401,
TYPE = 'success',
} }
/** /**

34
apps/vue/src/utils/http/axios/index.ts

@ -7,9 +7,11 @@ import type { AxiosTransform, CreateAxiosOptions } from './axiosTransform';
import { VAxios } from './Axios'; import { VAxios } from './Axios';
import { checkResponse } from './checkStatus'; import { checkResponse } from './checkStatus';
import { useGlobSetting } from '/@/hooks/setting'; import { useGlobSetting } from '/@/hooks/setting';
import { RequestEnum, ContentTypeEnum } from '/@/enums/httpEnum'; import { useMessage } from '/@/hooks/web/useMessage';
import { RequestEnum, ResultEnum, ContentTypeEnum } from '/@/enums/httpEnum';
import { isString } from '/@/utils/is'; import { isString } from '/@/utils/is';
import { getToken } from '/@/utils/auth'; import { getToken } from '/@/utils/auth';
import { useI18n } from '/@/hooks/web/useI18n';
import { setObjToUrlParams, deepMerge } from '/@/utils'; import { setObjToUrlParams, deepMerge } from '/@/utils';
import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog'; import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog';
import { joinTimestamp, formatRequestDate } from './helper'; import { joinTimestamp, formatRequestDate } from './helper';
@ -18,6 +20,7 @@ import { Persistent } from '../../cache/persistent';
const globSetting = useGlobSetting(); const globSetting = useGlobSetting();
const urlPrefix = globSetting.urlPrefix; const urlPrefix = globSetting.urlPrefix;
const { createMessage, createErrorModal } = useMessage();
/** /**
* @description: 便 * @description: 便
@ -27,14 +30,39 @@ const transform: AxiosTransform = {
* @description: * @description:
*/ */
transformRequestHook: (res: AxiosResponse<Result>, options: RequestOptions) => { transformRequestHook: (res: AxiosResponse<Result>, options: RequestOptions) => {
const { t } = useI18n();
const { isReturnNativeResponse } = options; const { isReturnNativeResponse } = options;
// 是否返回原生响应头 比如:需要获取响应头时使用该属性 // 是否返回原生响应头 比如:需要获取响应头时使用该属性
if (isReturnNativeResponse) { if (isReturnNativeResponse) {
return res; return res;
} }
const { data } = res;
if (!data) {
// return '[HTTP] Request has no return value';
throw new Error(t('sys.api.apiRequestFailed'));
}
// 对包装结果处理
if (res.headers['_abpwrapresult'] === 'true') {
const { code, result, message, details } = data;
const hasSuccess = data && Reflect.has(data, 'code') && code === ResultEnum.CODE;
if (hasSuccess) {
return result;
}
const title = details ? message : t('sys.api.errorTip');
const content = details ? details : message;
if (options.errorMessageMode === 'modal') {
createErrorModal({ title: title, content: content });
} else if (options.errorMessageMode === 'message') {
createMessage.error(content);
}
throw new Error(content || t('sys.api.apiRequestFailed'));
}
return res.data; return res.data;
// 不进行任何处理,直接返回
// 用于页面代码可能需要直接获取code,data,message这些信息时开启
}, },
// 请求之前处理config // 请求之前处理config

4
apps/vue/types/axios.d.ts

@ -26,9 +26,9 @@ export interface RequestOptions {
} }
export interface Result<T = any> { export interface Result<T = any> {
code: number; code: number | string;
type: 'success' | 'error' | 'warning';
message: string; message: string;
details?: string;
result: T; result: T;
} }

Loading…
Cancel
Save