import Vue from 'vue' import axios from 'axios' import qs from 'qs' import md5 from 'js-md5'; import constant from './constant.js'; // #ifdef H5 let baseURL = constant.H5 let key = constant.H5_KEY // #endif // #ifdef APP-PLUS let baseURL = constant.APP let key = constant.APP_KEY // #endif const service = axios.create({ withCredentials: true, crossDomain: true, baseURL, timeout: 160000 }) // request拦截器,在请求之前做一些处理 service.interceptors.request.use( config => { // console.log('showDialog' + Vue.prototype.$showDialog) if (Vue.prototype.$showDialog) { uni.showLoading({ title: 'loading', mask: true }) } // if (config.url == '/api/user/addressSave') { // config.headers['Content-Type'] = 'application/json' // } // if (store.state.token) { // // 给请求头添加user-token // config.headers["user-token"] = store.state.token; // } const ticket = uni.getStorageSync('ticket') let dataStr = []; if (config.method == 'get') { if (config.url.split('?').length > 1) { dataStr = config.url.split('?')[1].split('&'); } } if (config.method == 'post') { dataStr = qs.stringify(config.data).split('&'); // dataStr = JSON.stringify(config.data); // dataStr = config.data; // dataStr = config.data.name; } config.data = {}; dataStr.forEach(function(e) { console.log(e,666666) config.data[e.split('=')[0]] = e.split('=')[1]; }); // console.log(ticket) if (ticket != '') { config.data['ticket'] = ticket } var keys = []; let sign = ''; for (var k in config.data) keys.push(k); keys.sort(function(a, b) { return a < b ? -1 : 1; }) // console.log("keys==========="); keys.forEach(function(e) { if (config.data[e] || config.data[e] == '') { sign += e + '=' + config.data[e] + '&' } }); // console.log("签名参数==========="); // console.log(config.url); // console.log(sign + key); sign = md5(sign + key); // console.log("提交参数==========="); // console.log(qs.stringify(config.data)); if (config.method == 'post') { // console.log(config.data,666666) config.data['sign'] = sign config.data = qs.stringify(config.data) // config.data = config.data.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1"); // if(config.url == ){ // #ifdef H5 if(config.url=='/api/index/goodsList'){ config.data = config.data.replaceAll('20', ""); config.data = config.data.replaceAll('26', ""); config.data = config.data.replaceAll('2F', "/"); config.data = config.data.replaceAll('28', ""); config.data = config.data.replaceAll('29', ""); // config.data = config.data.replaceAll('%C2%AE', "®"); } // #endif // #ifdef APP-PLUS if(config.url=='/api/index/goodsList'){ config.data = config.data.replace(new RegExp('20',"gm"), ""); config.data = config.data.replace(new RegExp('26',"gm"), ""); config.data = config.data.replace(new RegExp('2F',"gm"), "/"); config.data = config.data.replace(new RegExp('28',"gm"), ""); config.data = config.data.replace(new RegExp('29',"gm"), ""); // config.data = config.data.replaceAll('%C2%AE', "®"); } // #endif // config.data = config.data.replaceAll('2528',"("); // config.data = config.data.replaceAll('2529',")"); // config.data = config.data.replaceAll('252',"%2F"); // } } if (config.method == 'get') { if (ticket != '') { config.url = config.url + '&ticket=' + ticket + '&sign=' + sign } else { config.url = config.url + '?sign=' + sign } } // console.log(config) return config; }, error => { // console.log(error); // for debug return Promise.reject(error); } ); //配置成功后的拦截器 service.interceptors.response.use(res => { console.log('过期了吗') uni.hideLoading() // console.log(res) // console.log(res.data) // console.log(res.data.data[0].nameAlias) if (res.data.success || res.data.errCode === 'USER.0017') { // console.log(res.data.success) return res.data } else { uni.showToast({ title: res.data.errMsg, icon: 'none', duration: 1500 }) if (res.data.errCode === 'USER.0010') { uni.removeStorage({ key: 'logInfo', success: function (res) { uni.reLaunch({url: '/pages/login/index'}) }, fail: (err) => { } }); // #ifdef H5 var url = location.href; if(url.indexOf('pages')>-1){ uni.setStorage({ key: 'url', data: url, success: function() { console.log('success') } }); }else{ uni.removeStorageSync('url') } // #endif } uni.$emit('refreshQrCode') return Promise.reject(res.data.errMsg); } }, error => { return Promise.reject(error) }) axios.defaults.adapter = function(config) { //自己定义个适配器,用来适配uniapp的语法 return new Promise((resolve, reject) => { // console.log(config) var settle = require('axios/lib/core/settle'); var buildURL = require('axios/lib/helpers/buildURL'); uni.request({ method: config.method.toUpperCase(), url: config.baseURL + buildURL(config.url, config.params, config.paramsSerializer), header: config.headers, data: config.data, dataType: config.dataType, responseType: config.responseType, sslVerify: config.sslVerify, complete: function complete(response) { //console.log("执行完成:",config.baseURL + buildURL(config.url, config.params, config.paramsSerializer),response.data) response = { data: response.data, status: response.statusCode, errMsg: response.errMsg, header: response.header, config: config }; settle(resolve, reject, response); }, fail: res => { uni.showToast({ title: res, icon: 'none', duration: 1500 }) } }) }) } export default service