|
|
@@ -5,6 +5,11 @@ import { message } from 'ant-design-vue';
|
|
|
|
|
|
import { useAuthStore } from '#/store';
|
|
|
|
|
|
+import {
|
|
|
+ transformDatabaseResponse,
|
|
|
+ transformHttpResponse,
|
|
|
+} from '#/api/utils/response-transform';
|
|
|
+
|
|
|
import '@six/request/alova';
|
|
|
|
|
|
export * from './method/access';
|
|
|
@@ -16,73 +21,7 @@ export * from './method/system';
|
|
|
|
|
|
export const http = createRequestClient({
|
|
|
id: import.meta.env.VITE_APP_NAMESPACE?.split('/').pop() ?? 'smart-pharmacy',
|
|
|
- transform(body, method) {
|
|
|
- /* prettier-ignore */
|
|
|
- if (body === null || typeof body !== 'object') return { code: 0, data: body, message: 'ok' };
|
|
|
-
|
|
|
- let code: number;
|
|
|
- let message: string;
|
|
|
- let data: Recordable;
|
|
|
- let rest: Recordable = {};
|
|
|
-
|
|
|
- if ('code' in body && ('msg' in body || 'message' in body)) {
|
|
|
- const rawCode = body.code as number;
|
|
|
- code = rawCode === 200 ? 0 : rawCode;
|
|
|
- message = (body.msg ?? body.message ?? '') as string;
|
|
|
- data = (body.data ?? (body.user ? body : void 0)) as Recordable;
|
|
|
- if (!data && Array.isArray(body.rows)) {
|
|
|
- data = {
|
|
|
- total: body.total ?? 0,
|
|
|
- items: body.rows,
|
|
|
- };
|
|
|
- }
|
|
|
- // 角色菜单树等接口:menus、checkedKeys 可能与 data 平级返回
|
|
|
- if (Array.isArray(body.menus) || Array.isArray(body.checkedKeys)) {
|
|
|
- data = {
|
|
|
- ...(data && typeof data === 'object' ? data : {}),
|
|
|
- menus: body.menus ?? data?.menus,
|
|
|
- checkedKeys: body.checkedKeys ?? data?.checkedKeys,
|
|
|
- };
|
|
|
- }
|
|
|
- const { code: _c, msg: _m, message: _msg, data: _d, ...r } = body;
|
|
|
- rest = r;
|
|
|
- }
|
|
|
- const result = { code, message, data, ...rest };
|
|
|
-
|
|
|
- if (
|
|
|
- result.data?.TotalPageCount !== void 0 &&
|
|
|
- Array.isArray(result.data?.Items)
|
|
|
- ) {
|
|
|
- const {
|
|
|
- TotalRecordCount: total,
|
|
|
- PageIndex: page,
|
|
|
- PageSize: size,
|
|
|
- Items: items,
|
|
|
- } = result.data;
|
|
|
- result.data = {
|
|
|
- total,
|
|
|
- items,
|
|
|
- data: { page, size, total },
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
- /* 额外处理登录接口 */
|
|
|
- if (method.meta?.login || method.meta?.authRole === 'login') {
|
|
|
- const { access_token, token, expires_in, ...loginData } = result.data ?? {};
|
|
|
- const accessToken = access_token ?? token;
|
|
|
- result.data = {
|
|
|
- accessToken: accessToken
|
|
|
- ? String(accessToken).startsWith('Bearer ')
|
|
|
- ? accessToken
|
|
|
- : `Bearer ${accessToken}`
|
|
|
- : '',
|
|
|
- refreshToken: null,
|
|
|
- expiresIn: expires_in,
|
|
|
- ...loginData,
|
|
|
- };
|
|
|
- }
|
|
|
- return result;
|
|
|
- },
|
|
|
+ transform: transformHttpResponse,
|
|
|
});
|
|
|
http.interceptor('error', async (error) => {
|
|
|
if (error?.code === 401) await useAuthStore().logout();
|
|
|
@@ -91,9 +30,7 @@ http.interceptor('error', async (error) => {
|
|
|
|
|
|
export const database = createRequestClient({
|
|
|
baseURL: `${import.meta.env.BASE_URL}database`,
|
|
|
- transform(body) {
|
|
|
- return { code: 0, data: body, message: 'ok' } as any;
|
|
|
- },
|
|
|
+ transform: transformDatabaseResponse,
|
|
|
});
|
|
|
|
|
|
export type TransformData<T = any> = Recordable<T>;
|