chenlei 8 ماه پیش
والد
کامیت
1c6de78eff
6فایلهای تغییر یافته به همراه70 افزوده شده و 12 حذف شده
  1. 12 1
      README.md
  2. 33 9
      api/web/index.js
  3. 3 0
      api/web/init.js
  4. 4 0
      config/init.js
  5. 13 1
      config/interfaces/index.js
  6. 5 1
      store/webapi.js

+ 12 - 1
README.md

@@ -6,4 +6,15 @@
 1.01
  增加功能:
  1.基于axios、vuex封装的公共请求框架,支持接口配置,请求状态跟踪
- 2.公共配置信息
+ 2.公共配置信息
+
+1.02
+ 增加功能:
+ 1.公共请求框架自动识别当前项目的提示方式$toast、$message。
+ 2.接口配置信息增加responseType属性。
+ 3.公共请求框架识别2814错误码 进行重新登录。
+ 4.$config、$interfaces、$http、$reqState 可自动装配。
+ ```
+ import 'submodule/utils/config/init'
+ import 'submodule/utils/api/web/init'
+```

+ 33 - 9
api/web/index.js

@@ -1,9 +1,19 @@
+import Vue from 'vue'
 import Axios from 'axios'
 import store from '@/store'
-import { Toast } from 'vant'
 import Config from 'submodule/utils/config'
 const Base64 = require('js-base64').Base64
-
+const message = (msg) => {
+  if (Vue.prototype.$toast) {
+    Vue.prototype.$toast(msg)
+  } else if (Vue.prototype.$message) {
+    Vue.prototype.$message({
+      message: msg,
+      type: 'error',
+      duration: 3 * 1000
+    })
+  }
+}
 const axios = Axios.create({
   timeout: 30000,
   baseURL: process.env.VUE_APP_BASE_URL
@@ -23,8 +33,8 @@ axios.interceptors.request.use(
       }
       config.headers = headers
     } else {
-      config.headers.Authorization = 'Bearer ' + store.getters.mwxtoken
-      config.headers.Identifier = store.getters.mwxidntf
+      config.headers.Authorization = 'Bearer ' + (store.getters.mwxtoken || store.getters.woptoken)
+      config.headers.Identifier = (store.getters.mwxidntf || store.getters.wopidntf)
     }
     store.getters.debug && console.log('axios.interceptors.request.use...', config)
 
@@ -40,15 +50,29 @@ 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.status === 200) {
+        return response.data
+      } else {
+        const msg = '文件导出失败!'
+        message(msg)
+        return Promise.reject(msg)
+      }
+    }
+    // 登录已超时,请重新登录
+    if (response.data.code === 2814) {
+      message(response.data.message)
+      store.dispatch('clear').then(() => {
+        location.reload() // 为了重新实例化vue-router对象 避免bug
+      })
     }
+
     if (response.data.code === 0) {
       if (response.config.url.includes('pay/member/upload_org_pic')) {
-        Toast(response.data.message)
+        message(response.data.message)
       }
       return Promise.resolve(response.data.data)
     } else {
-      Toast(response.data.message)
+      message(response.data.message)
       return Promise.reject(response.data)
     }
   },
@@ -71,13 +95,13 @@ axios.interceptors.response.use(
     } else {
       err.message = '连接服务器失败!'
     }
-    Toast(err.message)
+    message(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 => {
+  return axios({ url: urlObj.realUrl, method, data, responseType: urlObj.responseType || responseType }).then(res => {
     store.commit('webapi/set', { urlObj, value: Config.enums.request.sus.storeValue })
     return res
   }).catch(err => {

+ 3 - 0
api/web/init.js

@@ -0,0 +1,3 @@
+import Vue from 'vue'
+import http from './index'
+Vue.prototype.$http = http

+ 4 - 0
config/init.js

@@ -0,0 +1,4 @@
+import Vue from 'vue'
+import config from './index'
+Vue.prototype.$config = config
+Vue.prototype.$interfaces = config.interfaces

+ 13 - 1
config/interfaces/index.js

@@ -4,6 +4,18 @@ export default {
   },
   transfer_carrier: {
     realUrl: 'account/account_balance/transfer_carrier'
-  }
+  },
+  /** 账户中心 */
+  account: {
+    /** 获取长城奥扬提现账户列表 */
+    list_gway: {
+      realUrl: 'account/org_account/list_gway'
+    },
+    /** 分页查询公对公流水导出 */
+    carreir_p2p_log_download: {
+      realUrl: 'account/carreir_p2p_log/download',
+      responseType: 'blob'
+    }
 
+  }
 }

+ 5 - 1
store/webapi.js

@@ -20,5 +20,9 @@ const request = {
   },
   actions: {}
 }
-
+Vue.prototype.$reqState = function (urlObj) {
+  if (this.$store) {
+    return this.$store.getters['webapi/reqState'](urlObj)
+  }
+}
 export default request