chenlei hace 9 meses
padre
commit
46bbc1daf4
Se han modificado 5 ficheros con 314 adiciones y 1 borrados
  1. 7 1
      README.md
  2. 125 0
      api/web/index.js
  3. 149 0
      config/index.js
  4. 9 0
      config/interfaces/index.js
  5. 24 0
      store/webapi.js

+ 7 - 1
README.md

@@ -1,3 +1,9 @@
 # utils
 
-前端工具库
+前端工具库
+
+# 版本
+1.01
+ 增加功能:
+ 1.基于axios、vuex封装的公共请求框架,支持接口配置,请求状态跟踪
+ 2.公共配置信息

+ 125 - 0
api/web/index.js

@@ -0,0 +1,125 @@
+import Axios from 'axios'
+import store from '@/store'
+import { Toast, Dialog } from 'vant'
+import { getLocalStorage } from '@/utils/storage'
+import { webParamsTransmit } from '@/utils/tools'
+import * as list from '@/utils/list'
+import Config from 'submodule/utils/config'
+const Base64 = require('js-base64').Base64
+
+const axios = Axios.create({
+  timeout: 30000,
+  baseURL: process.env.VUE_APP_BASE_URL
+})
+axios.interceptors.request.use(
+  config => {
+    if (config.url.includes('user/register/register_v2')) {
+      // 默认微信公众号
+      let service = 'mwxservice'
+      if (store.state.app.inMiniprogram) {
+        // 微信小程序
+        service = 'miniprogram'
+      }
+      const headers = {
+        Authorization: 'Basic ' + Base64.encode(service + ':123456'),
+        Identifier: Base64.encode(service + ':org:user:role')
+      }
+      config.headers = headers
+    } else {
+      config.headers.Authorization = 'Bearer ' + store.getters.mwxtoken
+      config.headers.Identifier = store.getters.mwxidntf
+    }
+    store.getters.debug && console.log('axios.interceptors.request.use...', config)
+
+    // 传给接口的版本号
+    config.headers.var = Config.vers.cur
+    return config
+  },
+  error => {
+    return Promise.reject(error)
+  }
+)
+axios.interceptors.response.use(
+  response => {
+    store.getters.debug && console.log('axios.interceptors.response.use...', response)
+    if (response.config.responseType === 'blob') {
+      return response.data
+    }
+    if (response.data.code === 0) {
+      if (response.config.url.includes('pay/member/upload_org_pic')) {
+        Toast(response.data.message)
+      }
+      return Promise.resolve(response.data.data)
+    } else if (response.data.code === 2814) {
+      if (getLocalStorage('appType') == 1) {
+        Toast(response.data.message)
+        webParamsTransmit(1)
+      } else {
+        Toast(response.data.message)
+        store.dispatch('clear').then(() => {
+          location.reload() // 为了重新实例化vue-router对象 避免bug
+        })
+      }
+    } else if ((response.data.code === 3012 && response.data.message.includes('校验码错误')) || response.data.code == 2223) {
+      Toast(response.data.message)
+      return Promise.resolve(response.data)
+    } else if (response.data.code === 8901 && !response.config.url.includes('truck_by_platform_driver')) {
+      if (response.data.data && response.data.data.type == null) {
+        Toast(response.data.message)
+        return Promise.reject(response.data.message)
+      } else {
+        return Promise.resolve(response.data.data)
+      }
+    } else {
+      if (response.config.url.includes('pay/pay/wxpay')) {
+        Toast(response.data.message)
+        this.$router.replace('perpayOrder')
+      } else if (response.config.url.includes('user/truck_driver_remove/remove')) {
+        setTimeout(() => {
+          Dialog.alert({
+            title: '温馨提示',
+            message: response.data.message
+          }).then(() => { })
+        }, 0)
+      } else if (list.notMsgArrayInterface.some(item => response.config.url.includes(item))) {
+        // 返回报错接口里所有信息,方便根据错误码定制化显示弹窗提示
+        return Promise.reject(response.data)
+      } else {
+        Toast(response.data.message)
+      }
+      return Promise.reject(response.data.message)
+    }
+  },
+  err => {
+    if (err && err.response) {
+      switch (err.response.status) {
+        case 400: err.message = '请求错误(400)'; break
+        case 401: err.message = '未授权,请重新登录(401)'; break
+        case 403: err.message = '拒绝访问(403)'; break
+        case 404: err.message = '请求出错(404)'; break
+        case 408: err.message = '请求超时(408)'; break
+        case 500: err.message = '服务器错误(500)'; break
+        case 501: err.message = '服务未实现(501)'; break
+        case 502: err.message = '网络错误(502)'; break
+        case 503: err.message = '服务不可用(503)'; break
+        case 504: err.message = '网络超时(504)'; break
+        case 505: err.message = 'HTTP版本不受支持(505)'; break
+        default: err.message = `连接出错(${err.response.status})!`
+      }
+    } else {
+      err.message = '连接服务器失败!'
+    }
+    Toast(err.message)
+    return Promise.reject(err.message)
+  }
+)
+export default (urlObj, data = {}, method = 'POST', responseType = 'json') => {
+  store.commit('webapi/set', { urlObj, value: Config.enums.request.before.storeValue })
+  return axios({ url: urlObj.realUrl, method, data, responseType }).then(res => {
+    store.commit('webapi/set', { urlObj, value: Config.enums.request.sus.storeValue })
+    return res
+  }).catch(err => {
+    store.commit('webapi/set', { urlObj, value: Config.enums.request.err.storeValue })
+    return Promise.reject(err.message)
+  })
+}

+ 149 - 0
config/index.js

@@ -0,0 +1,149 @@
+import interfaces from './interfaces'
+export default {
+  enums: {
+    request: {
+      // 请求前
+      before: {
+        // 事件总线key
+        eventBusKey: 'REQUEST.BEFORE',
+        // 存储的值
+        storeValue: 1
+      },
+      // 请求成功
+      sus: {
+        eventBusKey: 'REQUEST.FINALLY',
+        storeValue: 0
+      },
+      // 请求失败
+      err: {
+        eventBusKey: 'REQUEST.ERR',
+        storeValue: -1
+      }
+    }
+  },
+  interfaces,
+  vers: {
+    加气支付极速版: 'jqjs-20250401',
+    物流充值: 'wlcz-20250617',
+    get cur() {
+      return this.物流充值
+    }
+  },
+  // 资金流水类型
+  get fundFlowType() {
+    return [
+      {
+        value: 1,
+        label: '物流充值'
+      },
+      {
+        value: 2,
+        label: '手动 圈存到车'
+      },
+      {
+        value: 3,
+        label: '手动 退还主户'
+      },
+      {
+        value: 0,
+        label: '加气付款'
+      },
+      {
+        value: 20,
+        label: '加气退款'
+      },
+      {
+        value: 4,
+        label: '主户提现'
+      }
+    ]
+  },
+
+  get truckPayType() {
+    return [
+      { value: 3, label: '物流预付-不限额' },
+      { value: 2, label: '物流预付-车辆限额' },
+      { value: 0, label: '其他付款' }
+    ]
+  },
+  /** 驾驶员申请加入物流公司 审核状态 */
+  get auditStatus() {
+    return { 1: '待审核', 2: '已审核', 3: '已驳回' }
+  },
+  /** 车辆经营类型 */
+  get linked() {
+    return { 0: '自营', 1: '其他' }
+  },
+  /** 圈存方式 */
+  get autoAccount() {
+    return { 0: '手动圈存', 1: '自动圈存' }
+  },
+  /** 站清分方式 */
+  get splitType() {
+    return { 1: '线上实时', 2: '线下月度' }
+  },
+  //
+  /** 销售方式 */
+  get orderType() {
+    return { 1: '大象线上', 2: '加注机线下-优惠', 3: '加注机线下-标准', 4: '三方线上-团液', 5: '三方线上-万金油', 6: '试机', 7: 'CNG', 8: '三方线上-车旺', 9: '三方线上-解放', 10: '三方线上-成丰' }
+  },
+  /** 销售方式 -用于查询 */
+  get orderTypes() {
+    return { 1: '大象线上', '2,3': '加注机线下', '4,5,8,9,10': '3方线上' }
+  },
+  /** 让利方类型 */
+  get interestType() {
+    return {
+      1: '大象特价优惠',
+      2: '大象满减优惠',
+      3: '长城奥扬特价优惠',
+      4: '长城奥扬满减优惠',
+      5: '站特价优惠',
+      6: '站满减优惠'
+    }
+  },
+  /** 结算状态 */
+  get settleStatus() {
+    return [
+      { value: '1', label: '待支付' },
+      { value: '7', label: '支付异常' },
+      { value: '4', label: '支付中' },
+      { value: '2', label: '已支付' },
+      { value: '3', label: '已取消' },
+      { value: '6', label: '已退款' },
+      { value: '5', label: '退款中' },
+      { value: '10', label: '其他' }
+    ]
+  },
+  /** 支付方式-用于筛选条件 */
+  get payTypes() {
+    return {
+      // 所属物流
+      0: '大象余额',
+      1: '微信',
+      2: '大象余额+微信',
+      // 个人支付
+      3: '微信',
+
+      10: '其他'
+    }
+  } /** 支付方式 */,
+  get payType() {
+    return {
+      0: '所属物流-大象余额',
+      1: '所属物流-微信',
+      2: '所属物流-大象余额+微信',
+      3: '个人支付-微信',
+      10: '其他'
+    }
+  },
+  /** 交易模式 */
+  get tradeType() {
+    return [
+      { value: '2', label: '大象直销' },
+      { value: '1', label: '大象经销' },
+      { value: '10', label: '其他' }
+    ]
+  }
+
+}

+ 9 - 0
config/interfaces/index.js

@@ -0,0 +1,9 @@
+export default {
+  batch_truck: {
+    realUrl: 'account/account_balance/batch_truck'
+  },
+  transfer_carrier: {
+    realUrl: 'account/account_balance/transfer_carrier'
+  }
+
+}

+ 24 - 0
store/webapi.js

@@ -0,0 +1,24 @@
+import Vue from 'vue'
+import config from 'submodule/utils/config'
+
+const request = {
+  namespaced: true,
+  state: {},
+  getters: {
+    reqState: (state) => (urlObj) => {
+      return {
+        ing: state[urlObj.realUrl] === config.enums.request.before.storeValue,
+        sus: state[urlObj.realUrl] === config.enums.request.sus.storeValue,
+        err: state[urlObj.realUrl] === config.enums.request.err.storeValue
+      }
+    }
+  },
+  mutations: {
+    set: (state, payload) => {
+      Vue.set(state, payload.urlObj.realUrl, payload.value)
+    }
+  },
+  actions: {}
+}
+
+export default request