diff --git a/src/pages/crontab/index.tsx b/src/pages/crontab/index.tsx index 4aa3ee02..c83ff1a2 100644 --- a/src/pages/crontab/index.tsx +++ b/src/pages/crontab/index.tsx @@ -57,6 +57,7 @@ import { useVT } from 'virtualizedtableforantd4'; import { ICrontab, OperationName, OperationPath, CrontabStatus } from './type'; import Name from '@/components/name'; import dayjs from 'dayjs'; +import { noop } from 'lodash'; const { Text, Paragraph, Link } = Typography; const { Search } = Input; @@ -76,7 +77,7 @@ const Crontab = () => { wordBreak: 'break-all', marginBottom: 0, color: '#1890ff', - cursor: 'pointer' + cursor: 'pointer', }} ellipsis={{ tooltip: text, rows: 2 }} onClick={() => { @@ -270,9 +271,14 @@ const Crontab = () => { record.sub_id ? ( - request.get(`${config.apiPrefix}subscriptions/${record.sub_id}`) + request.get(`${config.apiPrefix}subscriptions/${record.sub_id}`, { + onError: noop, + }) } - options={{ ready: record?.sub_id, cacheKey: record.sub_id }} + options={{ + ready: record?.sub_id, + cacheKey: record.sub_id, + }} /> ) : ( '-' diff --git a/src/utils/http.ts b/src/utils/http.ts index cee0fd00..e276ecdd 100644 --- a/src/utils/http.ts +++ b/src/utils/http.ts @@ -1,29 +1,44 @@ -import intl from 'react-intl-universal' +import intl from 'react-intl-universal'; import { message } from 'antd'; import config from './config'; import { history } from '@umijs/max'; -import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from 'axios'; +import axios, { + AxiosError, + AxiosInstance, + AxiosRequestConfig, + AxiosResponse, + InternalAxiosRequestConfig, +} from 'axios'; -interface IResponseData { +export interface IResponseData { code?: number; data?: any; message?: string; error?: any; } -type Override< +export type Override< T, K extends Partial<{ [P in keyof T]: any }> | string, > = K extends string ? Omit & { [P in keyof T]: T[P] | unknown } : Omit & K; +export interface ICustomConfig { + onError?: (res: AxiosResponse) => void; +} + message.config({ duration: 2, }); const time = Date.now(); -const errorHandler = function (error: AxiosError) { +const errorHandler = function ( + error: Override< + AxiosError, + { config: InternalAxiosRequestConfig & ICustomConfig } + >, +) { if (error.response) { const msg = error.response.data ? error.response.data.message || error.message || error.response.data @@ -38,6 +53,10 @@ const errorHandler = function (error: AxiosError) { history.push('/login'); } } else { + if (typeof error.config?.onError === 'function') { + return error.config?.onError(error.response); + } + message.error({ content: msg, style: { maxWidth: 500, margin: '0 auto' }, @@ -105,21 +124,21 @@ export const request = _request as Override< { get( url: string, - config?: AxiosRequestConfig, + config?: AxiosRequestConfig & ICustomConfig, ): Promise; delete( url: string, - config?: AxiosRequestConfig, + config?: AxiosRequestConfig & ICustomConfig, ): Promise; post( url: string, data?: D, - config?: AxiosRequestConfig, + config?: AxiosRequestConfig & ICustomConfig, ): Promise; put( url: string, data?: D, - config?: AxiosRequestConfig, + config?: AxiosRequestConfig & ICustomConfig, ): Promise; } >;