97 lines
3.0 KiB
TypeScript
97 lines
3.0 KiB
TypeScript
import HttpRequest from './http'
|
|
import { merge } from 'lodash-es'
|
|
import { HttpRequestOptions, RequestHooks } from './type'
|
|
import { getToken } from '../auth'
|
|
import { RequestCodeEnum } from '@/enums/requestEnums'
|
|
import { useUserStore } from '@/stores/user'
|
|
|
|
const requestHooks: RequestHooks = {
|
|
requestInterceptorsHook(options, config) {
|
|
const { urlPrefix, baseUrl, withToken } = config
|
|
options.header = options.header ?? {}
|
|
if (urlPrefix) {
|
|
options.url = `${urlPrefix}${options.url}`
|
|
}
|
|
if (baseUrl) {
|
|
options.url = `${baseUrl}${options.url}`
|
|
}
|
|
const token = getToken()
|
|
// 添加token
|
|
if (withToken && token) {
|
|
options.header.token = token
|
|
}
|
|
return options
|
|
},
|
|
responseInterceptorsHook(response, config) {
|
|
const { isTransformResponse, isReturnDefaultResponse, isAuth } = config
|
|
|
|
//返回默认响应,当需要获取响应头及其他数据时可使用
|
|
if (isReturnDefaultResponse) {
|
|
return response
|
|
}
|
|
// 是否需要对数据进行处理
|
|
if (!isTransformResponse) {
|
|
return response.data
|
|
}
|
|
const { logout } = useUserStore()
|
|
const { code, data, msg } = response.data as any
|
|
switch (code) {
|
|
case RequestCodeEnum.SUCCESS:
|
|
return data
|
|
case RequestCodeEnum.PARAMS_TYPE_ERROR:
|
|
case RequestCodeEnum.PARAMS_VALID_ERROR:
|
|
case RequestCodeEnum.REQUEST_METHOD_ERROR:
|
|
case RequestCodeEnum.ASSERT_ARGUMENT_ERROR:
|
|
case RequestCodeEnum.ASSERT_MYBATIS_ERROR:
|
|
case RequestCodeEnum.LOGIN_ACCOUNT_ERROR:
|
|
case RequestCodeEnum.LOGIN_DISABLE_ERROR:
|
|
case RequestCodeEnum.NO_PERMISSTION:
|
|
case RequestCodeEnum.FAILED:
|
|
case RequestCodeEnum.SYSTEM_ERROR:
|
|
uni.$u.toast(msg)
|
|
return Promise.reject(msg)
|
|
|
|
case RequestCodeEnum.TOKEN_INVALID:
|
|
case RequestCodeEnum.TOKEN_EMPTY:
|
|
logout()
|
|
if (isAuth && !getToken()) {
|
|
uni.navigateTo({
|
|
url: '/pages/login/login'
|
|
})
|
|
}
|
|
return Promise.reject()
|
|
|
|
default:
|
|
return data
|
|
}
|
|
}
|
|
}
|
|
|
|
const defaultOptions: HttpRequestOptions = {
|
|
requestOptions: {
|
|
timeout: 10 * 1000
|
|
},
|
|
baseUrl: `${import.meta.env.VITE_APP_BASE_URL}/`,
|
|
//是否返回默认的响应
|
|
isReturnDefaultResponse: false,
|
|
// 需要对返回数据进行处理
|
|
isTransformResponse: true,
|
|
// 接口拼接地址
|
|
urlPrefix: 'api',
|
|
// 忽略重复请求
|
|
ignoreCancel: false,
|
|
// 是否携带token
|
|
withToken: true,
|
|
isAuth: false,
|
|
requestHooks: requestHooks
|
|
}
|
|
|
|
function createRequest(opt?: HttpRequestOptions) {
|
|
return new HttpRequest(
|
|
// 深度合并
|
|
merge(defaultOptions, opt || {})
|
|
)
|
|
}
|
|
const request = createRequest()
|
|
export default request
|