new shared and DataTableResult

* new transform data to options function
* new Service Result with Pagination info
This commit is contained in:
xumin 2023-07-20 19:20:42 +08:00
parent 458e387b68
commit 1795cf84f3
4 changed files with 60 additions and 9 deletions

View File

@ -4,3 +4,18 @@ export function transformObjectToOption<T extends object>(obj: T) {
label
})) as Common.OptionWithKey<keyof T>[];
}
/**
* select options
* @param obj
* @param valueKey
* @param labelKey
*/
export function transformDataToOption<T extends object>(obj: T, valueKey: string, labelKey: string) {
return Object.entries(obj).map(item => {
return {
label: item[1][labelKey],
value: item[1][valueKey]
};
}) as Common.OptionWithKey<keyof T>[];
}

View File

@ -37,6 +37,7 @@ export default class CustomAxiosInstance {
codeKey: 'code',
dataKey: 'data',
msgKey: 'message',
pageKey: 'page',
successCode: 200
}
) {
@ -63,7 +64,7 @@ export default class CustomAxiosInstance {
},
(axiosError: AxiosError) => {
const error = handleAxiosError(axiosError);
return handleServiceResult(error, null);
return handleServiceResult(error, null, null);
}
);
this.instance.interceptors.response.use(
@ -71,10 +72,14 @@ export default class CustomAxiosInstance {
const { status, config } = response;
if (status === 200 || status < 300 || status === 304) {
const backend = response.data;
const { codeKey, dataKey, successCode } = this.backendConfig;
const { codeKey, pageKey, dataKey, successCode } = this.backendConfig;
// 请求成功
if (backend[codeKey] === successCode) {
return handleServiceResult(null, backend[dataKey]);
// 分页处理
if (backend[pageKey]) {
return handleServiceResult(null, backend[pageKey], backend[dataKey]);
}
return handleServiceResult(null, null, backend[dataKey]);
}
// token失效, 刷新token

View File

@ -26,6 +26,8 @@ declare namespace Service {
dataKey: string;
/** 表示后端消息的属性字段 */
msgKey: string;
/** 分页数据的属性字段 */
pageKey: string;
/** 后端业务上定义的成功请求的状态 */
successCode: number | string;
}
@ -38,6 +40,13 @@ declare namespace Service {
data: T;
}
/** 带分页的请求成功结果 */
interface DataTablResult<T = any> {
error: null;
data: T;
page: any;
}
/** 自定义的请求失败结果 */
interface FailedResult {
/** 请求错误 */
@ -47,7 +56,7 @@ declare namespace Service {
}
/** 自定义的请求结果 */
type RequestResult<T = any> = SuccessResult<T> | FailedResult;
type RequestResult<T = any> = SuccessResult<T> | DataTablResult<T> | FailedResult;
/** 多个请求数据结果 */
type MultiRequestResult<T extends any[]> = T extends [infer First, ...infer Rest]

View File

@ -1,5 +1,5 @@
/** 统一失败和成功的请求结果的数据类型 */
export async function handleServiceResult<T = any>(error: Service.RequestError | null, data: any) {
export async function handleServiceResult<T = any>(error: Service.RequestError | null, page: any, data: any) {
if (error) {
const fail: Service.FailedResult = {
error,
@ -7,6 +7,15 @@ export async function handleServiceResult<T = any>(error: Service.RequestError |
};
return fail;
}
if (page) {
const pageresult: Service.DataTablResult = {
error: null,
page: page,
data
};
return pageresult;
}
const success: Service.SuccessResult<T> = {
error: null,
data
@ -34,10 +43,23 @@ export function adapter<T extends Service.ServiceAdapter>(
if (!hasError) {
const adapterFunArgs = args.map(item => item.data);
result = {
error: null,
data: adapterFun(...adapterFunArgs)
};
const hasPage = args.some(item => {
if (item.page) {
result = {
error: null,
page: item.page,
data: adapterFun(...adapterFunArgs)
};
return true;
}
return false;
});
if(!hasPage){
result = {
error: null,
data: adapterFun(...adapterFunArgs)
};
}
}
return result!;