123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- const { envDomain } = require('../utils/config')
- const sessionStorageKey = 'shiningnongyeReqSessionId'
- const req = {
- baseURL: envDomain.apiDomain,
- header: {
- 'content-type': 'application/json'
- }
- }
- let loading = 0
- // 当前正在请求的数量
- let needLoadingRequestCount = 0
- // 显示loading
- function _showLoading() {
- if (needLoadingRequestCount === 0 && !loading) {
- wx.showToast({
- title: '拼命获取中',
- icon: 'loading',
- duration: 86400000 // 设置1小时:类似一直显示
- })
- loading = 1
- }
- needLoadingRequestCount++
- }
- // 隐藏loading
- function _hideLoading() {
- needLoadingRequestCount--
- needLoadingRequestCount = Math.max(needLoadingRequestCount, 0) // 做个保护
- if (needLoadingRequestCount === 0) {
- // 关闭loading
- wx.hideToast()
- loading = 0
- }
- }
- /**
- * 登录
- */
- function login() {
- return new Promise((resolve, reject) => {
- // 微信登录
- wx.login({
- success(res) {
- if (res.code) {
- resolve(res.code)
- } else {
- reject(res)
- }
- },
- fail: reject
- })
- })
- }
- /**
- * 判断请求状态是否成功
- * @param {number} status
- */
- function isHttpSuccess(status) {
- return (status >= 200 && status < 300) || status === 304
- }
- /**
- * wx.request二次封装
- * @param options
- * @param keepLogin
- * @returns {Promise<unknown>}
- */
- function request(options = {}, keepLogin = true) {
- const header = Object.assign({ 'access-token': wx.getStorageSync(sessionStorageKey) }, req.header,
- options.header)
- const url = /^http/.test(options.url) ? options.url : (req.baseURL + options.url)
- // 判断当前请求是否设置了不显示Loading
- if (options.showLoading) {
- _showLoading()
- }
- return new Promise((resolve, reject) => {
- wx.request(Object.assign({}, options, {
- url,
- header,
- success(r) {
- const isSuccess = isHttpSuccess(r.statusCode)
- const err = {
- msg: `服务器好像出了点小问题,请与客服联系~(错误代码:${r.statusCode})`,
- detail: r
- }
- const pages = getCurrentPages()
- if (isSuccess) {
- if (r.data.code === 403) {
- wx.removeStorage({
- key: sessionStorageKey
- })
- }
- if (r.data.code === 403 && keepLogin) {
- const { route } = Array.isArray(pages) && pages.length ? pages[pages.length - 1] : {}
- if (!/^pages\/login\/login/.test(route)) {
- wx.navigateTo({
- url: `/pages/login/login`
- })
- }
- reject(err)
- return
- }
- resolve(r.data)
- return
- }
- reject(err)
- },
- fail(err) {
- reject(err)
- },
- complete() {
- if (loading) {
- _hideLoading()
- }
- }
- }
- ))
- })
- }
- function handleUpload(file) {
- return new Promise((resolve, reject) => {
- wx.uploadFile({
- url: `${req.baseURL}/api/upload/img`,
- filePath: file.filePath,
- name: 'file',
- formData: {
- 'user': 'test'
- },
- success(r) {
- const isSuccess = isHttpSuccess(r.statusCode)
- if (isSuccess) {
- const temp = JSON.parse(r.data)
- if (temp.status && Object.prototype.toString.call(temp.data) === '[object Object]' && temp.data.path) {
- resolve({ ...file, url: temp.data.path })
- } else {
- reject(r)
- }
- } else {
- reject(r)
- }
- },
- fail(err) {
- reject(err)
- }
- })
- })
- }
- module.exports = {
- request,
- handleUpload,
- login,
- sessionStorageKey
- }
|