@peng_kai/kit 0.0.14 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +41 -0
- package/admin/components/filter/index.ts +5 -0
- package/admin/{filter → components/filter/src}/FilterDrawer.vue +99 -96
- package/admin/{filter → components/filter/src}/FilterParam.vue +76 -76
- package/admin/{filter → components/filter/src}/FilterReset.vue +7 -4
- package/admin/{filter → components/filter/src}/useFilterParams.ts +9 -9
- package/admin/{filter → components/filter/src}/useFilterQuery.ts +11 -11
- package/admin/components/scroll-nav/index.ts +1 -1
- package/admin/components/scroll-nav/src/ScrollNav.vue +59 -59
- package/admin/components/text/index.ts +13 -13
- package/admin/components/text/src/Amount.vue +117 -114
- package/admin/components/text/src/Datetime.vue +44 -44
- package/admin/components/text/src/Duration.vue +26 -26
- package/admin/components/text/src/Hash.vue +42 -40
- package/admin/components/text/src/createTagGetter.ts +13 -13
- package/admin/defines/index.ts +4 -5
- package/admin/defines/page/definePage.ts +12 -0
- package/admin/defines/page/index.ts +1 -0
- package/admin/defines/route/defineRoute.ts +14 -0
- package/admin/defines/route/getRoutes.ts +84 -0
- package/admin/defines/route/helpers.ts +49 -0
- package/admin/defines/route/index.ts +73 -0
- package/admin/defines/route-guard/defineRouteGuard.ts +18 -0
- package/admin/defines/route-guard/getRouteGuards.ts +40 -0
- package/admin/defines/route-guard/index.ts +2 -0
- package/admin/defines/startup/defineStartup.ts +11 -0
- package/admin/defines/startup/getStartups.ts +30 -0
- package/admin/defines/startup/index.ts +2 -0
- package/admin/hooks/index.ts +5 -6
- package/admin/hooks/useMenu.ts +128 -128
- package/admin/hooks/usePage.ts +141 -139
- package/admin/hooks/usePageTab.ts +35 -35
- package/admin/layout/large/Breadcrumb.vue +69 -70
- package/admin/layout/large/Content.vue +24 -24
- package/admin/layout/large/Menu.vue +69 -68
- package/admin/layout/large/PageTab.vue +71 -71
- package/admin/layout/large/index.ts +4 -4
- package/admin/permission/index.ts +4 -0
- package/admin/permission/routerGuard.ts +43 -0
- package/admin/permission/usePermission.ts +52 -0
- package/admin/permission/vuePlugin.ts +30 -0
- package/admin/route-guards/index.ts +2 -0
- package/admin/route-guards/pageProgress.ts +16 -0
- package/admin/route-guards/pageTitle.ts +24 -0
- package/admin/styles/globalCover.scss +43 -43
- package/admin/types/assist.ts +10 -0
- package/admin/unocss/index.ts +1 -1
- package/antd/components/InputNumberRange.vue +53 -47
- package/antd/directives/formLabelAlign.ts +36 -31
- package/antd/hooks/createAntdModal.ts +29 -29
- package/antd/hooks/useAntdDrawer.ts +73 -73
- package/antd/hooks/useAntdForm.helpers.ts +18 -18
- package/antd/hooks/useAntdForm.ts +38 -37
- package/antd/hooks/useAntdModal.ts +25 -25
- package/antd/hooks/useAntdTable.ts +70 -70
- package/antd/hooks/useAntdTheme.ts +86 -0
- package/antd/index.ts +8 -7
- package/eslint.config.js +50 -0
- package/kitDependencies.ts +21 -7
- package/package.json +46 -40
- package/pnpm-lock.yaml +2689 -0
- package/request/helpers.ts +49 -32
- package/request/index.ts +2 -2
- package/request/interceptors/checkCode.ts +8 -8
- package/request/interceptors/filterEmptyValue.ts +9 -9
- package/request/interceptors/formatPaging.ts +12 -12
- package/request/interceptors/index.ts +7 -6
- package/request/interceptors/popupMessage.ts +35 -35
- package/request/interceptors/returnResultType.ts +19 -19
- package/request/interceptors/toLogin.ts +13 -0
- package/request/interceptors/unitizeAxiosError.ts +7 -7
- package/request/queryClient.ts +42 -0
- package/request/request.ts +21 -21
- package/request/type.d.ts +89 -89
- package/tsconfig.json +47 -18
- package/utils/index.ts +67 -29
- package/vue/components/index.ts +1 -0
- package/{components → vue/components}/infinite-query/index.ts +1 -1
- package/{components → vue/components}/infinite-query/src/InfiniteQuery.vue +147 -147
- package/{components → vue/components}/infinite-query/src/useCreateTrigger.ts +35 -35
- package/vue/hooks/useComponentRef.ts +12 -12
- package/vue/hooks/useIsMounted.ts +4 -4
- package/vue/hooks/useTeleportTarget.ts +7 -7
- package/vue/index.ts +4 -3
- package/admin/defines/definePage.ts +0 -14
- package/admin/defines/defineRoute.helpers.ts +0 -30
- package/admin/defines/defineRoute.ts +0 -161
- package/admin/defines/defineRouteGuard.ts +0 -56
- package/admin/defines/defineStartup.ts +0 -41
- package/admin/filter/index.ts +0 -5
- package/admin/hooks/usePermission.ts +0 -5
package/request/helpers.ts
CHANGED
|
@@ -1,32 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
1
|
+
import type { AxiosInstance } from 'axios';
|
|
2
|
+
|
|
3
|
+
export { isTimeout, getServices, ApiCode, ApiError };
|
|
4
|
+
|
|
5
|
+
enum ApiCode {
|
|
6
|
+
NORMAL = 0, // 正常
|
|
7
|
+
UNKNOWN = -1, // 未知错误
|
|
8
|
+
TIMEOUT = -2, // 请求超时
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function getServices() {
|
|
12
|
+
const serversModule = getServices.modules;
|
|
13
|
+
const servers: Record<string, { server: AxiosInstance } | undefined> = {};
|
|
14
|
+
|
|
15
|
+
for (const [key, module] of Object.entries(serversModule)) {
|
|
16
|
+
const name = key.match(/\/([0-9a-zA-Z]+)\.ts$/)?.[1];
|
|
17
|
+
|
|
18
|
+
if (name)
|
|
19
|
+
servers[`${name}.api`] = module as any;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return servers;
|
|
23
|
+
}
|
|
24
|
+
getServices.modules = {} as any;
|
|
25
|
+
|
|
26
|
+
function isTimeout(error: any) {
|
|
27
|
+
return error?.message?.toLowerCase().includes('timeout');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
class ApiError<TResp = any> extends Error {
|
|
31
|
+
public static is<ErrorResp = any>(error: any): error is ApiError<ErrorResp> {
|
|
32
|
+
return !!error?.isApiError;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 将HTTP status和Api code统一到一个code里
|
|
37
|
+
*/
|
|
38
|
+
public code: number;
|
|
39
|
+
public msg: string;
|
|
40
|
+
public data: TResp;
|
|
41
|
+
public isApiError = true;
|
|
42
|
+
|
|
43
|
+
public constructor(info: { code: number, msg: string, data: TResp }) {
|
|
44
|
+
super(info.msg);
|
|
45
|
+
this.code = info.code;
|
|
46
|
+
this.msg = info.msg;
|
|
47
|
+
this.data = info.data;
|
|
48
|
+
}
|
|
49
|
+
}
|
package/request/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import axios from
|
|
2
|
-
import type { AxiosInterceptorManager } from
|
|
3
|
-
import {
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import type { AxiosInterceptorManager } from 'axios';
|
|
3
|
+
import { ApiCode } from '../helpers';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* 【响应拦截器】检查 API 的 code 字段
|
|
@@ -19,10 +19,10 @@ export function checkCode(): Parameters<AxiosInterceptorManager<any>['use']> {
|
|
|
19
19
|
resp.config,
|
|
20
20
|
resp.request,
|
|
21
21
|
resp,
|
|
22
|
-
)
|
|
22
|
+
);
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
return resp
|
|
26
|
-
}
|
|
27
|
-
]
|
|
24
|
+
|
|
25
|
+
return resp;
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
28
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AxiosInterceptorManager } from
|
|
2
|
-
import pickBy from 'lodash-es/pickBy'
|
|
1
|
+
import type { AxiosInterceptorManager } from 'axios';
|
|
2
|
+
import pickBy from 'lodash-es/pickBy';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* 【请求拦截器】过滤空值,如:null、undefined、''、NaN
|
|
@@ -8,10 +8,10 @@ export function filterEmptyValue(): Parameters<AxiosInterceptorManager<any>['use
|
|
|
8
8
|
return [
|
|
9
9
|
(req) => {
|
|
10
10
|
req.params = pickBy(req.params, (v) => {
|
|
11
|
-
return v !== null && v !== undefined && v !== '' && !Number.isNaN(v)
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
return req
|
|
15
|
-
}
|
|
16
|
-
]
|
|
17
|
-
}
|
|
11
|
+
return v !== null && v !== undefined && v !== '' && !Number.isNaN(v);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
return req;
|
|
15
|
+
},
|
|
16
|
+
];
|
|
17
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AxiosInterceptorManager } from
|
|
1
|
+
import type { AxiosInterceptorManager } from 'axios';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* 【响应拦截器】格式化分页数据
|
|
@@ -6,21 +6,21 @@ import type { AxiosInterceptorManager } from "axios";
|
|
|
6
6
|
export function formatPaging(): Parameters<AxiosInterceptorManager<any>['use']> {
|
|
7
7
|
return [
|
|
8
8
|
(resp) => {
|
|
9
|
-
const result = resp?.data
|
|
10
|
-
|
|
9
|
+
const result = resp?.data;
|
|
10
|
+
|
|
11
11
|
if (!result)
|
|
12
|
-
return resp
|
|
13
|
-
|
|
12
|
+
return resp;
|
|
13
|
+
|
|
14
14
|
if (result.pagination) {
|
|
15
15
|
result.data = {
|
|
16
16
|
list: result.data,
|
|
17
17
|
pagination: result.pagination,
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
Reflect.deleteProperty(result, 'pagination')
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
Reflect.deleteProperty(result, 'pagination');
|
|
21
21
|
}
|
|
22
|
-
|
|
23
|
-
return resp
|
|
24
|
-
}
|
|
25
|
-
]
|
|
22
|
+
|
|
23
|
+
return resp;
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
26
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
export { popupMessage } from './popupMessage'
|
|
2
|
-
export { returnResultType } from './returnResultType'
|
|
3
|
-
export { unitizeAxiosError } from './unitizeAxiosError'
|
|
4
|
-
export { checkCode } from './checkCode'
|
|
5
|
-
export { formatPaging } from './formatPaging'
|
|
6
|
-
export { filterEmptyValue } from './filterEmptyValue'
|
|
1
|
+
export { popupMessage } from './popupMessage';
|
|
2
|
+
export { returnResultType } from './returnResultType';
|
|
3
|
+
export { unitizeAxiosError } from './unitizeAxiosError';
|
|
4
|
+
export { checkCode } from './checkCode';
|
|
5
|
+
export { formatPaging } from './formatPaging';
|
|
6
|
+
export { filterEmptyValue } from './filterEmptyValue';
|
|
7
|
+
export { toLogin } from './toLogin';
|
|
7
8
|
|
|
8
9
|
declare module 'axios' {
|
|
9
10
|
interface AxiosRequestConfig {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import axios from 'axios'
|
|
2
|
-
import type { AxiosInterceptorManager } from
|
|
3
|
-
import { isTimeout } from
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import type { AxiosInterceptorManager } from 'axios';
|
|
3
|
+
import { isTimeout } from '../helpers';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* 【响应拦截器】弹出 message 提示
|
|
@@ -8,44 +8,44 @@ import { isTimeout } from "../helpers";
|
|
|
8
8
|
*/
|
|
9
9
|
export function popupMessage(popup: (type: 'error' | 'success', message: string) => void): Parameters<AxiosInterceptorManager<any>['use']> {
|
|
10
10
|
return [
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
(resp) => {
|
|
12
|
+
const successMessageConfig = resp?.config?.successMessage;
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
if (successMessageConfig === false)
|
|
15
|
+
return resp;
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
let successMsg = successMessageConfig;
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
if (typeof successMessageConfig !== 'string')
|
|
20
|
+
successMsg = resp?.data?.msg;
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
popup('success', successMsg);
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
return resp;
|
|
25
|
+
},
|
|
26
|
+
(error) => {
|
|
27
|
+
const errorMessageConfig = error?.config?.errorMessage;
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
if (errorMessageConfig === false)
|
|
30
|
+
throw error;
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
let errorMsg: boolean | string = errorMessageConfig;
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
if (axios.isAxiosError(error)) {
|
|
35
35
|
// 请求超时
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
]
|
|
51
|
-
}
|
|
36
|
+
if (isTimeout(error))
|
|
37
|
+
errorMsg = 'Request Timeout';
|
|
38
|
+
else if (typeof errorMessageConfig !== 'string')
|
|
39
|
+
errorMsg = error.response?.data?.msg || error.message || error.response?.statusText;
|
|
40
|
+
}
|
|
41
|
+
else if (error instanceof Error && typeof errorMessageConfig !== 'string') {
|
|
42
|
+
errorMsg = error.message;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (typeof errorMsg === 'string')
|
|
46
|
+
popup('error', errorMsg);
|
|
47
|
+
|
|
48
|
+
throw error;
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AxiosInterceptorManager } from
|
|
2
|
-
import { ApiCode,
|
|
1
|
+
import type { AxiosInterceptorManager } from 'axios';
|
|
2
|
+
import { ApiCode, ApiError, isTimeout } from '../helpers';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* 【响应拦截器】返回请求结果
|
|
@@ -7,27 +7,27 @@ import { ApiCode, isTimeout, ApiError } from "../helpers";
|
|
|
7
7
|
export function returnResultType(): Parameters<AxiosInterceptorManager<any>['use']> {
|
|
8
8
|
return [
|
|
9
9
|
(resp) => {
|
|
10
|
-
const { resultType } = resp.config
|
|
11
|
-
|
|
10
|
+
const { resultType } = resp.config;
|
|
11
|
+
|
|
12
12
|
if (resultType === 'api')
|
|
13
|
-
return resp.data
|
|
14
|
-
|
|
13
|
+
return resp.data;
|
|
14
|
+
|
|
15
15
|
else if (resultType === 'axios')
|
|
16
|
-
return resp
|
|
17
|
-
|
|
18
|
-
return resp.data?.data
|
|
16
|
+
return resp;
|
|
17
|
+
|
|
18
|
+
return resp.data?.data;
|
|
19
19
|
},
|
|
20
20
|
(error) => {
|
|
21
|
-
let code = error?.response?.data?.code || error?.response?.status || ApiCode.UNKNOWN
|
|
22
|
-
let msg = error?.response?.data?.msg || error?.message || error?.response?.statusText || 'Unknown Error'
|
|
23
|
-
const data = error?.response?.data?.data || null
|
|
24
|
-
|
|
21
|
+
let code = error?.response?.data?.code || error?.response?.status || ApiCode.UNKNOWN;
|
|
22
|
+
let msg = error?.response?.data?.msg || error?.message || error?.response?.statusText || 'Unknown Error';
|
|
23
|
+
const data = error?.response?.data?.data || null;
|
|
24
|
+
|
|
25
25
|
if (isTimeout(error)) {
|
|
26
|
-
code = ApiCode.TIMEOUT
|
|
27
|
-
msg = 'Request Timeout'
|
|
26
|
+
code = ApiCode.TIMEOUT;
|
|
27
|
+
msg = 'Request Timeout';
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
throw new ApiError({ code, msg, data })
|
|
29
|
+
|
|
30
|
+
throw new ApiError({ code, msg, data });
|
|
31
31
|
},
|
|
32
|
-
]
|
|
33
|
-
}
|
|
32
|
+
];
|
|
33
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AxiosInterceptorManager } from 'axios';
|
|
2
|
+
|
|
3
|
+
export function toLogin(path = '/auth/login', code = 15001): Parameters<AxiosInterceptorManager<any>['use']> {
|
|
4
|
+
return [
|
|
5
|
+
undefined,
|
|
6
|
+
(err) => {
|
|
7
|
+
if (err.code === code)
|
|
8
|
+
window.location.href = path;
|
|
9
|
+
|
|
10
|
+
throw err;
|
|
11
|
+
},
|
|
12
|
+
];
|
|
13
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import axios from
|
|
2
|
-
import type { AxiosInterceptorManager } from
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import type { AxiosInterceptorManager } from 'axios';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* 【响应拦截器】统一处理 AxiosError
|
|
@@ -9,15 +9,15 @@ export function unitizeAxiosError(): Parameters<AxiosInterceptorManager<any>['us
|
|
|
9
9
|
resp => resp,
|
|
10
10
|
(error) => {
|
|
11
11
|
if (axios.isAxiosError(error))
|
|
12
|
-
throw error
|
|
12
|
+
throw error;
|
|
13
13
|
|
|
14
14
|
if (error instanceof Error)
|
|
15
|
-
throw new axios.AxiosError(`${error.message}[AppError01]`)
|
|
15
|
+
throw new axios.AxiosError(`${error.message}[AppError01]`);
|
|
16
16
|
|
|
17
17
|
if (typeof error === 'object')
|
|
18
|
-
throw new axios.AxiosError(`${JSON.stringify(error)}[AppError02]`)
|
|
18
|
+
throw new axios.AxiosError(`${JSON.stringify(error)}[AppError02]`);
|
|
19
19
|
|
|
20
|
-
throw new axios.AxiosError(`${String(error)}[AppError03]`)
|
|
20
|
+
throw new axios.AxiosError(`${String(error)}[AppError03]`);
|
|
21
21
|
},
|
|
22
|
-
]
|
|
22
|
+
];
|
|
23
23
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { QueryClientConfig } from '@tanstack/vue-query';
|
|
2
|
+
|
|
3
|
+
/** 不需要重试的 api code */
|
|
4
|
+
export const ignoreRetryCodes = [
|
|
5
|
+
11000, // 操作失败
|
|
6
|
+
11001, // 操作过于频繁
|
|
7
|
+
11002, // 权限不足
|
|
8
|
+
11003, // 缺少必要参数
|
|
9
|
+
15001, // 未登录
|
|
10
|
+
];
|
|
11
|
+
|
|
12
|
+
export const presetOptions: QueryClientConfig = {
|
|
13
|
+
defaultOptions: {
|
|
14
|
+
queries: {
|
|
15
|
+
refetchOnWindowFocus: false,
|
|
16
|
+
retry(failureCount, error: any) {
|
|
17
|
+
if (ignoreRetryCodes.includes(error?.code))
|
|
18
|
+
return false;
|
|
19
|
+
|
|
20
|
+
return failureCount < 3;
|
|
21
|
+
},
|
|
22
|
+
getNextPageParam: (lastPage: any) => {
|
|
23
|
+
const { pagination } = lastPage ?? {};
|
|
24
|
+
|
|
25
|
+
if (pagination?.has_more) {
|
|
26
|
+
return {
|
|
27
|
+
page: (pagination.page ?? 0) + 1,
|
|
28
|
+
page_size: pagination?.page_size ?? 10,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
getPreviousPageParam: (lastPage: any) => {
|
|
33
|
+
const { pagination } = lastPage ?? {};
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
page: (pagination.page ?? 1) - 1,
|
|
37
|
+
page_size: pagination?.page_size ?? 10,
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
package/request/request.ts
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import type { AxiosRequestConfig, AxiosResponse
|
|
1
|
+
import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
2
2
|
|
|
3
|
-
export { createRequest }
|
|
3
|
+
export { createRequest };
|
|
4
4
|
|
|
5
5
|
function createRequest<Req, OResp, Resp = Api.TransformPageResult<OResp>>(
|
|
6
6
|
// function createRequest<Req, OResp, Resp = OResp>(
|
|
7
7
|
id: string,
|
|
8
8
|
paramBuilder: (params: any) => any,
|
|
9
9
|
) {
|
|
10
|
-
type ReqConfig = Partial<AxiosRequestConfig
|
|
11
|
-
let defaultConfig: ReqConfig | null = null
|
|
10
|
+
type ReqConfig = Partial<AxiosRequestConfig>;
|
|
11
|
+
let defaultConfig: ReqConfig | null = null;
|
|
12
12
|
|
|
13
13
|
// 返回 Axios 的 Response
|
|
14
|
-
async function request<Rt extends 'axios'>(reqData: Req, options: ReqConfig & { resultType: Rt }): Promise<AxiosResponse<Resp
|
|
14
|
+
async function request<Rt extends 'axios'>(reqData: Req, options: ReqConfig & { resultType: Rt }): Promise<AxiosResponse<Resp>>;
|
|
15
15
|
// 返回 API 数据
|
|
16
|
-
async function request<Rt extends 'api'>(reqData: Req, options: ReqConfig & { resultType: Rt }): Promise<Resp
|
|
16
|
+
async function request<Rt extends 'api'>(reqData: Req, options: ReqConfig & { resultType: Rt }): Promise<Resp>;
|
|
17
17
|
// 返回 API 数据中的 data 字段值,默认
|
|
18
|
-
async function request(reqData: Req, config?: ReqConfig): Promise<Api.GetDataField<Resp
|
|
18
|
+
async function request(reqData: Req, config?: ReqConfig): Promise<Api.GetDataField<Resp>>;
|
|
19
19
|
async function request(reqData: Req, config?: ReqConfig): Promise<any> {
|
|
20
|
-
const params = paramBuilder(reqData)
|
|
21
|
-
const serviceName = params.headers?.['Service-Name'] ?? ''
|
|
22
|
-
const service = createRequest.services[serviceName]?.server
|
|
20
|
+
const params = paramBuilder(reqData);
|
|
21
|
+
const serviceName = params.headers?.['Service-Name'] ?? '';
|
|
22
|
+
const service = createRequest.services[serviceName]?.server;
|
|
23
23
|
|
|
24
24
|
if (service)
|
|
25
|
-
Reflect.deleteProperty(params.headers, 'Service-Name')
|
|
25
|
+
Reflect.deleteProperty(params.headers, 'Service-Name');
|
|
26
26
|
else
|
|
27
|
-
throw new Error(`${serviceName} 接口服务不存在`)
|
|
27
|
+
throw new Error(`${serviceName} 接口服务不存在`);
|
|
28
28
|
|
|
29
29
|
const res = await service.request({
|
|
30
30
|
apiName: `${serviceName}/${id}`,
|
|
31
31
|
...params,
|
|
32
32
|
...Object.assign({}, defaultConfig, config),
|
|
33
|
-
})
|
|
33
|
+
});
|
|
34
34
|
|
|
35
|
-
return res as Api.GetDataField<Resp
|
|
35
|
+
return res as Api.GetDataField<Resp>;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
request.id = id
|
|
38
|
+
request.id = id;
|
|
39
39
|
request.setDefaultConfig = (config: ReqConfig) => {
|
|
40
|
-
defaultConfig = config
|
|
41
|
-
return request
|
|
42
|
-
}
|
|
40
|
+
defaultConfig = config;
|
|
41
|
+
return request;
|
|
42
|
+
};
|
|
43
43
|
|
|
44
|
-
return request
|
|
44
|
+
return request;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
// 服务
|
|
48
48
|
createRequest.services = {} as Record<string, {
|
|
49
|
-
server: AxiosInstance
|
|
50
|
-
} | undefined
|
|
49
|
+
server: AxiosInstance
|
|
50
|
+
} | undefined>;
|