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;