123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import axios from 'axios'
- import {apiPrefix} from '@/config'
- import {MessageBox, Notification} from 'element-ui'
- import Message from '@ele/component/Message'
- import store from '@/store'
- import {isLogin} from '@/util/auth'
- const instance = axios.create({
- baseURL: apiPrefix,
- // withCredentials: true, // send cookies when cross-domain requests
- timeout: 60000 // request timeout
- })
- instance.interceptors.request.use(
- config => {
- //header添加token
- if (store.state.user.token) {
- config.headers['X-Token'] = store.state.user.token
- }
- return config
- },
- error => Promise.reject(error)
- )
- instance.interceptors.response.use(
- response => {
- const res = response.data, {responseType = 'json'} = response.config
- //当返回类型非{status,data,msg}的接口请求时,不使用status来判断请求是否成功
- if (!('status' in res) || res.status === 200) {
- //当返回类型为json时,返回response.data
- return responseType === 'json' ? res : response
- }
- //服务器异常
- if (res.status === 500) {
- Message.error(res.msg || '操作失败')
- return Promise.reject(res.msg)
- }
- //未登录
- if (res.status === 401) {
- if (store.state.user.prepareLogout) return Promise.reject()
- return MessageBox.alert('请登录后重试', {
- type: 'warning',
- beforeClose: (action, instance, done) => {
- store.dispatch('user/logout').then(done)
- }
- })
- }
- //没有权限
- if (res.status === 403) {
- Message.error(res.msg || '没有权限进行该操作')
- return Promise.reject(res.msg)
- }
- //其他错误
- Message.error(res.msg || '接口有误')
- return Promise.reject(res)
- },
- error => {
- if (axios.isCancel(error)) return
- error && Notification.error({
- title: '错误',
- message: '请求错误,请稍后重试'
- })
- return Promise.reject(error)
- }
- )
- class Api {
- /**
- * 数据接口定义
- * @param url 请求url,不带参数
- * @param arg 对传入参数的处理方法,返回值将作为axios[get,post]的第二个参数
- * @param chain 形参为请求返回的promise
- * @param method 请求方法,小写,get、post...
- */
- constructor(url, arg, chain, method) {
- this.url = url
- this.arg = arg
- this.chain = chain
- this.method = method
- }
- request(...args) {
- const params = this.arg ? this.arg(...args) : undefined
- const promise = instance[this.method](this.url, params).catch(e => console.error(e))
- return this.chain ? this.chain(promise) : promise
- }
- }
- export class PostApi extends Api {
- constructor(url, arg, chain) {
- if (!arg) arg = data => data
- super(url, arg, chain, 'post')
- }
- }
- export class GetApi extends Api {
- constructor(url, arg, chain) {
- console.log(url)
- super(url, arg, chain, 'get')
- }
- }
- export default instance
|