This commit is contained in:
31
src/utils/business/apiError.ts
Normal file
31
src/utils/business/apiError.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import axios from 'axios'
|
||||
|
||||
export type ApiErrorKind = 'auth' | 'forbidden' | 'validation' | 'conflict' | 'timeout' | 'server' | 'unknown'
|
||||
|
||||
export interface NormalizedApiError {
|
||||
kind: ApiErrorKind
|
||||
status?: number
|
||||
code?: number | string
|
||||
message: string
|
||||
unknownResult: boolean
|
||||
}
|
||||
|
||||
const getResponse = (error: unknown) => (axios.isAxiosError(error) ? error.response : undefined)
|
||||
|
||||
export const normalizeApiError = (error: unknown): NormalizedApiError => {
|
||||
const response = getResponse(error)
|
||||
const status = response?.status
|
||||
const code = response?.data?.code
|
||||
const backendMessage = response?.data?.msg
|
||||
const timeout = axios.isAxiosError(error) && error.code === 'ECONNABORTED'
|
||||
|
||||
if (timeout) {
|
||||
return { kind: 'timeout', status, code, message: '请求超时,结果可能未知,请刷新确认', unknownResult: true }
|
||||
}
|
||||
if (status === 401 || code === 401) return { kind: 'auth', status, code, message: '登录状态已失效,请重新登录', unknownResult: false }
|
||||
if (status === 403) return { kind: 'forbidden', status, code, message: '没有执行此操作的权限', unknownResult: false }
|
||||
if (status === 400) return { kind: 'validation', status, code, message: backendMessage || '请求参数或业务条件不符合要求', unknownResult: false }
|
||||
if (status === 409) return { kind: 'conflict', status, code, message: backendMessage || '数据已发生变化,请刷新后重试', unknownResult: false }
|
||||
if (status && status >= 500) return { kind: 'server', status, code, message: '服务器处理失败,请稍后重试', unknownResult: false }
|
||||
return { kind: 'unknown', status, code, message: backendMessage || '操作失败,请稍后重试', unknownResult: false }
|
||||
}
|
||||
@@ -2,6 +2,9 @@ export type ApprovalSource = 'none' | 'legacy' | 'wecom'
|
||||
|
||||
export interface ApprovalSummary {
|
||||
approval_source?: ApprovalSource | null
|
||||
approval_provider?: 'wecom' | null
|
||||
approval_instance_id?: number | null
|
||||
approval_status?: number | string | null
|
||||
approval_status_name?: string | null
|
||||
current_approver_summary?: string | null
|
||||
processing_status_name?: string | null
|
||||
@@ -9,14 +12,36 @@ export interface ApprovalSummary {
|
||||
|
||||
export const getApprovalStatusText = (summary: ApprovalSummary): string => {
|
||||
if (summary.approval_source === 'legacy') return '历史审批'
|
||||
if (summary.approval_source === 'wecom') return summary.approval_status_name || '-'
|
||||
if (
|
||||
summary.approval_source === 'wecom' ||
|
||||
summary.approval_provider === 'wecom' ||
|
||||
summary.approval_instance_id
|
||||
) {
|
||||
return summary.approval_status_name || approvalStatusNames[Number(summary.approval_status)] || '-'
|
||||
}
|
||||
return '-'
|
||||
}
|
||||
|
||||
export const getCurrentApproverSummaryText = (summary: ApprovalSummary): string => {
|
||||
if (summary.approval_source !== 'wecom') return '-'
|
||||
if (
|
||||
summary.approval_source !== 'wecom' &&
|
||||
summary.approval_provider !== 'wecom' &&
|
||||
!summary.approval_instance_id
|
||||
) return '-'
|
||||
return summary.current_approver_summary || '-'
|
||||
}
|
||||
|
||||
export const getProcessingStatusText = (summary: ApprovalSummary): string =>
|
||||
summary.processing_status_name || '-'
|
||||
|
||||
export const approvalStatusNames: Record<number, string> = {
|
||||
0: '提交中',
|
||||
1: '审批中',
|
||||
2: '已通过',
|
||||
3: '已拒绝',
|
||||
4: '已撤销',
|
||||
5: '通过后撤销',
|
||||
6: '已删除',
|
||||
7: '提交失败',
|
||||
8: '提交结果未知'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user