import store from '../store' import CryptoJS from 'crypto-js' import qs from 'qs' import common from '../utils/common' import { baseURL } from '@/api/config' let requestNum = 0 // 当前请求数量 // console.log(baseURL) export function request({ url, method, data, ...config }, isLoading = false, isErrorToast = true) { data = { ...store.state.sysInfo, ...data } showLoading(isLoading) return new Promise((resolve, reject) => { uni.request({ url: baseURL + url, method: method || 'POST', data: { ...data, sign: getSign(data) }, header: { 'content-type': 'application/x-www-form-urlencoded', token: store.state.token }, timeout: 30000, ...config, success: ({ statusCode, data = {} }) => { if (statusCode === 200) { if (data.code === 205 || data.code === 206) { resolve(data) } else if (data.code >= 200 && data.code < 300) { resolve(data.data) } else { reject(errHandle(data.code, data, isErrorToast)) } } else { reject(errHandle(statusCode, data, isErrorToast)) } }, fail: xhr => { console.log('failXhr => ', xhr) reject(errHandle(null, null, isErrorToast)) }, complete: () => { hideLoading(isLoading) } }) }) } function errHandle(code, data, isErrorToast) { if (code === 401 || code === 402 || code === 403) { // 401 未登录或者 token 过期,402 账号在其他地方登录 store.commit('exit') } if (isErrorToast) { common.toast(data.msg || '请求失败,请稍后再试') } return { code, data } } function getSign(obj) { // 按 ASCII 码排序 let str = qs.stringify(obj, { sort: (a, b) => a.localeCompare(b) }) // 拼接密钥 str += '&key=fec905e4e7568e8f70529e1dc1f51c59' str = decodeURIComponent(str) // MD5 运算 // str = CryptoJS.MD5(str) // AES 加密 str = common.Encryption(str) // 转大写 str = str.toUpperCase() return str } function showLoading(isLoading) { if (!isLoading) return requestNum++ if (requestNum === 1) { uni.showLoading({ title: '加载中...' }) } } function hideLoading(isLoading) { if (!isLoading) return requestNum-- if (requestNum <= 0) { uni.hideLoading() } }