main.js 3.9 KB

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