diff --git a/clinical-web/src/api/auth.ts b/clinical-web/src/api/auth.ts index 836af75..5c49c91 100644 --- a/clinical-web/src/api/auth.ts +++ b/clinical-web/src/api/auth.ts @@ -1,5 +1,6 @@ import axios from 'axios' +import { ApiResponseError, unwrapApiResponse } from '@/utils/api-response' import { request } from '@/utils/request' import type { AuthenticatedUser, @@ -9,33 +10,7 @@ import type { } from '@/types/auth' import type { ApiResponse } from '@/types/common' -export class ApiResponseError extends Error { - readonly code: number | string - readonly traceId?: string - - constructor(response: ApiResponse) { - super(response.message || '接口请求失败') - this.name = 'ApiResponseError' - this.code = response.code - this.traceId = response.traceId - } -} - -function isSuccessCode(code: number | string) { - return code === 0 || code === '0' -} - -function unwrapApiResponse(response: ApiResponse): T { - if (!isSuccessCode(response.code)) { - throw new ApiResponseError(response) - } - - if (response.data === null) { - throw new Error(response.message || '接口未返回业务数据') - } - - return response.data -} +export { ApiResponseError } from '@/utils/api-response' function normalizePermissions(value: unknown): string[] { if (Array.isArray(value)) { diff --git a/clinical-web/src/utils/api-response.ts b/clinical-web/src/utils/api-response.ts new file mode 100644 index 0000000..135292e --- /dev/null +++ b/clinical-web/src/utils/api-response.ts @@ -0,0 +1,37 @@ +import type { ApiResponse } from '@/types/common' + +export class ApiResponseError extends Error { + readonly code: number | string + readonly traceId?: string + + constructor(response: ApiResponse) { + super(response.message || '接口请求失败') + this.name = 'ApiResponseError' + this.code = response.code + this.traceId = response.traceId + } +} + +export function isSuccessCode(code: number | string) { + return code === 0 || code === '0' +} + +export function unwrapApiResponse(response: ApiResponse): T { + if (!isSuccessCode(response.code)) { + throw new ApiResponseError(response) + } + + if (response.data === null) { + throw new Error(response.message || '接口未返回业务数据') + } + + return response.data +} + +export function unwrapNullableApiResponse(response: ApiResponse): T | null { + if (!isSuccessCode(response.code)) { + throw new ApiResponseError(response) + } + + return response.data +}