|
@@ -1,16 +1,18 @@
|
|
/* eslint-disable no-console */
|
|
/* eslint-disable no-console */
|
|
/* eslint-disable no-param-reassign */
|
|
/* eslint-disable no-param-reassign */
|
|
|
|
|
|
-import { get, isObject } from 'lodash-es'
|
|
|
|
|
|
+import { get, isObject, pick } from 'lodash-es'
|
|
import Axios from 'axios'
|
|
import Axios from 'axios'
|
|
import { trimData, isNullOrUndefined } from './util-methods'
|
|
import { trimData, isNullOrUndefined } from './util-methods'
|
|
import { ErrorCode } from './error-code'
|
|
import { ErrorCode } from './error-code'
|
|
import router from '@/router'
|
|
import router from '@/router'
|
|
import i18n from '@/lang'
|
|
import i18n from '@/lang'
|
|
|
|
+import * as crypto from './crypto'
|
|
let currentRequests = 0
|
|
let currentRequests = 0
|
|
|
|
+const { VITE_APP_BASE_API, VITE_USE_CRYPTO } = import.meta.env
|
|
|
|
|
|
export class AxiosWrapper {
|
|
export class AxiosWrapper {
|
|
- constructor({ baseUrl = import.meta.env.VITE_APP_BASE_API, unwrap = true } = {}) {
|
|
|
|
|
|
+ constructor({ baseUrl = VITE_APP_BASE_API, unwrap = true } = {}) {
|
|
this.baseUrl = baseUrl
|
|
this.baseUrl = baseUrl
|
|
this.unwrap = unwrap
|
|
this.unwrap = unwrap
|
|
}
|
|
}
|
|
@@ -71,28 +73,62 @@ export class AxiosWrapper {
|
|
const params = get(options, 'params')
|
|
const params = get(options, 'params')
|
|
const url = AxiosWrapper.merge(uri, params)
|
|
const url = AxiosWrapper.merge(uri, params)
|
|
currentRequests += 1
|
|
currentRequests += 1
|
|
- // Indicator.open({
|
|
|
|
- // spinnerType: 'fading-circle',
|
|
|
|
- // });
|
|
|
|
try {
|
|
try {
|
|
let returnData
|
|
let returnData
|
|
const axios = Axios.create({
|
|
const axios = Axios.create({
|
|
baseURL: this.baseUrl,
|
|
baseURL: this.baseUrl,
|
|
withCredentials: true
|
|
withCredentials: true
|
|
})
|
|
})
|
|
- // if (util.token && util.token !== null) axios.defaults.headers.common.Authorization = util.token;
|
|
|
|
|
|
+ // #region 加密部分
|
|
|
|
+ // 加密,需要根据env文件判断是否启用加密
|
|
|
|
+ if (VITE_USE_CRYPTO) {
|
|
|
|
+ // 生成随机字符串
|
|
|
|
+ const reqCode = crypto.getRandomString()
|
|
|
|
+ axios.interceptors.request.use(async (config) => {
|
|
|
|
+ // 加密真实使用的加密字符串
|
|
|
|
+ const deReqCode = crypto.pemEncrypt(reqCode)
|
|
|
|
+ // 加密数据并替换
|
|
|
|
+ config.transformRequest = (data) => {
|
|
|
|
+ if (data) {
|
|
|
|
+ // 加密 加密字符串
|
|
|
|
+ const strData = JSON.stringify(data)
|
|
|
|
+ // 加密数据
|
|
|
|
+ const enCodeData = crypto.encrypt(deReqCode, strData)
|
|
|
|
+ // 替换数据位置
|
|
|
|
+ return { data: enCodeData }
|
|
|
|
+ }
|
|
|
|
+ return undefined
|
|
|
|
+ }
|
|
|
|
+ // 添加请求头,将 加密的真实使用加密字符串附上
|
|
|
|
+ config.headers['api-token'] = deReqCode
|
|
|
|
+ return config
|
|
|
|
+ })
|
|
|
|
+ axios.interceptors.response.use(
|
|
|
|
+ (response) => {
|
|
|
|
+ if (get(response, 'data.data')) {
|
|
|
|
+ let data = crypto.decrypt(reqCode, get(response, 'data.data'))
|
|
|
|
+ const dobj = JSON.parse(data || '{}')
|
|
|
|
+ const others = pick(get(response, 'data'), ['errcode', 'errmsg'])
|
|
|
|
+ response.data = { ...others, ...dobj }
|
|
|
|
+ }
|
|
|
|
+ return response
|
|
|
|
+ },
|
|
|
|
+ (error) => Promise.reject(error)
|
|
|
|
+ )
|
|
|
|
+ }
|
|
|
|
+ // #endregion
|
|
const token = localStorage.getItem('token')
|
|
const token = localStorage.getItem('token')
|
|
- const apiToken = localStorage.getItem('apiToken')
|
|
|
|
if (token) axios.defaults.headers.common['token'] = token
|
|
if (token) axios.defaults.headers.common['token'] = token
|
|
- if (apiToken) axios.defaults.headers.common['api-token'] = apiToken
|
|
|
|
- const res = await axios.request({
|
|
|
|
|
|
+
|
|
|
|
+ const requestOptions = {
|
|
method: isNullOrUndefined(data) ? 'get' : 'post',
|
|
method: isNullOrUndefined(data) ? 'get' : 'post',
|
|
url,
|
|
url,
|
|
data,
|
|
data,
|
|
responseType: 'json',
|
|
responseType: 'json',
|
|
...options
|
|
...options
|
|
- })
|
|
|
|
- const returnRes = res.data
|
|
|
|
|
|
+ }
|
|
|
|
+ const res = await axios.request(requestOptions)
|
|
|
|
+ let returnRes = res.data
|
|
const { errcode, errmsg, details } = returnRes
|
|
const { errcode, errmsg, details } = returnRes
|
|
if (errcode) {
|
|
if (errcode) {
|
|
console.warn(`[${uri}] fail: ${errcode}-${errmsg} ${details}`)
|
|
console.warn(`[${uri}] fail: ${errcode}-${errmsg} ${details}`)
|