货无忧安装平台
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

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;