main.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import store from './store'
  5. import ElementUI from 'element-ui';
  6. import moment from 'moment' // 时间库
  7. import 'element-ui/lib/theme-chalk/index.css';
  8. import * as dd from 'dingtalk-jsapi';
  9. import VConsole from 'vconsole'
  10. import axios from 'axios'
  11. import service from './api/axios'
  12. import { getToken, setToken,getUserData,setUserData,getTyps,setTyps } from './api/auth';
  13. // 头像
  14. import userImage from '@/components/UserImage'
  15. Vue.component('userImage', userImage)
  16. Vue.use(ElementUI);
  17. // if (process.env.NODE_ENV === 'development') {
  18. // new VConsole()
  19. // }
  20. Vue.prototype.$dd=dd;
  21. Vue.prototype.$getToken = getToken
  22. Vue.prototype.$setToken = setToken
  23. Vue.prototype.$getUserData = getUserData
  24. Vue.prototype.$setUserData = setUserData
  25. Vue.prototype.$getTyps = getTyps
  26. Vue.prototype.$setTyps = setTyps
  27. Vue.prototype.$moment = moment
  28. Vue.prototype.$http= service;
  29. //Vue函数添加一个原型属性$axios 指向axios,这样vue实例或组件中不用再去重复引用Axios 直接用this.$axios就能执行axios 方法
  30. var CancelToken = axios.CancelToken;
  31. Vue.$httpRequestList=[];
  32. Vue.prototype.$axios = (type, url, data,heaStr) => {
  33. if(url!='/api/ding/login'&& url!='/api/integral/types'){
  34. var Accept='';
  35. switch(heaStr){
  36. case 'v2':
  37. Accept='application/vnd.test.v2+json'
  38. break;
  39. case 'v3':
  40. Accept='application/vnd.test.v3+json'
  41. break;
  42. case 'v4':
  43. Accept='application/vnd.test.v4+json'
  44. break;
  45. }
  46. if(getToken()){
  47. return new Promise((resolve, reject) => { //封装ajax
  48. var aa = {
  49. method: type,
  50. url: url,
  51. headers:{
  52. 'Accept':Accept
  53. },
  54. cancelToken: new CancelToken(c => { //强行中断请求要用到的
  55. Vue.$httpRequestList.push(c);
  56. })
  57. }
  58. var json = (type == 'get') ? Object.assign(aa, { params: data }) : Object.assign(aa, { data: data });
  59. var ajax = Vue.prototype.$http(json).then(res => {
  60. resolve(res);
  61. }).catch(error => { //中断请求和请求出错的处理
  62. if (error.message == "interrupt") {
  63. console.log('已中断请求');
  64. return;
  65. } else {
  66. reject(error);
  67. }
  68. })
  69. return ajax;
  70. })
  71. }else{return Promise.reject('无token')}
  72. }else{
  73. return new Promise((resolve, reject) => { //封装ajax
  74. var aa = {
  75. method: type,
  76. url: url,
  77. cancelToken: new CancelToken(c => { //强行中断请求要用到的
  78. Vue.$httpRequestList.push(c);
  79. })
  80. }
  81. var json = (type == 'get') ? Object.assign(aa, { params: data }) : Object.assign(aa, { data: data });
  82. var ajax = Vue.prototype.$http(json).then(res => {
  83. resolve(res);
  84. }).catch(error => { //中断请求和请求出错的处理
  85. if (error.message == "interrupt") {
  86. console.log('已中断请求');
  87. return;
  88. } else {
  89. reject(error);
  90. }
  91. })
  92. return ajax;
  93. })
  94. }
  95. };
  96. router.beforeEach((to, from, next) => { //路由切换检测是否强行中断,
  97. if(Vue.$httpRequestList.length>0){ //强行中断时才向下执行
  98. Vue.$httpRequestList.forEach(item=>{
  99. item('interrupt');//给个标志,中断请求
  100. })
  101. }
  102. next();
  103. });
  104. Vue.config.productionTip = false
  105. new Vue({
  106. router,
  107. store,
  108. render: h => h(App)
  109. }).$mount('#app')