download.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. let project = host.PROJECT;
  2. const prodServer = require('./prod/' + project + '.js'); //服务信息
  3. export default (url = '', baseUrl='', data = {},dataType = 'JSON', type = 'GET', requestType='FORMDATA') => {
  4. var html = '<div class="ivu-spin-fullscreen ivu-spin-fullscreen-wrapper"><div class="ivu-spin ivu-spin-fix ivu-spin-show-text ivu-spin-fullscreen"><div class="ivu-spin-main"><span class="ivu-spin-dot"></span> <div class="ivu-spin-text"><div><i class="ivu-icon ivu-icon-load-c demo-spin-icon-load" style="font-size: 18px;"></i><div>Loading</div></div></div></div></div></div>'
  5. $('#app').append(html);
  6. type = type.toUpperCase();
  7. if(process.env.NODE_ENV === 'development'){
  8. baseUrl = baseUrl;
  9. }
  10. else if(process.env.NODE_ENV === 'production')
  11. {
  12. if(baseUrl)
  13. {
  14. switch (baseUrl)
  15. {
  16. case '/landcrm':
  17. baseUrl = prodServer("landcrm");
  18. break;
  19. case '/activity': //微信运营-活动
  20. baseUrl = prodServer("activity");
  21. break;
  22. case '/steward': //微信运营-管家
  23. baseUrl = prodServer("steward");
  24. break;
  25. case '/knowledge': //微信运营-文章
  26. baseUrl = prodServer("knowledge");
  27. break;
  28. case '/manage': //微信运营-会员
  29. baseUrl = prodServer("manage");
  30. break;
  31. case '/community': //会员认证 community: 正式, communityDev: 测试,qpi:幸福基业
  32. baseUrl = prodServer("community");
  33. break;
  34. case '/points'://积分
  35. baseUrl = prodServer("points");
  36. break;
  37. case '/question'://调查问卷
  38. baseUrl = prodServer("question");
  39. break;
  40. case '/activiti':// 订餐 会议室预订
  41. baseUrl = prodServer("activiti");
  42. break;
  43. case '/member'://会员管理
  44. baseUrl = prodServer("member");
  45. break;
  46. case '/voucher'://
  47. baseUrl = prodServer("voucher");
  48. break;
  49. case '/bus'://楼巴管理
  50. baseUrl = prodServer("bus");
  51. break;
  52. case '/guesthouse'://招待管理
  53. baseUrl = prodServer("guesthouse");
  54. break;
  55. case '/apartment'://公寓管理
  56. baseUrl = prodServer("apartment");
  57. break;
  58. default:
  59. baseUrl = "";
  60. break;
  61. }
  62. }
  63. }
  64. url = baseUrl + url;
  65. let dataStr = ''; //数据拼接字符串
  66. if (type == 'GET') {
  67. if(typeof(data)=="object"){
  68. Object.keys(data).forEach(key => {
  69. dataStr += key + '=' + data[key] + '&';
  70. })
  71. }
  72. if (dataStr !== '') {
  73. dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
  74. url = url + '?' + dataStr;
  75. }
  76. // url = url + '?' + dataStr;
  77. }
  78. else{
  79. if(requestType === "FORMDATA")
  80. {
  81. Object.keys(data).forEach(key => {
  82. dataStr += key + '=' + data[key] + '&';
  83. })
  84. dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
  85. }
  86. else if(requestType === "JSON")
  87. {
  88. dataStr = JSON.stringify(data)
  89. }
  90. }
  91. var xhr = new XMLHttpRequest();
  92. xhr.open(type, url, true);
  93. xhr.responseType = 'arraybuffer';
  94. xhr.onload = function () {
  95. if (this.status === 200) {
  96. //提取文件名
  97. var filename = "";
  98. var disposition = xhr.getResponseHeader('Content-disposition');
  99. if (disposition && disposition.indexOf('attachment') !== -1) {
  100. var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
  101. var matches = filenameRegex.exec(disposition);
  102. if (matches != null && matches[1]) filename = decodeURI(matches[1].replace(/['"]/g, ''));
  103. }
  104. var type2 = xhr.getResponseHeader('Content-Type');
  105. if(typeof File === 'undefined' && typeof Blob === 'undefined')
  106. {
  107. alert("当前浏览器不支持下载,请使用最新浏览器重试");
  108. return;
  109. }
  110. var blob = typeof File === 'function'
  111. ? new File([this.response], filename, { type: type2 })
  112. : new Blob([this.response], { type: type2 });
  113. if (typeof window.navigator.msSaveBlob !== 'undefined') {
  114. window.navigator.msSaveBlob(blob, filename);
  115. } else {
  116. var URL = window.URL || window.webkitURL;
  117. var downloadUrl = URL.createObjectURL(blob);
  118. if (filename) {
  119. var a = document.createElement("a");
  120. if (typeof a.download === 'undefined') {
  121. window.location = downloadUrl;
  122. } else {
  123. a.href = downloadUrl;
  124. a.download = filename;
  125. document.body.appendChild(a);
  126. a.click();
  127. }
  128. } else {
  129. window.location = downloadUrl;
  130. }
  131. setTimeout(function () { URL.revokeObjectURL(downloadUrl); }, 100);
  132. }
  133. }
  134. $('.ivu-spin-fullscreen-wrapper').remove();
  135. };
  136. if(requestType && requestType === "JSON") {
  137. xhr.setRequestHeader('Content-type', 'application/json');
  138. }
  139. else {
  140. xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  141. }
  142. xhr.setRequestHeader('token', localStorage.token || "");
  143. if(type == 'POST') {
  144. xhr.send(dataStr);
  145. }
  146. else {
  147. xhr.send();
  148. }
  149. }