|
|
|
/**
|
|
|
|
* 请求封装
|
|
|
|
*/
|
|
|
|
import $ from './globalJs'
|
|
|
|
const tokenKey = 'token'
|
|
|
|
const tokenKeyValue = ''
|
|
|
|
|
|
|
|
class Request {
|
|
|
|
constructor(config = {}) {
|
|
|
|
this.config = {};
|
|
|
|
this.config.baseUrl = config.baseUrl? config.baseUrl: '';
|
|
|
|
this.config.dataType = config.dataType? config.dataType: 'json';
|
|
|
|
this.config.responseType = config.responseType? config.responseType: 'text';
|
|
|
|
this.config.header = config.header? config.header: {};
|
|
|
|
this.reqInterceptors = null;
|
|
|
|
this.resInterceptors = null;
|
|
|
|
this.interceptors = {
|
|
|
|
request: fn => {
|
|
|
|
this.reqInterceptors = fn;
|
|
|
|
},
|
|
|
|
response: fn => {
|
|
|
|
this.resInterceptors = fn;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
setConfig(config = {}) {
|
|
|
|
this.config = this._deepCopy(this._merge(this.config, config));
|
|
|
|
}
|
|
|
|
// 请求封装
|
|
|
|
globalRequest(url,config, method,isForm = '') {
|
|
|
|
const _this = this;
|
|
|
|
let newConfig = this._deepCopy(this._merge(this.config, config));
|
|
|
|
let lastConfig = {};
|
|
|
|
if (this.reqInterceptors && typeof this.reqInterceptors === 'function') {
|
|
|
|
let reqInterceptors = this.reqInterceptors(newConfig);
|
|
|
|
if (!reqInterceptors && process.env.NODE_ENV === "development") {
|
|
|
|
console.log('请求被拦截,此消息仅在开发环境显示。')
|
|
|
|
return false;
|
|
|
|
} else if (Object.prototype.toString.call(reqInterceptors) === "[object Promise]") {
|
|
|
|
return reqInterceptors;
|
|
|
|
}
|
|
|
|
lastConfig = this._deepCopy(reqInterceptors);
|
|
|
|
} else {
|
|
|
|
lastConfig = this._deepCopy(newConfig);
|
|
|
|
}
|
|
|
|
let header = {}
|
|
|
|
let tokenData = $.getData('token')
|
|
|
|
if(tokenData){
|
|
|
|
header[tokenKey] = tokenKeyValue + tokenData
|
|
|
|
}
|
|
|
|
if(isForm){
|
|
|
|
header['content-type'] = 'application/x-www-form-urlencoded'
|
|
|
|
}
|
|
|
|
let fullUrl = this._formatUrl(lastConfig.baseUrl, url);
|
|
|
|
if(url.indexOf('http') != -1){
|
|
|
|
fullUrl = url
|
|
|
|
}
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
console.log(fullUrl)
|
|
|
|
uni.request({
|
|
|
|
url: fullUrl,
|
|
|
|
method:method,
|
|
|
|
data: config,
|
|
|
|
header: header,
|
|
|
|
async complete(response) {
|
|
|
|
let res = response;
|
|
|
|
if (_this.resInterceptors && typeof _this.resInterceptors === 'function') {
|
|
|
|
let resInterceptors = _this.resInterceptors(res);
|
|
|
|
// console.log('resInterceptors-----------------',resInterceptors)
|
|
|
|
if(resInterceptors.statusCode == 401 || resInterceptors.data.code == 403){
|
|
|
|
$.toast('登录信息已过期,请重新登录')
|
|
|
|
$.removeData('token')
|
|
|
|
setTimeout(() => {
|
|
|
|
$.openNew('/pages/logIn/logIn')
|
|
|
|
},1500)
|
|
|
|
return
|
|
|
|
}else if(resInterceptors.statusCode != 200){
|
|
|
|
$.toast(resInterceptors.data.message)
|
|
|
|
}
|
|
|
|
if (!resInterceptors && resInterceptors != '') {
|
|
|
|
reject('返回值已被您拦截!');
|
|
|
|
return;
|
|
|
|
} else if (Object.prototype.toString.call(resInterceptors) === "[object Promise]") {
|
|
|
|
try {
|
|
|
|
let promiseRes = await resInterceptors;
|
|
|
|
resolve(promiseRes)
|
|
|
|
} catch (error) {
|
|
|
|
reject(error)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
res = resInterceptors;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
resolve(res.data);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
addFile(file,success, progress) {
|
|
|
|
const _this = this;
|
|
|
|
let newConfig = this._deepCopy(this._merge(this.config, {}));
|
|
|
|
let lastConfig = {};
|
|
|
|
if (this.reqInterceptors && typeof this.reqInterceptors === 'function') {
|
|
|
|
let reqInterceptors = this.reqInterceptors(newConfig);
|
|
|
|
if (!reqInterceptors && process.env.NODE_ENV === "development") {
|
|
|
|
console.log('请求被拦截,此消息仅在开发环境显示。')
|
|
|
|
return false;
|
|
|
|
} else if (Object.prototype.toString.call(reqInterceptors) === "[object Promise]") {
|
|
|
|
return reqInterceptors;
|
|
|
|
}
|
|
|
|
lastConfig = this._deepCopy(reqInterceptors);
|
|
|
|
} else {
|
|
|
|
lastConfig = this._deepCopy(newConfig);
|
|
|
|
}
|
|
|
|
let fullUrl = this._formatUrl(lastConfig.baseUrl, $.imgUrl);
|
|
|
|
let header = {
|
|
|
|
// 'content-Type':'multipart/form-data'
|
|
|
|
}
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const UploadTask = uni.uploadFile({
|
|
|
|
url : fullUrl,
|
|
|
|
filePath: file[0].path,
|
|
|
|
header:header,
|
|
|
|
name: $.fileImgKey,
|
|
|
|
formData: {},
|
|
|
|
async complete(response) {
|
|
|
|
let res = response;
|
|
|
|
if (_this.resInterceptors && typeof _this.resInterceptors === 'function') {
|
|
|
|
let resInterceptors = _this.resInterceptors(res);
|
|
|
|
if (!resInterceptors && resInterceptors != '') {
|
|
|
|
reject('返回值已被您拦截!');
|
|
|
|
return;
|
|
|
|
} else if (Object.prototype.toString.call(resInterceptors) === "[object Promise]") {
|
|
|
|
try {
|
|
|
|
let promiseRes = await resInterceptors;
|
|
|
|
resolve(promiseRes)
|
|
|
|
} catch (error) {
|
|
|
|
reject(error)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
res = resInterceptors;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
success(JSON.parse(res.data));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
// 监听上传进度
|
|
|
|
if (progress) {
|
|
|
|
UploadTask.onProgressUpdate((res) => {
|
|
|
|
progress(res.progress);
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
// 上传图片
|
|
|
|
addImg(length = 1,success,progress,type = 1) {
|
|
|
|
// 获取本地图片的路径
|
|
|
|
uni.chooseImage({
|
|
|
|
count: length,
|
|
|
|
// original原图compressed压缩图
|
|
|
|
sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有
|
|
|
|
// camera相机album相册
|
|
|
|
sourceType: ['album','camera'], // 可以指定来源是相册还是相机,默认二者都有
|
|
|
|
success: (res) => {
|
|
|
|
// 显示上传动画
|
|
|
|
$.showLoading('图片上传中...');
|
|
|
|
var imgs;
|
|
|
|
imgs = res.tempFilePaths
|
|
|
|
// #ifdef H5
|
|
|
|
// 调用上传图片的函数
|
|
|
|
// 处理多选
|
|
|
|
// if (imgs.length > length) {
|
|
|
|
// imgs = imgs.slice(0, length);
|
|
|
|
// }
|
|
|
|
this.fileImg(imgs, 0, success, progress,type);
|
|
|
|
// #endif
|
|
|
|
// #ifdef APP
|
|
|
|
console.log('imgs',imgs)
|
|
|
|
// 将新添加的图片添加到imgs_arr中
|
|
|
|
uni.compressImage({
|
|
|
|
src: imgs[0],
|
|
|
|
quality: 60, // 仅对jpg有效
|
|
|
|
success: ress => {
|
|
|
|
this.fileImg([ress.tempFilePath], 0, success, progress,type);
|
|
|
|
},
|
|
|
|
fail: err => {
|
|
|
|
$.hideLoading('图片上传中...');
|
|
|
|
},
|
|
|
|
complete: (msg) => {
|
|
|
|
}
|
|
|
|
});
|
|
|
|
// #endif
|
|
|
|
},
|
|
|
|
complete: (err) => {
|
|
|
|
},
|
|
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
fileImg(imgs, index,success, progress,type) {
|
|
|
|
const _this = this;
|
|
|
|
let newConfig = this._deepCopy(this._merge(this.config, {}));
|
|
|
|
let lastConfig = {};
|
|
|
|
if (this.reqInterceptors && typeof this.reqInterceptors === 'function') {
|
|
|
|
let reqInterceptors = this.reqInterceptors(newConfig);
|
|
|
|
if (!reqInterceptors && process.env.NODE_ENV === "development") {
|
|
|
|
console.log('请求被拦截,此消息仅在开发环境显示。')
|
|
|
|
return false;
|
|
|
|
} else if (Object.prototype.toString.call(reqInterceptors) === "[object Promise]") {
|
|
|
|
return reqInterceptors;
|
|
|
|
}
|
|
|
|
lastConfig = this._deepCopy(reqInterceptors);
|
|
|
|
} else {
|
|
|
|
lastConfig = this._deepCopy(newConfig);
|
|
|
|
}
|
|
|
|
let fullUrl = this._formatUrl(lastConfig.baseUrl, $.imgUrl);
|
|
|
|
if(type == 2){
|
|
|
|
fullUrl = this._formatUrl(lastConfig.baseUrl, $.imgUserIdUrl)
|
|
|
|
}
|
|
|
|
let header = {
|
|
|
|
token: $.getData('token')
|
|
|
|
}
|
|
|
|
// 如果数组长度大于下标,说明没有上传完
|
|
|
|
if (imgs.length > index) {
|
|
|
|
var src = imgs[index];
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const UploadTask = uni.uploadFile({
|
|
|
|
url : fullUrl,
|
|
|
|
filePath: src,
|
|
|
|
header:header,
|
|
|
|
name: $.fileImgKey,
|
|
|
|
formData: {},
|
|
|
|
async complete(response) {
|
|
|
|
let res = response;
|
|
|
|
if (_this.resInterceptors && typeof _this.resInterceptors === 'function') {
|
|
|
|
let resInterceptors = _this.resInterceptors(res);
|
|
|
|
// console.log('resInterceptors',resInterceptors)
|
|
|
|
let datasJSON = JSON.parse(resInterceptors.data)
|
|
|
|
if(datasJSON.code == 1101){
|
|
|
|
|
|
|
|
}
|
|
|
|
if (!resInterceptors && resInterceptors != '') {
|
|
|
|
reject('返回值已被您拦截!');
|
|
|
|
return;
|
|
|
|
} else if (Object.prototype.toString.call(resInterceptors) === "[object Promise]") {
|
|
|
|
try {
|
|
|
|
let promiseRes = await resInterceptors;
|
|
|
|
resolve(promiseRes)
|
|
|
|
} catch (error) {
|
|
|
|
reject(error)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
res = resInterceptors;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
success(JSON.parse(res.data));
|
|
|
|
_this.fileImg(imgs, index+1, progress)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
// 监听上传进度
|
|
|
|
if (progress) {
|
|
|
|
UploadTask.onProgressUpdate((res) => {
|
|
|
|
progress(res.progress);
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
// #ifdef H5
|
|
|
|
// 压缩
|
|
|
|
// lrz(src, {
|
|
|
|
// quality: 0.7,
|
|
|
|
// }).then((rst) => { // fieldName 为 formData 中多媒体的字段名
|
|
|
|
|
|
|
|
// })
|
|
|
|
// #endif
|
|
|
|
// #ifdef APP-PLUS
|
|
|
|
// #endif
|
|
|
|
|
|
|
|
} else {
|
|
|
|
$.hideLoading();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 上传视频
|
|
|
|
addVideo(url, success, progress) {
|
|
|
|
// 获取本地视频的路径
|
|
|
|
uni.chooseVideo({
|
|
|
|
sourceType: ['album', 'camera'], // 选择方式
|
|
|
|
success: (res) => {
|
|
|
|
if (res.size > $.videoSize) {
|
|
|
|
let size = parseInt($.videoSize / 1024000);
|
|
|
|
$.toast("上传视频过大,大小请不要超过" + size + "M");
|
|
|
|
} else {
|
|
|
|
// 显示上传动画
|
|
|
|
$.showLoading("视频上传中...");
|
|
|
|
// 调用上传视频的函数
|
|
|
|
this.fileVideo(res.tempFilePath,url,success,progress);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
fail: (res) => {
|
|
|
|
console.log(JSON.stringify(res));
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
fileVideo(src, url,success, progress) {
|
|
|
|
const _this = this;
|
|
|
|
let newConfig = this._deepCopy(this._merge(this.config, {}));
|
|
|
|
let lastConfig = {};
|
|
|
|
if (this.reqInterceptors && typeof this.reqInterceptors === 'function') {
|
|
|
|
let reqInterceptors = this.reqInterceptors(newConfig);
|
|
|
|
if (!reqInterceptors && process.env.NODE_ENV === "development") {
|
|
|
|
console.log('请求被拦截,此消息仅在开发环境显示。')
|
|
|
|
return false;
|
|
|
|
} else if (Object.prototype.toString.call(reqInterceptors) === "[object Promise]") {
|
|
|
|
return reqInterceptors;
|
|
|
|
}
|
|
|
|
lastConfig = this._deepCopy(reqInterceptors);
|
|
|
|
} else {
|
|
|
|
lastConfig = this._deepCopy(newConfig);
|
|
|
|
}
|
|
|
|
let fullUrl = this._formatUrl(lastConfig.baseUrl, $.imgUrl);
|
|
|
|
//上传视频
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
const UploadTask = uni.uploadFile({
|
|
|
|
url: fullUrl,
|
|
|
|
filePath: src,
|
|
|
|
name: $.fileVideoKey,
|
|
|
|
async complete(response) {
|
|
|
|
let res = response;
|
|
|
|
if (_this.resInterceptors && typeof _this.resInterceptors === 'function') {
|
|
|
|
let resInterceptors = _this.resInterceptors(res);
|
|
|
|
// console.log('resInterceptors',resInterceptors)
|
|
|
|
if (!resInterceptors && resInterceptors != '') {
|
|
|
|
reject('返回值已被您拦截!');
|
|
|
|
return;
|
|
|
|
} else if (Object.prototype.toString.call(resInterceptors) === "[object Promise]") {
|
|
|
|
try {
|
|
|
|
let promiseRes = await resInterceptors;
|
|
|
|
resolve(promiseRes)
|
|
|
|
} catch (error) {
|
|
|
|
reject(error)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
res = resInterceptors;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
success(JSON.parse(res.data));
|
|
|
|
$.hideLoading();
|
|
|
|
},
|
|
|
|
success: (res) => {
|
|
|
|
success(JSON.parse(res.data));
|
|
|
|
// 关闭上传动画
|
|
|
|
},
|
|
|
|
fail: (e) => {
|
|
|
|
// 关闭上传动画
|
|
|
|
$.hideLoading();
|
|
|
|
$.toast("上传超时!");
|
|
|
|
},
|
|
|
|
})
|
|
|
|
// 监听上传进度
|
|
|
|
if (progress) {
|
|
|
|
UploadTask.onProgressUpdate((res) => {
|
|
|
|
progress(res.progress);
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
_formatUrl(baseUrl, url) {
|
|
|
|
if (!baseUrl) return url;
|
|
|
|
let formatUrl = '';
|
|
|
|
const baseUrlEndsWithSlash = baseUrl.endsWith('/');
|
|
|
|
const urlStartsWithSlash = url.startsWith('/');
|
|
|
|
if (baseUrlEndsWithSlash && urlStartsWithSlash) {
|
|
|
|
formatUrl = baseUrl + url.substring(1);
|
|
|
|
} else if (baseUrlEndsWithSlash || urlStartsWithSlash) {
|
|
|
|
formatUrl = baseUrl + url;
|
|
|
|
} else {
|
|
|
|
formatUrl = baseUrl + '/' + url;
|
|
|
|
}
|
|
|
|
return formatUrl;
|
|
|
|
}
|
|
|
|
_merge(oldConfig, newConfig) {
|
|
|
|
let mergeConfig = this._deepCopy(oldConfig);
|
|
|
|
if (!newConfig || !Object.keys(newConfig).length) return mergeConfig;
|
|
|
|
for (let key in newConfig) {
|
|
|
|
if (key !== 'header') {
|
|
|
|
mergeConfig[key] = newConfig[key];
|
|
|
|
} else {
|
|
|
|
if (Object.prototype.toString.call(newConfig[key]) === '[object Object]') {
|
|
|
|
for (let headerKey in newConfig[key]) {
|
|
|
|
mergeConfig[key][headerKey] = newConfig[key][headerKey];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return mergeConfig;
|
|
|
|
}
|
|
|
|
_deepCopy(obj) {
|
|
|
|
let result = Array.isArray(obj) ? [] : {};
|
|
|
|
for (let key in obj) {
|
|
|
|
if (obj.hasOwnProperty(key)) {
|
|
|
|
if (typeof obj[key] === 'object') {
|
|
|
|
result[key] = this._deepCopy(obj[key]);
|
|
|
|
} else {
|
|
|
|
result[key] = obj[key];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!global.$request) {
|
|
|
|
global.$request = new Request();
|
|
|
|
}
|
|
|
|
|
|
|
|
export default global.$request;
|