123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- import Taro from '@tarojs/taro'
- import * as apis from '@/constants/api'
- // import login from '@/utils/login'
- import store from '@/store'
- import rtLog from './rtLog'
-
- const CODE_SUCCESS = 1000
- const CODE_UNLOGIN = 1001
- const CODE_AUTH_EXPIRED = 1002
- const accountInfo = wx.getAccountInfoSync();
- const appId = accountInfo.miniProgram.appId
- const { dispatch } = store
- const updateSpin = spinning => dispatch({ type: 'SET_SPINNING', payload: spinning })
-
- export { apis };
-
- export const getStorage = function (key) {
- return Taro.getStorage({ key }).then(res => res.data).catch(() => '')
- }
-
- export const setStorage = function (key, data) {
- return Taro.setStorage({ key, data })
- }
-
- /**
- * 简易封装网络请求
- * // NOTE 需要注意 RN 不支持 *StorageSync,此处用 async/await 解决
- * @param {*} options
- */
- export const fetch = async (options) => {
- const opts = optionBuilder(options)
-
- const { spin } = opts[1]
-
- if (spin) {
- updateSpin(true)
- }
- return Taro.request(opts[0])
- .then((res) => {
- if (spin) {
- updateSpin(false)
- }
- return reqSuccess(res, opts)
- })
- .catch((err) => {
- if (spin) {
- updateSpin(false)
- }
- return reqFail(err, opts)
- })
- }
-
- export const uploadFiles = async (files) => {
- const uploads = []
- const token = await getStorage('token')
- const authHeader = token ? { 'authorization': `Bearer ${token}` } : {}
- for (var i = 0; i < files.length; i++) {
- uploads[i] = new Promise((resolve, reject) => {
- wx.uploadFile({
- url: apis.API_UPLOAD_IMAGE,
- filePath: files[i],
- header: {
- ...authHeader,
- 'appId': appId,
- 'x-action': 'miniapp'
- },
- name: 'file',
- success: function (res) {
- // debugger
- const _data = JSON.parse(res.data)
- if (_data.code !== CODE_SUCCESS) {
- reject(new Error(_data.message))
- }
-
- resolve(_data.data)
- },
- fail(err) {
- reject(err)
- }
- })
- })
- }
-
- return Promise.all(uploads)
- }
-
- export function optionBuilder(options) {
- const { url, payload = {}, method = 'GET', showToast = true, autoLogin = true, header, spin = false } = options
- const showMessage = Object.prototype.hasOwnProperty.call(payload, 'showToast') ? payload.showToast : showToast
- const consultant = Taro.getStorageSync('consultantId') || ''
- const recommender = Taro.getStorageSync('recommender') || ''
-
- return [
- {
- url,
- method,
- data: payload,
- header: {
- 'content-type': 'application/json',
- 'authorization': `Bearer ${Taro.getStorageSync('token')}`,
- 'appId': appId,
- 'x-action': 'miniapp',
- 'x-version': Version,
- 'x-consultant': consultant,
- 'x-recommender': recommender,
- ...header || {},
- }
- },
- {
- showMessage,
- autoLogin,
- spin,
- }
- ]
- }
-
- export function reqSuccess(res, opts) {
- const [, settings] = opts || []
- const { showMessage, autoLogin = true } = settings || {}
-
- if (res.statusCode === 500) {
- Taro.showToast({
- title: "请检查网络",
- icon: 'none'
- })
- console.error(res)
- throw new Error('请检查网络')
- }
-
- const { data, code, message } = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
- if (code === CODE_SUCCESS) {
- return data
- } else {
- const isExpired = (code === CODE_AUTH_EXPIRED || code === CODE_UNLOGIN)
- const defaultMsg = isExpired ? '登录失效' : message
- if (isExpired && autoLogin) {
- // token失效,重新登录后,跳转到首页
- login({}, () => {
- Taro.switchTab({
- url: '/pages/project/index'
- })
- })
- } else {
- if (showMessage) {
- Taro.showToast({
- title: defaultMsg,
- icon: 'none'
- })
- }
- }
- if (showMessage) {
-
- Taro.showToast({
- title: message,
- icon: 'none'
- })
- }
-
- throw res.data
- }
- }
-
- export function reqFail(err, opts) {
- const [reqParams, settings] = opts || []
- const { showMessage } = settings || {}
-
- rtLog.error('[request]', "==================================")
- rtLog.error('[request]', err)
- rtLog.error('[request]', reqParams.url)
- rtLog.error('[request]', wx.getLaunchOptionsSync())
- rtLog.error('[request]', "==================================")
-
- let errMessage = `请求失败: ${err.errMsg}`
- if (err.errMsg) {
- errMessage = '请检查网络'
- }
-
- if (err.message) {
- console.error('请求失败', err.message)
- errMessage = err.message.indexOf('java') > -1 ? '服务内部错误' : err.message
- }
-
- if (showMessage) {
- Taro.showToast({
- title: errMessage,
- icon: 'none',
- duration: 3000
- })
- }
-
- throw new Error(errMessage)
- }
|