### What problem does this PR solve? fix: Set the default value of Self RAG to false #1220 fix: Change all tool file names to kebab format ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue)tags/v0.9.0
| @@ -13,7 +13,7 @@ import weekOfYear from 'dayjs/plugin/weekOfYear'; | |||
| import weekYear from 'dayjs/plugin/weekYear'; | |||
| import weekday from 'dayjs/plugin/weekday'; | |||
| import React, { ReactNode, useEffect, useState } from 'react'; | |||
| import storage from './utils/authorizationUtil'; | |||
| import storage from './utils/authorization-util'; | |||
| dayjs.extend(customParseFormat); | |||
| dayjs.extend(advancedFormat); | |||
| @@ -8,7 +8,7 @@ import classNames from 'classnames'; | |||
| import { useMemo } from 'react'; | |||
| import MarkdownContent from '@/pages/chat/markdown-content'; | |||
| import { getExtension } from '@/utils/documentUtils'; | |||
| import { getExtension } from '@/utils/document-util'; | |||
| import { Avatar, Flex, List } from 'antd'; | |||
| import NewDocumentLink from '../new-document-link'; | |||
| import SvgIcon from '../svg-icon'; | |||
| @@ -1,7 +1,7 @@ | |||
| import { | |||
| getExtension, | |||
| isSupportedPreviewDocumentType, | |||
| } from '@/utils/documentUtils'; | |||
| } from '@/utils/document-util'; | |||
| import React from 'react'; | |||
| interface IProps extends React.PropsWithChildren { | |||
| @@ -1,4 +1,4 @@ | |||
| import authorizationUtil from '@/utils/authorizationUtil'; | |||
| import authorizationUtil from '@/utils/authorization-util'; | |||
| import { message } from 'antd'; | |||
| import { useEffect, useMemo, useState } from 'react'; | |||
| import { useNavigate, useSearchParams } from 'umi'; | |||
| @@ -1,7 +1,7 @@ | |||
| import { IChunk, IKnowledgeFile } from '@/interfaces/database/knowledge'; | |||
| import { IChangeParserConfigRequestBody } from '@/interfaces/request/document'; | |||
| import { api_host } from '@/utils/api'; | |||
| import { buildChunkHighlights } from '@/utils/documentUtils'; | |||
| import { buildChunkHighlights } from '@/utils/document-util'; | |||
| import { UploadFile } from 'antd'; | |||
| import { useCallback, useMemo, useState } from 'react'; | |||
| import { IHighlight } from 'react-pdf-highlighter'; | |||
| @@ -8,7 +8,7 @@ import { | |||
| IAddLlmRequestBody, | |||
| IDeleteLlmRequestBody, | |||
| } from '@/interfaces/request/llm'; | |||
| import { sortLLmFactoryListBySpecifiedOrder } from '@/utils/commonUtil'; | |||
| import { sortLLmFactoryListBySpecifiedOrder } from '@/utils/common-util'; | |||
| import { useCallback, useEffect, useMemo } from 'react'; | |||
| import { useDispatch, useSelector } from 'umi'; | |||
| @@ -6,7 +6,7 @@ import { IAnswer } from '@/interfaces/database/chat'; | |||
| import { IKnowledgeFile } from '@/interfaces/database/knowledge'; | |||
| import { IChangeParserConfigRequestBody } from '@/interfaces/request/document'; | |||
| import api from '@/utils/api'; | |||
| import { getAuthorization } from '@/utils/authorizationUtil'; | |||
| import { getAuthorization } from '@/utils/authorization-util'; | |||
| import { PaginationProps } from 'antd'; | |||
| import axios from 'axios'; | |||
| import { EventSourceParserStream } from 'eventsource-parser/stream'; | |||
| @@ -1,6 +1,6 @@ | |||
| import { Authorization } from '@/constants/authorization'; | |||
| import userService from '@/services/user-service'; | |||
| import authorizationUtil from '@/utils/authorizationUtil'; | |||
| import authorizationUtil from '@/utils/authorization-util'; | |||
| import { useMutation } from '@tanstack/react-query'; | |||
| import { message } from 'antd'; | |||
| import { useTranslation } from 'react-i18next'; | |||
| @@ -1,4 +1,4 @@ | |||
| import { getOneNamespaceEffectsLoading } from '@/utils/storeUtil'; | |||
| import { getOneNamespaceEffectsLoading } from '@/utils/store-util'; | |||
| import { useSelector } from 'umi'; | |||
| // Get the loading status of given effects under a certain namespace | |||
| @@ -1,6 +1,6 @@ | |||
| import { useOneNamespaceEffectsLoading } from '@/hooks/store-hooks'; | |||
| import { IChunk, IKnowledgeFile } from '@/interfaces/database/knowledge'; | |||
| import { buildChunkHighlights } from '@/utils/documentUtils'; | |||
| import { buildChunkHighlights } from '@/utils/document-util'; | |||
| import { useCallback, useMemo, useState } from 'react'; | |||
| import { IHighlight } from 'react-pdf-highlighter'; | |||
| import { useSelector } from 'umi'; | |||
| @@ -3,7 +3,7 @@ import { IChunk, IKnowledgeFile } from '@/interfaces/database/knowledge'; | |||
| import kbService from '@/services/knowledge-service'; | |||
| import { message } from 'antd'; | |||
| import { pick } from 'lodash'; | |||
| // import { delay } from '@/utils/storeUtil'; | |||
| // import { delay } from '@/utils/store-util'; | |||
| import i18n from '@/locales/config'; | |||
| import { DvaModel } from 'umi'; | |||
| @@ -14,7 +14,7 @@ import { useOneNamespaceEffectsLoading } from '@/hooks/store-hooks'; | |||
| import { useFetchTenantInfo } from '@/hooks/user-setting-hooks'; | |||
| import { Pagination } from '@/interfaces/common'; | |||
| import { IChangeParserConfigRequestBody } from '@/interfaces/request/document'; | |||
| import { getUnSupportedFilesCount } from '@/utils/documentUtils'; | |||
| import { getUnSupportedFilesCount } from '@/utils/document-util'; | |||
| import { PaginationProps, UploadFile } from 'antd'; | |||
| import { useCallback, useEffect, useMemo, useState } from 'react'; | |||
| import { useDispatch, useNavigate, useSelector } from 'umi'; | |||
| @@ -7,7 +7,7 @@ import { | |||
| import { useSetSelectedRecord } from '@/hooks/logic-hooks'; | |||
| import { useSelectParserList } from '@/hooks/user-setting-hooks'; | |||
| import { IKnowledgeFile } from '@/interfaces/database/knowledge'; | |||
| import { getExtension } from '@/utils/documentUtils'; | |||
| import { getExtension } from '@/utils/document-util'; | |||
| import { Divider, Flex, Switch, Table, Typography } from 'antd'; | |||
| import type { ColumnsType } from 'antd/es/table'; | |||
| import { useTranslation } from 'react-i18next'; | |||
| @@ -2,7 +2,7 @@ import { useShowDeleteConfirm, useTranslate } from '@/hooks/common-hooks'; | |||
| import { useRemoveDocument } from '@/hooks/document-hooks'; | |||
| import { IKnowledgeFile } from '@/interfaces/database/knowledge'; | |||
| import { api_host } from '@/utils/api'; | |||
| import { downloadFile } from '@/utils/fileUtil'; | |||
| import { downloadFile } from '@/utils/file-util'; | |||
| import { | |||
| DeleteOutlined, | |||
| DownloadOutlined, | |||
| @@ -1,4 +1,4 @@ | |||
| import { normFile } from '@/utils/fileUtil'; | |||
| import { normFile } from '@/utils/file-util'; | |||
| import { PlusOutlined } from '@ant-design/icons'; | |||
| import { Button, Form, Input, Radio, Select, Space, Upload } from 'antd'; | |||
| import { | |||
| @@ -11,7 +11,7 @@ import { | |||
| import { | |||
| getBase64FromUploadFileList, | |||
| getUploadFileListFromBase64, | |||
| } from '@/utils/fileUtil'; | |||
| } from '@/utils/file-util'; | |||
| import { useIsFetching } from '@tanstack/react-query'; | |||
| import { Form, UploadFile } from 'antd'; | |||
| import { FormInstance } from 'antd/lib'; | |||
| @@ -95,7 +95,7 @@ const AssistantSetting = ({ show }: ISegmentedContentProps) => { | |||
| valuePropName="checked" | |||
| name={['prompt_config', 'self_rag']} | |||
| tooltip={t('selfRagTip')} | |||
| initialValue={true} | |||
| initialValue={false} | |||
| > | |||
| <Switch /> | |||
| </Form.Item> | |||
| @@ -19,7 +19,7 @@ import { | |||
| useFetchLlmModelOnVisible, | |||
| useFetchModelId, | |||
| } from '@/hooks/logic-hooks'; | |||
| import { getBase64FromUploadFileList } from '@/utils/fileUtil'; | |||
| import { getBase64FromUploadFileList } from '@/utils/file-util'; | |||
| import { removeUselessFieldsFromValues } from '@/utils/form'; | |||
| import styles from './index.less'; | |||
| @@ -3,7 +3,7 @@ import SvgIcon from '@/components/svg-icon'; | |||
| import { useSelectFileThumbnails } from '@/hooks/knowledge-hooks'; | |||
| import { IReference } from '@/interfaces/database/chat'; | |||
| import { IChunk } from '@/interfaces/database/knowledge'; | |||
| import { getExtension } from '@/utils/documentUtils'; | |||
| import { getExtension } from '@/utils/document-util'; | |||
| import { InfoCircleOutlined } from '@ant-design/icons'; | |||
| import { Button, Flex, Popover, Space } from 'antd'; | |||
| import DOMPurify from 'dompurify'; | |||
| @@ -1,7 +1,7 @@ | |||
| import { useTranslate } from '@/hooks/common-hooks'; | |||
| import { IFile } from '@/interfaces/database/file-manager'; | |||
| import { api_host } from '@/utils/api'; | |||
| import { downloadFile } from '@/utils/fileUtil'; | |||
| import { downloadFile } from '@/utils/file-util'; | |||
| import { | |||
| DeleteOutlined, | |||
| DownloadOutlined, | |||
| @@ -16,7 +16,7 @@ import NewDocumentLink from '@/components/new-document-link'; | |||
| import { | |||
| getExtension, | |||
| isSupportedPreviewDocumentType, | |||
| } from '@/utils/documentUtils'; | |||
| } from '@/utils/document-util'; | |||
| import styles from './index.less'; | |||
| interface IProps { | |||
| @@ -1,7 +1,7 @@ | |||
| import { useTranslate } from '@/hooks/common-hooks'; | |||
| import { useNextFetchKnowledgeList } from '@/hooks/knowledge-hooks'; | |||
| import { IModalProps } from '@/interfaces/common'; | |||
| import { filterOptionsByInput } from '@/utils/commonUtil'; | |||
| import { filterOptionsByInput } from '@/utils/common-util'; | |||
| import { Form, Modal, Select } from 'antd'; | |||
| import { useEffect } from 'react'; | |||
| @@ -18,8 +18,8 @@ import FileUploadModal from '@/components/file-upload-modal'; | |||
| import RenameModal from '@/components/rename-modal'; | |||
| import SvgIcon from '@/components/svg-icon'; | |||
| import { useTranslate } from '@/hooks/common-hooks'; | |||
| import { formatNumberWithThousandsSeparator } from '@/utils/commonUtil'; | |||
| import { getExtension } from '@/utils/documentUtils'; | |||
| import { formatNumberWithThousandsSeparator } from '@/utils/common-util'; | |||
| import { getExtension } from '@/utils/document-util'; | |||
| import ConnectToKnowledgeModal from './connect-to-knowledge-modal'; | |||
| import FolderCreateModal from './folder-create-modal'; | |||
| import styles from './index.less'; | |||
| @@ -7,7 +7,7 @@ import { | |||
| getBase64FromUploadFileList, | |||
| getUploadFileListFromBase64, | |||
| normFile, | |||
| } from '@/utils/fileUtil'; | |||
| } from '@/utils/file-util'; | |||
| import { PlusOutlined } from '@ant-design/icons'; | |||
| import { | |||
| Button, | |||
| @@ -7,7 +7,7 @@ import lowerCase from 'lodash/lowerCase'; | |||
| import upperFirst from 'lodash/upperFirst'; | |||
| import { useEffect } from 'react'; | |||
| import { toFixed } from '@/utils/commonUtil'; | |||
| import { toFixed } from '@/utils/common-util'; | |||
| import styles from './index.less'; | |||
| const { Text } = Typography; | |||
| @@ -1,5 +1,5 @@ | |||
| import api from '@/utils/api'; | |||
| import registerServer from '@/utils/registerServer'; | |||
| import registerServer from '@/utils/register-server'; | |||
| import request from '@/utils/request'; | |||
| const { | |||
| @@ -1,5 +1,5 @@ | |||
| import api from '@/utils/api'; | |||
| import registerServer from '@/utils/registerServer'; | |||
| import registerServer from '@/utils/register-server'; | |||
| import request from '@/utils/request'; | |||
| import pureRequest from 'axios'; | |||
| @@ -1,5 +1,5 @@ | |||
| import api from '@/utils/api'; | |||
| import registerServer from '@/utils/registerServer'; | |||
| import registerServer from '@/utils/register-server'; | |||
| import request from '@/utils/request'; | |||
| const { | |||
| @@ -1,5 +1,5 @@ | |||
| import api from '@/utils/api'; | |||
| import registerServer from '@/utils/registerServer'; | |||
| import registerServer from '@/utils/register-server'; | |||
| import request from '@/utils/request'; | |||
| import pureRequest from 'umi-request'; | |||
| @@ -1,5 +1,5 @@ | |||
| import api from '@/utils/api'; | |||
| import registerServer from '@/utils/registerServer'; | |||
| import registerServer from '@/utils/register-server'; | |||
| import request from '@/utils/request'; | |||
| const { | |||
| @@ -1,5 +1,5 @@ | |||
| import { Authorization, Token, UserInfo } from '@/constants/authorization'; | |||
| import { getSearchValue } from './commonUtil'; | |||
| import { getSearchValue } from './common-util'; | |||
| const KeySet = [Authorization, Token, UserInfo]; | |||
| const storage = { | |||
| @@ -1,14 +0,0 @@ | |||
| import { useState } from 'react'; | |||
| export const usePagination = function (defaultPage: number, defaultPageSize: number, total: number) { | |||
| const [page = 1, setPage] = useState(defaultPage); | |||
| const [pageSize = 10, setPageSize] = useState(defaultPageSize); | |||
| return { | |||
| page, | |||
| pageSize, | |||
| count: total, | |||
| setPage, | |||
| setPageSize, | |||
| nextPage: () => setPage(page + 1) | |||
| }; | |||
| }; | |||
| @@ -1,39 +1,39 @@ | |||
| import omit from 'lodash/omit'; | |||
| import { RequestMethod } from 'umi-request'; | |||
| type Service<T extends string> = Record< | |||
| T, | |||
| (params?: any, urlAppendix?: string) => any | |||
| >; | |||
| const registerServer = <T extends string>( | |||
| opt: Record<T, { url: string; method: string }>, | |||
| request: RequestMethod, | |||
| ) => { | |||
| const server: Service<T> = {} as Service<T>; | |||
| for (let key in opt) { | |||
| server[key] = (params?: any, urlAppendix?: string) => { | |||
| let url = opt[key].url; | |||
| const requestOptions = opt[key]; | |||
| if (urlAppendix) { | |||
| url = url + '/' + urlAppendix; | |||
| } | |||
| if (opt[key].method === 'post' || opt[key].method === 'POST') { | |||
| return request(url, { | |||
| method: opt[key].method, | |||
| data: params, | |||
| }); | |||
| } | |||
| if (opt[key].method === 'get' || opt[key].method === 'GET') { | |||
| return request.get(url, { | |||
| ...omit(requestOptions, ['method', 'url']), | |||
| params, | |||
| }); | |||
| } | |||
| }; | |||
| } | |||
| return server; | |||
| }; | |||
| export default registerServer; | |||
| import omit from 'lodash/omit'; | |||
| import { RequestMethod } from 'umi-request'; | |||
| type Service<T extends string> = Record< | |||
| T, | |||
| (params?: any, urlAppendix?: string) => any | |||
| >; | |||
| const registerServer = <T extends string>( | |||
| opt: Record<T, { url: string; method: string }>, | |||
| request: RequestMethod, | |||
| ) => { | |||
| const server: Service<T> = {} as Service<T>; | |||
| for (let key in opt) { | |||
| server[key] = (params?: any, urlAppendix?: string) => { | |||
| let url = opt[key].url; | |||
| const requestOptions = opt[key]; | |||
| if (urlAppendix) { | |||
| url = url + '/' + urlAppendix; | |||
| } | |||
| if (opt[key].method === 'post' || opt[key].method === 'POST') { | |||
| return request(url, { | |||
| method: opt[key].method, | |||
| data: params, | |||
| }); | |||
| } | |||
| if (opt[key].method === 'get' || opt[key].method === 'GET') { | |||
| return request.get(url, { | |||
| ...omit(requestOptions, ['method', 'url']), | |||
| params, | |||
| }); | |||
| } | |||
| }; | |||
| } | |||
| return server; | |||
| }; | |||
| export default registerServer; | |||
| @@ -1,130 +1,132 @@ | |||
| import { Authorization } from '@/constants/authorization'; | |||
| import { ResponseType } from '@/interfaces/database/base'; | |||
| import i18n from '@/locales/config'; | |||
| import authorizationUtil, { getAuthorization } from '@/utils/authorizationUtil'; | |||
| import { message, notification } from 'antd'; | |||
| import { history } from 'umi'; | |||
| import { RequestMethod, extend } from 'umi-request'; | |||
| import { convertTheKeysOfTheObjectToSnake } from './commonUtil'; | |||
| const ABORT_REQUEST_ERR_MESSAGE = 'The user aborted a request.'; | |||
| const RetcodeMessage = { | |||
| 200: i18n.t('message.200'), | |||
| 201: i18n.t('message.201'), | |||
| 202: i18n.t('message.202'), | |||
| 204: i18n.t('message.204'), | |||
| 400: i18n.t('message.400'), | |||
| 401: i18n.t('message.401'), | |||
| 403: i18n.t('message.403'), | |||
| 404: i18n.t('message.404'), | |||
| 406: i18n.t('message.406'), | |||
| 410: i18n.t('message.410'), | |||
| 422: i18n.t('message.422'), | |||
| 500: i18n.t('message.500'), | |||
| 502: i18n.t('message.502'), | |||
| 503: i18n.t('message.503'), | |||
| 504: i18n.t('message.504'), | |||
| }; | |||
| type ResultCode = | |||
| | 200 | |||
| | 201 | |||
| | 202 | |||
| | 204 | |||
| | 400 | |||
| | 401 | |||
| | 403 | |||
| | 404 | |||
| | 406 | |||
| | 410 | |||
| | 422 | |||
| | 500 | |||
| | 502 | |||
| | 503 | |||
| | 504; | |||
| const errorHandler = (error: { | |||
| response: Response; | |||
| message: string; | |||
| }): Response => { | |||
| const { response } = error; | |||
| if (error.message === ABORT_REQUEST_ERR_MESSAGE) { | |||
| console.log('user abort request'); | |||
| } else { | |||
| if (response && response.status) { | |||
| const errorText = | |||
| RetcodeMessage[response.status as ResultCode] || response.statusText; | |||
| const { status, url } = response; | |||
| notification.error({ | |||
| message: `${i18n.t('message.requestError')} ${status}: ${url}`, | |||
| description: errorText, | |||
| }); | |||
| } else if (!response) { | |||
| notification.error({ | |||
| description: i18n.t('message.networkAnomalyDescription'), | |||
| message: i18n.t('message.networkAnomaly'), | |||
| }); | |||
| } | |||
| } | |||
| return response; | |||
| }; | |||
| const request: RequestMethod = extend({ | |||
| errorHandler, | |||
| timeout: 300000, | |||
| getResponse: true, | |||
| }); | |||
| request.interceptors.request.use((url: string, options: any) => { | |||
| const data = convertTheKeysOfTheObjectToSnake(options.data); | |||
| const params = convertTheKeysOfTheObjectToSnake(options.params); | |||
| return { | |||
| url, | |||
| options: { | |||
| ...options, | |||
| data, | |||
| params, | |||
| headers: { | |||
| ...(options.skipToken | |||
| ? undefined | |||
| : { [Authorization]: getAuthorization() }), | |||
| ...options.headers, | |||
| }, | |||
| interceptors: true, | |||
| }, | |||
| }; | |||
| }); | |||
| request.interceptors.response.use(async (response: any, options) => { | |||
| if (options.responseType === 'blob') { | |||
| return response; | |||
| } | |||
| const data: ResponseType = await response.clone().json(); | |||
| if (data.retcode === 401 || data.retcode === 401) { | |||
| notification.error({ | |||
| message: data.retmsg, | |||
| description: data.retmsg, | |||
| duration: 3, | |||
| }); | |||
| authorizationUtil.removeAll(); | |||
| history.push('/login'); // Will not jump to the login page | |||
| } else if (data.retcode !== 0) { | |||
| if (data.retcode === 100) { | |||
| message.error(data.retmsg); | |||
| } else { | |||
| notification.error({ | |||
| message: `${i18n.t('message.hint')} : ${data.retcode}`, | |||
| description: data.retmsg, | |||
| duration: 3, | |||
| }); | |||
| } | |||
| return response; | |||
| } else { | |||
| return response; | |||
| } | |||
| }); | |||
| export default request; | |||
| import { Authorization } from '@/constants/authorization'; | |||
| import { ResponseType } from '@/interfaces/database/base'; | |||
| import i18n from '@/locales/config'; | |||
| import authorizationUtil, { | |||
| getAuthorization, | |||
| } from '@/utils/authorization-util'; | |||
| import { message, notification } from 'antd'; | |||
| import { history } from 'umi'; | |||
| import { RequestMethod, extend } from 'umi-request'; | |||
| import { convertTheKeysOfTheObjectToSnake } from './common-util'; | |||
| const ABORT_REQUEST_ERR_MESSAGE = 'The user aborted a request.'; | |||
| const RetcodeMessage = { | |||
| 200: i18n.t('message.200'), | |||
| 201: i18n.t('message.201'), | |||
| 202: i18n.t('message.202'), | |||
| 204: i18n.t('message.204'), | |||
| 400: i18n.t('message.400'), | |||
| 401: i18n.t('message.401'), | |||
| 403: i18n.t('message.403'), | |||
| 404: i18n.t('message.404'), | |||
| 406: i18n.t('message.406'), | |||
| 410: i18n.t('message.410'), | |||
| 422: i18n.t('message.422'), | |||
| 500: i18n.t('message.500'), | |||
| 502: i18n.t('message.502'), | |||
| 503: i18n.t('message.503'), | |||
| 504: i18n.t('message.504'), | |||
| }; | |||
| type ResultCode = | |||
| | 200 | |||
| | 201 | |||
| | 202 | |||
| | 204 | |||
| | 400 | |||
| | 401 | |||
| | 403 | |||
| | 404 | |||
| | 406 | |||
| | 410 | |||
| | 422 | |||
| | 500 | |||
| | 502 | |||
| | 503 | |||
| | 504; | |||
| const errorHandler = (error: { | |||
| response: Response; | |||
| message: string; | |||
| }): Response => { | |||
| const { response } = error; | |||
| if (error.message === ABORT_REQUEST_ERR_MESSAGE) { | |||
| console.log('user abort request'); | |||
| } else { | |||
| if (response && response.status) { | |||
| const errorText = | |||
| RetcodeMessage[response.status as ResultCode] || response.statusText; | |||
| const { status, url } = response; | |||
| notification.error({ | |||
| message: `${i18n.t('message.requestError')} ${status}: ${url}`, | |||
| description: errorText, | |||
| }); | |||
| } else if (!response) { | |||
| notification.error({ | |||
| description: i18n.t('message.networkAnomalyDescription'), | |||
| message: i18n.t('message.networkAnomaly'), | |||
| }); | |||
| } | |||
| } | |||
| return response; | |||
| }; | |||
| const request: RequestMethod = extend({ | |||
| errorHandler, | |||
| timeout: 300000, | |||
| getResponse: true, | |||
| }); | |||
| request.interceptors.request.use((url: string, options: any) => { | |||
| const data = convertTheKeysOfTheObjectToSnake(options.data); | |||
| const params = convertTheKeysOfTheObjectToSnake(options.params); | |||
| return { | |||
| url, | |||
| options: { | |||
| ...options, | |||
| data, | |||
| params, | |||
| headers: { | |||
| ...(options.skipToken | |||
| ? undefined | |||
| : { [Authorization]: getAuthorization() }), | |||
| ...options.headers, | |||
| }, | |||
| interceptors: true, | |||
| }, | |||
| }; | |||
| }); | |||
| request.interceptors.response.use(async (response: any, options) => { | |||
| if (options.responseType === 'blob') { | |||
| return response; | |||
| } | |||
| const data: ResponseType = await response.clone().json(); | |||
| if (data.retcode === 401 || data.retcode === 401) { | |||
| notification.error({ | |||
| message: data.retmsg, | |||
| description: data.retmsg, | |||
| duration: 3, | |||
| }); | |||
| authorizationUtil.removeAll(); | |||
| history.push('/login'); // Will not jump to the login page | |||
| } else if (data.retcode !== 0) { | |||
| if (data.retcode === 100) { | |||
| message.error(data.retmsg); | |||
| } else { | |||
| notification.error({ | |||
| message: `${i18n.t('message.hint')} : ${data.retcode}`, | |||
| description: data.retmsg, | |||
| duration: 3, | |||
| }); | |||
| } | |||
| return response; | |||
| } else { | |||
| return response; | |||
| } | |||
| }); | |||
| export default request; | |||