You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
243 lines
5.2 KiB
243 lines
5.2 KiB
import store from "@/store/index.js"; |
|
import { |
|
useStore |
|
} from 'vuex'; |
|
import utils from '@/utils/utils.js' |
|
import functions from '@/utils/functions.js' |
|
import { |
|
host, |
|
APPKEY |
|
} from "@/config/host"; |
|
import base64 from '@/utils/base64.js'; |
|
import { |
|
hexMD5 |
|
} from '@/utils/md5.js' |
|
import { |
|
nextTick |
|
} from 'vue'; |
|
|
|
// const store = useStore() |
|
|
|
/** |
|
* 请求函数 |
|
*/ |
|
const HandleRequest = (params, key, loadingObj) => { |
|
return new Promise(async (relove, reject) => { |
|
console.log('进入请求'); |
|
let token = uni.getStorageSync('token') |
|
let user = uni.getStorageSync('userinfo') |
|
let header = {}; |
|
// if (user && token && refresh_token) { |
|
// store.commit('updateislog', true) |
|
// store.commit('updaterftk', refresh_token) |
|
// store.commit('updatetk', token) |
|
// store.commit('updatauser', user) |
|
// header['Blade-Auth'] = `bearer ${store.state.token}` |
|
// } else { |
|
// if (!token && params.url.indexOf('oauth/token') == -1) { |
|
|
|
// } |
|
// } |
|
// header.Authorization = `Basic ${base64.encode(APPKEY)}` |
|
|
|
// return |
|
|
|
console.log('params.url :>> ', params.url); |
|
|
|
if (params.url !== 'api/login') { |
|
header['Authorization'] = `Bearer ${token}` |
|
} |
|
|
|
let content = '' |
|
if (loadingObj.title) content = loadingObj.title |
|
|
|
// 开启loading |
|
if (loadingObj.isShowLoading !== false) uni.showLoading({ |
|
title: content, |
|
mask: true |
|
}) |
|
let urlhd = '' |
|
if (uni.getStorageSync('setip')) { |
|
urlhd = uni.getStorageSync('setip') |
|
} else { |
|
urlhd = host |
|
} |
|
|
|
let submitData = { |
|
url: urlhd + params.url, |
|
data: params.data, |
|
method: params.method, |
|
header, |
|
complete: () => {} |
|
} |
|
let response = {} |
|
|
|
console.log('submitData :>> ', submitData); |
|
|
|
// 成功执行的回调 |
|
submitData.success = res => { |
|
// console.log(res); |
|
console.log('请求res :>> ', res); |
|
|
|
response = res |
|
|
|
if (res.statusCode == 200) { |
|
|
|
let data = res.data; |
|
|
|
const { |
|
code, |
|
data: resData |
|
} = res.data |
|
|
|
switch (data.code) { |
|
case 200: |
|
// 请求成功, 删除请求记录 |
|
delete requestObj[key] |
|
relove(data); |
|
break; |
|
case 203: |
|
// 请求成功, 删除请求记录 |
|
delete requestObj[key] |
|
relove(data); |
|
break; |
|
case 1001: |
|
store.commit('HANDLE_UPDATA_TOKEN', resData) |
|
|
|
return relove(HandleRequest(params, key, loadingObj)) |
|
|
|
case 1002: |
|
store.commit('HANDLE_CLEAR_INFO') |
|
delete requestObj[key] |
|
uni.reLaunch({ |
|
url: '/pages/login/login' |
|
}) |
|
|
|
return |
|
default: |
|
delete requestObj[key] |
|
relove(data); |
|
break; |
|
} |
|
|
|
} else { |
|
if (res.statusCode == 400) { |
|
delete requestObj[key] |
|
relove({}); |
|
return |
|
} else if (res.statusCode == 500) { |
|
delete requestObj[key] |
|
functions.error('接口出错,请联系后端开发人员') |
|
// #ifdef APP |
|
utils.ttsspke('接口出错,请联系后端开发人员') |
|
// #endif |
|
relove({}) |
|
return |
|
} else if (res.statusCode == 401) { |
|
delete requestObj[key] |
|
// 登录失败时 |
|
if (isLogin) { |
|
uni.hideLoading() |
|
return uni.showToast({ |
|
title: "登录失败", |
|
icon: 'none' |
|
}) |
|
} |
|
} else { |
|
console.log('111 :>> ', 111); |
|
delete requestObj[key] |
|
functions.error('连接服务器失败') |
|
// #ifdef APP |
|
utils.ttsspke('连接服务器失败') |
|
// #endif |
|
reject(res) |
|
} |
|
} |
|
} |
|
|
|
// 失败执行回调 |
|
submitData.fail = async err => { |
|
console.log('err', err); |
|
|
|
const { |
|
errMsg |
|
} = err |
|
|
|
|
|
if (errMsg === 'request:fail abort') return |
|
delete requestObj[key] |
|
functions.error('请检查是否连接到无线网络') |
|
// #ifdef APP |
|
utils.ttsspke('请检查是否连接到无线网络') |
|
// #endif |
|
} |
|
|
|
// 完成后执行回调 |
|
submitData.complete = async res => { |
|
await nextTick() |
|
if (loadingObj.isShowLoading !== false) uni.hideLoading() |
|
|
|
const { |
|
data |
|
} = response |
|
|
|
if (data) { |
|
if (data.code !== 200 && data.code !== 401) { |
|
if (data.msg) utils.handleToast(data.msg) |
|
} else if (data.audio) utils.handleToast(data.audio, 'none', false) |
|
} |
|
} |
|
const request = uni.request(submitData) |
|
|
|
requestObj[key].request = request |
|
}) |
|
} |
|
|
|
/** |
|
* 存储请求 |
|
*/ |
|
let requestObj = {} |
|
|
|
/** |
|
* 是否正在进行刷新token |
|
*/ |
|
let _isRefreshToken = { |
|
_isRefreshToken: null |
|
} |
|
|
|
let isLogin = false |
|
|
|
/** |
|
* @param {object} params 参数 |
|
* @param {{isShowLoading?: boolean, title?: string}} loadingObj isShowLoading -- 是否显示loading, title -- loading文字 |
|
* @param {boolean} canCancel 请求是否能被取消 |
|
*/ |
|
const service = async (params, loadingObj, canCancel = false) => { |
|
if (params.data.isLogin) { |
|
isLogin = true |
|
delete params.data.isLogin |
|
} else isLogin = false |
|
console.log('params :>> ', params); |
|
console.log('requestObj :>> ', requestObj); |
|
const _key = params.url + JSON.stringify(params.data) |
|
|
|
// 防止重复请求 |
|
if (requestObj[_key]) { |
|
const { |
|
request |
|
} = requestObj[_key] |
|
|
|
if (canCancel && request) { |
|
console.log('request :>> ', request); |
|
request.abort() |
|
} else return new Promise(resolve => resolve({ |
|
code: 4000 |
|
})) |
|
} |
|
// 记录请求参数 |
|
requestObj[_key] = { |
|
params |
|
} |
|
return HandleRequest(params, _key, loadingObj) |
|
} |
|
export default service; |