Bladeren bron

add request.js

star7th 5 jaren geleden
bovenliggende
commit
4c46a3ab6e
2 gewijzigde bestanden met toevoegingen van 74 en 17 verwijderingen
  1. 12 17
      web_src/src/main.js
  2. 62 0
      web_src/src/request.js

+ 12 - 17
web_src/src/main.js

@@ -9,38 +9,34 @@ import Header from '@/components/common/Header'
 import Footer from '@/components/common/Footer'
 import util from '@/util.js'
 import axios from '@/http'
+import request from '@/request.js'
 import VueI18n from 'vue-i18n'
 import enLocale from 'element-ui/lib/locale/lang/en'
 import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
 import myZhLocale from '../static/lang/zh-CN'
 import myEnLocale from '../static/lang/en'
 import 'url-search-params-polyfill'
-import "babel-polyfill";
-import VueClipboard from 'vue-clipboard2';
+import 'babel-polyfill'
+import VueClipboard from 'vue-clipboard2'
 
-
-Vue.use(util);
+Vue.use(util)
 Vue.config.productionTip = false
-Vue.component('Header', Header);
-Vue.component('Footer', Footer);
+Vue.component('Header', Header)
+Vue.component('Footer', Footer)
 Vue.use(ElementUI)
 Vue.use(VueI18n)
 Vue.use(VueClipboard)
 
-
-//多语言相关
-var allZhLocale = Object.assign(zhLocale,myZhLocale);
-var allEnLocale = Object.assign(enLocale,myEnLocale);
-Vue.config.lang = DocConfig.lang ;
+// 多语言相关
+var allZhLocale = Object.assign(zhLocale, myZhLocale)
+var allEnLocale = Object.assign(enLocale, myEnLocale)
+Vue.config.lang = DocConfig.lang
 Vue.locale('zh-cn', allZhLocale)
 Vue.locale('en', allEnLocale)
 
-
-
-
 // 将axios挂载到prototype上,在组件中可以直接使用this.axios访问
-Vue.prototype.axios = axios;
-
+Vue.prototype.axios = axios
+Vue.prototype.request = request
 
 /* eslint-disable no-new */
 
@@ -50,4 +46,3 @@ new Vue({
   template: '<App/>',
   components: { App }
 })
-

+ 62 - 0
web_src/src/request.js

@@ -0,0 +1,62 @@
+/**
+ *
+ */
+
+import axios from 'axios'
+import router from '@/router/index'
+import { MessageBox } from 'element-ui'
+
+// axios 配置
+axios.defaults.timeout = 20000
+
+// http request 拦截器
+axios.interceptors.request.use(
+  config => {
+    // if (store.state.token) {
+    // config.headers.Authorization = `token ${store.state.token}`;
+    // }
+    return config
+  },
+  err => {
+    return Promise.reject(err)
+  })
+
+// http response 拦截器
+axios.interceptors.response.use(
+  response => {
+    if (response.config.data && response.config.data.indexOf('redirect_login=false') > -1) {
+      // 不跳转到登录
+    } else if (response.data.error_code === 10102) {
+      router.replace({
+        path: '/user/login',
+        query: { redirect: router.currentRoute.fullPath }
+      })
+    } else if (response.data.error_code !== 0) {
+      MessageBox.alert(response.data.error_message)
+      return Promise.reject(new Error('something bad happened'))
+    }
+
+    return response
+  },
+  error => {
+    // console.log(JSON.stringify(error));//console : Error: Request failed with status code 402
+    return Promise.reject(error.response.data)
+  })
+
+// 这里是后来追加的,懒得去钻研拦截器语法了,就直接这么来吧
+const request = (path, data, method = 'post') => {
+  var params = new URLSearchParams(data)
+  let url = DocConfig.server + path
+  return axios(
+    {
+      url: url,
+      method: method,
+      data: params,
+      headers: {
+        'Content-Type': 'application/x-www-form-urlencoded'
+      }
+    }
+  )
+}
+
+export default request