ufutx_love_mp/src/mixins/https.js

246 lines
8.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import utils from '../utils/util'
import {service} from '../config'
import { IM } from '../utils/im'
export default {
data: {
errorOne: 1,
errorTwo: 1,
errorThree: 1,
mixin: 'MixinText'
},
methods: {
/* =================== [$get 发起GET请求] =================== */
$get({url = '', headers = {}, data = {}, timeout = 8000}) {
let vm = this
const methods = 'GET'
return new Promise((resolve, reject) => {
this.$ajax({url, headers, methods, data, timeout}).then(({code, data}) => {
resolve({code, data})
}).catch((err) => {
reject(err)
})
})
},
$post({url = '', headers = {}, data = {}, timeout = 8000}) {
const methods = 'POST'
return new Promise((resolve, reject) => {
this.$ajax({url, headers, methods, data, timeout}).then(({code, data}) => {
resolve({code, data})
}).catch((err) => {
reject(err)
})
})
},
$put({url = '', headers = {}, data = {}, timeout = 8000}) {
const methods = 'PUT'
return new Promise((resolve, reject) => {
this.$ajax({url, headers, methods, data, timeout}).then(({code, data}) => {
resolve({code, data})
}).catch((err) => {
reject(err)
})
})
},
$delete({url = '', headers = {}, data = {}, timeout = 8000}) {
const methods = 'DELETE'
return new Promise((resolve, reject) => {
this.$ajax({url, headers, methods, data, timeout}).then(({code, data}) => {
resolve({code, data})
}).catch((err) => {
reject(err)
})
})
},
$ajax({url = '', headers = {}, methods = 'GET', data = {}}) {
// 增强体验:顶部加载中
wx.showNavigationBarLoading()
let versions = this.$app.$options.globalData.versions
let params = {
XDEBUG_SESSION_START: '1',
version: versions,
from_user_id: wx.getStorageSync('from_user_id') || '',
agent_user_id: wx.getStorageSync('agent_user_id') || '',
agent: wx.getStorageSync('agent') || '',
from_source: 'mp',
from_type: wx.getStorageSync('fromType') || ''
}
// 构造请求体
let requestUrl = `${url}${url.includes('?') ? '&' : '?'}` + Object.keys(params).map(i => `${i}=${encodeURIComponent(params[i] || '')}`).join('&')
const request = {
url: requestUrl,
timeout: 10000,
method: ['GET', 'POST', 'PUT', 'DELETE'].indexOf(methods) > -1 ? methods : 'GET',
header: Object.assign({
'Authorization': 'Bearer ' + wx.getStorageSync('token'),
'X-Requested-With': 'XMLHttpRequest'
}, headers),
data: Object.assign({ // set something global
}, data)
}
// 控制台调试日志
// console.table(request)
// 发起请求
return new Promise((resolve, reject) => {
let vm = this
let pages = getCurrentPages() // 获取加载的页面
let currentPage = pages[pages.length - 1] // 获取当前页面的对象
let options = currentPage.options
let url = ''
for (var key in options) {
url = `${url}${key}=${options[key]}&`
}
wx.request(Object.assign(request, {
success: ({statusCode, data}) => {
wx.hideNavigationBarLoading()
const {code, message, notice, operate, path} = data
wx.removeStorageSync('message')
wx.stopPullDownRefresh()
// 控制台调试日志
// 状态码正常 & 确认有数据
if (data.code === 0) {
// 成功回调
wx.removeStorageSync('formId')
resolve({statusCode, ...data})
} else if (data.code == 1) {
reject(new Error(`error ${data.message}`))
vm.errorOne += 1
if (vm.errorOne <= 2) {
wx.showModal({ // 使用模态框提示用户进行操作
title: `温馨提示`,
content: data.message,
showCancel: false,
confirmText: `确定`,
success: function (res) {
if (res.confirm) {
vm.errorOne = 1
wx.hideLoading()
}
}
})
}
let errorMessage = {message: '错误,请寻找开发人员协助'}
wx.hideLoading()
return
wx.hideLoading()
} else if (data.code === 2) {
vm.errorTwo += 1
if (vm.errorTwo <= 2) {
utils.wx_login().then((data) => {
let route = `/${currentPage.route}?${url}`
if (!data.data.token) {
wx.removeStorageSync('information')
wx.switchTab({
url: '/pages/tabBar/home'
})
} else {
currentPage.onShow()
if (route.includes('tabBar')) {
route = route.split('?')[0]
wx.switchTab({url: route})
} else {
wx.redirectTo({url: route})
}
}
let {accid, token} = data.data.im_user // wyy_user
vm.$app.$options.globalData.nim = IM(accid, token)
wx.hideLoading()
})
}
let errorMessage = {message: '错误,需要重新登录'}
throw errorMessage
} else if (code === 3) {
utils.wx_login().then((data) => {
let route = `/${currentPage.route}?${url}`
if (!data.data.token) {
wx.removeStorageSync('information')
wx.switchTab({
url: '/pages/tabBar/home'
})
} else {
currentPage.onShow()
if (route.includes('tabBar')) {
route = route.split('?')[0]
wx.switchTab({url: route})
} else {
wx.redirectTo({url: route})
}
}
let {accid, token} = data.data.im_user // wyy_user
vm.$app.$options.globalData.nim = IM(accid, token)
wx.hideLoading()
})
// vm.errorThree += 1
// if (vm.errorThree <= 2) {
// utils.wx_login().then(({code, data}) => {
// if (code === 0) {
// vm.errorThree = 1
// currentPage.onLoad()
// currentPage.onShow()
// }
// })
// }
}
},
fail: (err) => {
// eslint-disable-next-line prefer-promise-reject-errors
reject(err)
},
complete: (res) => {
setTimeout(() => {
wx.hideLoading() // loading只展示一会就被去除了,加1s的时间延迟
}, 1000)
if (res.errMsg.indexOf('timeout') > -1) {
vm.errorOne += 1
let pages = getCurrentPages() // 获取加载的页面
if (vm.errorOne <= 2) {
wx.showModal({ // 使用模态框提示用户进行操作
title: `${this.i18nL.pages.service.healthMGT.otherShow1}`,
content: `${this.i18nL.pages.service.healthMGT.Ace26}`,
showCancel: false,
confirmText: `${this.i18nL.appWpy.confirmText}`,
success: function (res) {
if (res.confirm) {
vm.errorOne = 1
wx.hideLoading()
if (pages.length > 1) {
wx.navigateBack({
delta: 1
})
} else {
wx.reLaunch({url: '/pages/tabBar/home'})
}
}
}
})
}
let errorMessage = {message: '当前网络不稳定!请重试'}
throw errorMessage
}
}
}))
})
}
},
created() {
let vm = this
let cacheBodyData = wx.getStorageSync('cacheBodyData')
if (cacheBodyData && vm.$app.$options.globalData.resubmit == 1) {
let data = {
data: cacheBodyData
}
vm.$app.$options.globalData.resubmit = 2
vm.$post({url: `${service.host}/save/weak/network/fat`, data}).then(({code, data}) => {
if (code === 0) {
vm.app.globalData.bodyFatData = null
wx.setStorageSync('bodyFatData', '1')
wx.removeStorageSync('cacheBodyData')
}
wx.hideLoading()
}).catch(err => {
})
}
}
}