main.js 3.49 KB
import Vue from 'vue';
import App from '@/App.vue';
import router from '@/router';
import store from '@/store';
import axios from 'axios';

import ElementUI from 'element-ui';
import EagleWebToolkit from '../packages';
import NProgress from 'nprogress';
import EagleCodeSnippet from "@/components/code-snippet";

import '@/styles/theme/index.css';
import '@/styles/nprogress.scss';
import "highlight.js/styles/color-brewer.css";

import { Notification } from 'element-ui';

const request = axios.create({
  baseURL: 'http://47.110.137.80:7104/cbin/',
  timeout: 1000 * 60,
  withCredentials: true,
  headers: {
    token: 'be81d1ba777f7081ef6897eec3b4bdf2',
    'Accept-Language': 'zh-CN'
  }
});

const codeMessage = {
  200: '服务器成功返回请求的数据',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队(异步任务)',
  204: '删除数据成功。',
  400: '发出的请求有错误,服务器没有进行新建或修改数据,的操作。',
  401: '用户没有权限(令牌、用户名、密码错误)。',
  403: '用户得到授权,但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录,服务器没有进行操作',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除,且不会再得到的。',
  422: '当创建一个对象时,发生一个验证错误。',
  500: '服务器发生错误,请检查服务器',
  502: '网关错误',
  503: '服务不可用,服务器暂时过载或维护',
  504: '网关超时'
};

const checkStatus = (response) => {
  if (response.status >= 200 && response.status < 300) {
    return response;
  }
  const errortext = codeMessage[response.status] || response.statusText;
  const messageContent = `
    ${response.request.responseURL}
    ${errortext}
  `;
  Notification.error({
    title: `请求错误 ${response.status}:`,
    message: messageContent,
    duration: 3000,
  });
  const error = new Error(errortext);
  error.name = response.status;
  error.response = response;
  return error;
}

// respone 拦截器
request.interceptors.response.use(
  response => {
    const { data = {}, config } = response;
    const { code, msg } = data;
    if (config && config.interceptors === false) { // 请求配置不做返回拦截的情况
      return response;
    } else {
      if (`${code}` === '401') { // 授权失效
        removeToken();
        router.push({ name: 'login' }, () => {
          location.reload();
        });
      } else if (`${code}` === '1000') { // 业务逻辑错误提示
        Notification.error({
          title: '提示',
          message: msg,
          duration: 3000,
        });
        return false;
      } else if (`${code}` === '0') { // 请求成功
        return data;
      } else { // 其它错误,开发环境提示
        if (process.env.NODE_ENV === 'development') {
          Notification.error({
            title: '提示',
            message: msg,
            duration: 3000,
          });
        }
        return false;
      }
    }
  },
  error => {
    const e = checkStatus(error.response);
    console.error(e);
    return { success: false };
  });

Vue.prototype.$axios = request;



// 进度条配置
NProgress.configure({ showSpinner: false });

// 注册代码片段组件
Vue.component("eagle-code-snippet", EagleCodeSnippet);
// 注册饿了么UI
Vue.use(ElementUI);
// 注册Eagle组件库
Vue.use(EagleWebToolkit);

Vue.config.productionTip = false;

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')