main.js 4.5 KB

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