|
@@ -0,0 +1,218 @@
|
|
|
+import axios from 'axios'
|
|
|
+
|
|
|
+const baseUrl=window.AppGlobalConfig.authServer
|
|
|
+
|
|
|
+axios.defaults.withCredentials = true
|
|
|
+
|
|
|
+/**
|
|
|
+ * 请求前拦截
|
|
|
+ * 添加加载进度条
|
|
|
+ */
|
|
|
+axios.interceptors.request.use(config => {
|
|
|
+ return config
|
|
|
+}, error => {
|
|
|
+ return Promise.reject(error)
|
|
|
+})
|
|
|
+
|
|
|
+/**
|
|
|
+ * 请求后拦截
|
|
|
+ *
|
|
|
+ */
|
|
|
+axios.interceptors.response.use(response => {
|
|
|
+ return response
|
|
|
+}, error => {
|
|
|
+ Promise.resolve(error.response)
|
|
|
+ if (!error.response) {
|
|
|
+ if (error.message == 'without token cancel request') { // token过期会取消请求
|
|
|
+ return {
|
|
|
+ status: 9002,
|
|
|
+ statusText: error.message
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ status: 503,
|
|
|
+ statusText: error.message
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return error.response
|
|
|
+})
|
|
|
+
|
|
|
+/**
|
|
|
+ * 检查状态
|
|
|
+ * 并对异常状态进行处理
|
|
|
+ * @param response
|
|
|
+ * @returns {*}
|
|
|
+ */
|
|
|
+function checkResponseStatus(response) {
|
|
|
+ if (response.status === 200 || response.status === 304) {
|
|
|
+ const data = response.data
|
|
|
+ data.status = 200
|
|
|
+ return data
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 检查状态码
|
|
|
+ * @param res
|
|
|
+ * @returns {*}
|
|
|
+ */
|
|
|
+function checkResponseCode(res) {
|
|
|
+ if (!res) return null;
|
|
|
+ if (res.status !== 200) { // 网络请求存在问题
|
|
|
+ }
|
|
|
+ return res
|
|
|
+}
|
|
|
+/**
|
|
|
+ * 导出方法
|
|
|
+ */
|
|
|
+export default {
|
|
|
+ /**
|
|
|
+ * post请求
|
|
|
+ * @param url
|
|
|
+ * @param data
|
|
|
+ * @param vue vue 实例
|
|
|
+ * @param requireToken
|
|
|
+ * @returns {Promise<AxiosResponse<any>>}
|
|
|
+ */
|
|
|
+ post(url, data, vue, requireToken) {
|
|
|
+ return axios({
|
|
|
+ method: 'post',
|
|
|
+ url: url,
|
|
|
+ baseURL: baseUrl,
|
|
|
+ data: data,
|
|
|
+ timeout: 60000,
|
|
|
+ vue: vue,
|
|
|
+ requireToken: requireToken == null ? true : requireToken,
|
|
|
+ headers: {
|
|
|
+ 'X-Requested-With': 'XMLHttpRequest',
|
|
|
+ 'Content-Type': 'application/json; charset=UTF-8'
|
|
|
+ }
|
|
|
+ }).then(checkResponseStatus)
|
|
|
+ .then(checkResponseCode)
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * postJson请求
|
|
|
+ * @param url
|
|
|
+ * @param data
|
|
|
+ * @param vue vue 实例
|
|
|
+ * @param requireToken
|
|
|
+ * @returns {Promise<AxiosResponse<any>>}
|
|
|
+ */
|
|
|
+ postJson(url, data, vue, requireToken) {
|
|
|
+ return axios({
|
|
|
+ method: 'post',
|
|
|
+ url: url,
|
|
|
+ baseURL: baseUrl,
|
|
|
+ data: data,
|
|
|
+ timeout: 30000,
|
|
|
+ vue: vue,
|
|
|
+ requireToken: requireToken == null ? false : requireToken,
|
|
|
+ headers: {
|
|
|
+ 'X-Requested-With': 'XMLHttpRequest',
|
|
|
+ 'Content-Type': 'application/json; charset=UTF-8'
|
|
|
+ }
|
|
|
+ }).then(checkResponseStatus).then(checkResponseCode)
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * get请求
|
|
|
+ * @param url
|
|
|
+ * @param params
|
|
|
+ * @param vue vue 实例
|
|
|
+ * @param requireToken
|
|
|
+ * @returns {Promise<AxiosResponse<any>>}
|
|
|
+ */
|
|
|
+ get(url, params, vue, requireToken) {
|
|
|
+ return axios({
|
|
|
+ method: 'get',
|
|
|
+ url: url,
|
|
|
+ baseURL: baseUrl,
|
|
|
+ params: params,
|
|
|
+ timeout: 180000,
|
|
|
+ vue: vue,
|
|
|
+ requireToken: requireToken == null ? true : requireToken,
|
|
|
+ headers: {
|
|
|
+ 'X-Requested-With': 'XMLHttpRequest'
|
|
|
+ }
|
|
|
+ }).then(checkResponseStatus)
|
|
|
+ .then(checkResponseCode)
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * post 下载文件
|
|
|
+ * @param url
|
|
|
+ * @param params
|
|
|
+ * @param vue
|
|
|
+ * @param requireToken
|
|
|
+ * @returns {AxiosPromise}
|
|
|
+ */
|
|
|
+ postDownLoadFile(url, data, vue, requireToken) {
|
|
|
+ return axios({
|
|
|
+ method: 'post',
|
|
|
+ url: url,
|
|
|
+ baseURL: baseUrl,
|
|
|
+ data: data,
|
|
|
+ timeout: 30000,
|
|
|
+ vue: vue,
|
|
|
+ requireToken: requireToken == null ? true : requireToken,
|
|
|
+ responseType: 'arraybuffer',
|
|
|
+ headers: {
|
|
|
+ 'X-Requested-With': 'XMLHttpRequest',
|
|
|
+ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
|
|
+ 'Content-Disposition': ''
|
|
|
+ }
|
|
|
+ }).then(checkResponseCode)
|
|
|
+ },
|
|
|
+
|
|
|
+ downLoadFile(url, data, title, vue, requireToken) {
|
|
|
+ return axios({
|
|
|
+ method: 'post',
|
|
|
+ url: url,
|
|
|
+ baseURL: baseUrl,
|
|
|
+ data: data,
|
|
|
+ timeout: 30000,
|
|
|
+ vue: vue,
|
|
|
+ requireToken: requireToken == null ? true : requireToken,
|
|
|
+ responseType: 'arraybuffer',
|
|
|
+ headers: {
|
|
|
+ 'X-Requested-With': 'XMLHttpRequest',
|
|
|
+ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
|
|
|
+ }
|
|
|
+ }).then(checkResponseCode)
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 超长的post请求,一般用于请求arcgisserve等参数过长的post请求
|
|
|
+ * @param {*} url
|
|
|
+ * @param {*} data
|
|
|
+ * @param {*} vue
|
|
|
+ * @param {*} requireToken
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+ request(url, data, _headers) {
|
|
|
+ return axios({
|
|
|
+ method: 'post',
|
|
|
+ url: url,
|
|
|
+ data: data,
|
|
|
+ transformRequest: [
|
|
|
+ function (data) {
|
|
|
+ let ret = ''
|
|
|
+ for (const it in data) {
|
|
|
+ ret +=
|
|
|
+ encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
|
|
|
+ }
|
|
|
+ ret = ret.substring(0, ret.lastIndexOf('&'))
|
|
|
+ return ret
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ headers: _headers || {
|
|
|
+ 'Content-Type': 'application/x-www-form-urlencoded'
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .then(checkResponseStatus)
|
|
|
+ .then(checkResponseCode)
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|