|
|
@@ -1,4 +1,4 @@
|
|
|
-import axios, { AxiosRequestConfig, Method, AxiosInstance } from 'axios'
|
|
|
+import axios, { AxiosRequestConfig, Method } from 'axios'
|
|
|
//import qs from 'qs'
|
|
|
//import cryptojs from 'crypto-js'
|
|
|
//import { addPending, removePending } from './pending'
|
|
|
@@ -7,65 +7,64 @@ import { HttpParams, CommonParams, HttpResponse, Payload, ResultCode } from './i
|
|
|
import service from '@/services'
|
|
|
|
|
|
const httpService = new (class {
|
|
|
- private axiosInstance?: AxiosInstance
|
|
|
+ private axiosInstance = axios.create({
|
|
|
+ timeout: 30000,
|
|
|
+ })
|
|
|
|
|
|
constructor() {
|
|
|
- this.init()
|
|
|
- }
|
|
|
-
|
|
|
- private init = async () => {
|
|
|
- if (!this.axiosInstance) {
|
|
|
- const config = await service.onReady()
|
|
|
- this.axiosInstance = axios.create({
|
|
|
- timeout: 30000,
|
|
|
- baseURL: config.goCommonSearchUrl,
|
|
|
- })
|
|
|
- // 请求拦截器
|
|
|
- this.axiosInstance.interceptors.request.use(
|
|
|
- (config) => {
|
|
|
- //removePending(config) //在请求开始前,对之前的请求做检查取消操作
|
|
|
- //addPending(config) //将当前请求添加到列表中
|
|
|
- //请求头签名
|
|
|
- const sign = {
|
|
|
- token: loginStore.getters.token,
|
|
|
- signsecret: 'qz7qWOMXKTMT5JlDs5w4NTPwWeR3xhF1v6wqbZ9cExmP6cc3spvNAp1wJJ1SqRI5',
|
|
|
- timestamp: new Date().getTime(),
|
|
|
- }
|
|
|
- //设置请求头
|
|
|
- config.headers = {
|
|
|
- Authorization: sign.token,
|
|
|
- //Signid: 'eecd3f37625f4501b88e9f0fa14b4b51',
|
|
|
- //Sign: cryptojs.SHA256(qs.stringify(sign)).toString(),
|
|
|
- //Timestamp: sign.timestamp.toString(),
|
|
|
- }
|
|
|
- return config
|
|
|
- },
|
|
|
- (err) => {
|
|
|
- //此处异常触发条件不明
|
|
|
- console.error(err)
|
|
|
- return Promise.reject('网络异常,请稍后再试')
|
|
|
+ // 请求拦截器
|
|
|
+ this.axiosInstance.interceptors.request.use(
|
|
|
+ (config) => {
|
|
|
+ //addPending(config) //将当前请求添加到列表中
|
|
|
+ //请求头签名
|
|
|
+ const sign = {
|
|
|
+ token: loginStore.getters.token,
|
|
|
+ signsecret: 'qz7qWOMXKTMT5JlDs5w4NTPwWeR3xhF1v6wqbZ9cExmP6cc3spvNAp1wJJ1SqRI5',
|
|
|
+ timestamp: new Date().getTime(),
|
|
|
+ }
|
|
|
+ //设置请求头
|
|
|
+ config.headers = {
|
|
|
+ Authorization: sign.token,
|
|
|
+ //Signid: 'eecd3f37625f4501b88e9f0fa14b4b51',
|
|
|
+ //Sign: cryptojs.SHA256(qs.stringify(sign)).toString(),
|
|
|
+ //Timestamp: sign.timestamp.toString(),
|
|
|
}
|
|
|
- )
|
|
|
- // 响应拦截器
|
|
|
- this.axiosInstance.interceptors.response.use(
|
|
|
- (res) => {
|
|
|
- //removePending(res) //在请求结束后,移除本次请求
|
|
|
- return res
|
|
|
- },
|
|
|
- (err) => {
|
|
|
- const { msg, message } = err.response?.data ?? {}
|
|
|
- if (!axios.isCancel(err)) {
|
|
|
- console.error(err)
|
|
|
+ return config
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ console.error(err)
|
|
|
+ return Promise.reject('出现错误,请稍后再试')
|
|
|
+ }
|
|
|
+ )
|
|
|
+ // 响应拦截器
|
|
|
+ this.axiosInstance.interceptors.response.use(
|
|
|
+ (res) => {
|
|
|
+ //removePending(res) //在请求结束后,移除本次请求
|
|
|
+ return res
|
|
|
+ },
|
|
|
+ (err) => {
|
|
|
+ if (err.message === 'Network Error') {
|
|
|
+ return Promise.reject('无网络连接,请检查网络')
|
|
|
+ }
|
|
|
+ if (err.response) {
|
|
|
+ const { msg, message } = err.response.data ?? {}
|
|
|
+ switch (err.response.status) {
|
|
|
+ case 408: {
|
|
|
+ return Promise.reject('请求超时,请稍后再试')
|
|
|
+ }
|
|
|
+ default: {
|
|
|
+ return Promise.reject(msg || message)
|
|
|
+ }
|
|
|
}
|
|
|
- // 异常提示待优化
|
|
|
- return Promise.reject(msg || message)
|
|
|
}
|
|
|
- )
|
|
|
- }
|
|
|
- return Promise.resolve(this.axiosInstance)
|
|
|
+ return Promise.reject('出现错误,请稍后再试')
|
|
|
+ }
|
|
|
+ )
|
|
|
}
|
|
|
|
|
|
private request = async (url: string, method: Method, payload?: unknown) => {
|
|
|
+ const config = await service.onReady()
|
|
|
+ this.axiosInstance.defaults.baseURL = config.goCommonSearchUrl
|
|
|
const requestConfig: AxiosRequestConfig = {
|
|
|
url,
|
|
|
method,
|
|
|
@@ -79,17 +78,17 @@ const httpService = new (class {
|
|
|
} else {
|
|
|
requestConfig.url = url + (payload ?? '')
|
|
|
}
|
|
|
- const instance = await this.init()
|
|
|
- return instance(requestConfig)
|
|
|
+ return this.axiosInstance(requestConfig)
|
|
|
}
|
|
|
|
|
|
commonRequest = async <T extends Payload>(url: string, method: Method, params: CommonParams<T>, errMsg?: string) => {
|
|
|
const { data, success, fail, complete } = params
|
|
|
- await this.request(url, method, data).then((res) => {
|
|
|
+ return await this.request(url, method, data).then((res) => {
|
|
|
const data = res.data as T['rsp']
|
|
|
success && success(data)
|
|
|
+ return Promise.resolve(data)
|
|
|
}).catch((err) => {
|
|
|
- const msg = err ?? (errMsg ? '请求失败: ' + errMsg : '服务异常,请稍后重试')
|
|
|
+ const msg = err ?? (errMsg ? '请求失败: ' + errMsg : '请求失败,请稍后重试')
|
|
|
fail && fail(msg)
|
|
|
return Promise.reject(msg)
|
|
|
}).finally(() => {
|
|
|
@@ -99,24 +98,20 @@ const httpService = new (class {
|
|
|
|
|
|
httpRequest = async <T extends Payload>(url: string, method: Method, params: HttpParams<T>, errMsg?: string) => {
|
|
|
const { data, success, fail, complete } = params
|
|
|
- await this.request(url, method, data).then((res) => {
|
|
|
+ return await this.request(url, method, data).then((res) => {
|
|
|
const data = res.data as HttpResponse<T['rsp']>
|
|
|
switch (data.code) {
|
|
|
case ResultCode.InvalidToken:
|
|
|
- //退出登录
|
|
|
- //store.dispatch("user/logout", () => {
|
|
|
- // window.location.reload()
|
|
|
- //})
|
|
|
return Promise.reject('令牌无效')
|
|
|
case ResultCode.Success:
|
|
|
success && success(data)
|
|
|
- return Promise.resolve()
|
|
|
+ return Promise.resolve(data)
|
|
|
default:
|
|
|
fail && fail(data.msg)
|
|
|
return Promise.reject(data.msg)
|
|
|
}
|
|
|
}).catch((err) => {
|
|
|
- const msg = err ?? (errMsg ? '请求失败: ' + errMsg : '服务异常,请稍后重试')
|
|
|
+ const msg = err ?? (errMsg ? '请求失败: ' + errMsg : '请求失败,请稍后重试')
|
|
|
fail && fail(msg)
|
|
|
return Promise.reject(msg)
|
|
|
}).finally(() => {
|