离校前端框架,包括数据字典、工作队伍、新闻公告模块
diff --git a/leave-school-vue/src/utils/request.js b/leave-school-vue/src/utils/request.js
new file mode 100644
index 0000000..8b0925b
--- /dev/null
+++ b/leave-school-vue/src/utils/request.js
@@ -0,0 +1,78 @@
+import axios from 'axios'
+import { Message, MessageBox } from 'element-ui'
+import store from '../store'
+import { getToken } from '@/utils/auth'
+
+// 网络请求约定属性名,不可在业务中使用
+const whitelist = ['X-Token', 'token', 'pageIndex', 'pageSize']
+// 创建axios实例
+const service = axios.create({
+  baseURL: process.env.BASE_API, // api的base_url
+  timeout: 10000 // 请求超时时间
+})
+
+// request拦截器
+service.interceptors.request.use(config => {
+  if (store.getters.token) {
+    config.headers['X-Token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+  }
+  if (config.params) {
+    for (const attr in config.params) {
+      if (whitelist.indexOf(attr) > -1) {
+        // 约定的属性不用转换
+        continue
+      }
+      config.params[encodeURIComponent('mapBean[' + attr + ']')] = config.params[attr]
+      delete config.params[attr]
+    }
+  }
+  return config
+}, error => {
+  // Do something with request error
+  console.log(error) // for debug
+  Promise.reject(error)
+})
+
+// respone拦截器
+service.interceptors.response.use(
+  response => {
+  /**
+  * code为非20000是抛错 可结合自己业务进行修改
+  */
+    const res = response.data
+    if (response.status !== 200) {
+      Message({
+        message: res.message || '请求失败,状态码:' + res.code,
+        type: 'error',
+        duration: 5 * 1000
+      })
+
+      // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
+      if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
+        MessageBox.confirm('你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', {
+          confirmButtonText: '重新登录',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          store.dispatch('FedLogOut').then(() => {
+            location.reload()// 为了重新实例化vue-router对象 避免bug
+          })
+        })
+      }
+      return Promise.reject('error')
+    } else {
+      return response.data
+    }
+  },
+  error => {
+    console.log('err' + error)// for debug
+    Message({
+      message: error.message,
+      type: 'error',
+      duration: 5 * 1000
+    })
+    return Promise.reject(error)
+  }
+)
+
+export default service