fetch.js 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. import '../static/encry.min.js' //接口加密工具
  2. import Vue from 'vue'
  3. function initData(params)
  4. {
  5. var URLSearchParams = require('url-search-params');
  6. //360浏览器不支持URLSearchParams
  7. if(typeof URLSearchParams==="function")
  8. {
  9. var formMap = new URLSearchParams();
  10. for(var key in params){
  11. if(typeof(params[key]) == "undefined") {
  12. params[key] = '';
  13. }
  14. formMap.append(key, params[key]);
  15. }
  16. return formMap;
  17. }
  18. else
  19. {
  20. return params;
  21. }
  22. }
  23. let project = host.PROJECT;
  24. const prodServer = require('./prod/' + project + '.js'); //服务信息
  25. export default async(url = '',baseUrl='',data = {},dataType = 'JSON', type = 'GET',pathArr=[], method = 'fetch') => {
  26. type = type.toUpperCase();
  27. if(process.env.NODE_ENV === 'development'){
  28. baseUrl=baseUrl;
  29. }
  30. else if(process.env.NODE_ENV === 'production')
  31. {
  32. if(baseUrl)
  33. {
  34. switch (baseUrl)
  35. {
  36. case '/landcrm':
  37. baseUrl = prodServer("landcrm");
  38. break;
  39. case '/activity': //微信运营-活动
  40. baseUrl = prodServer("activity");
  41. break;
  42. case '/steward': //微信运营-管家
  43. baseUrl = prodServer("steward");
  44. break;
  45. case '/knowledge': //微信运营-文章
  46. baseUrl = prodServer("knowledge");
  47. break;
  48. case '/manage': //微信运营-会员
  49. baseUrl = prodServer("manage");
  50. break;
  51. case '/community': //会员认证 community: 正式, communityDev: 测试,qpi:幸福基业
  52. baseUrl = prodServer("community");
  53. break;
  54. case '/points'://积分
  55. baseUrl = prodServer("points");
  56. break;
  57. case '/question'://调查问卷
  58. baseUrl = prodServer("question");
  59. break;
  60. case '/sterilization'://消杀计划
  61. baseUrl = prodServer("sterilization");
  62. break;
  63. case '/propaganda'://故事
  64. baseUrl = prodServer("propaganda");
  65. break;
  66. case '/activiti':// 订餐 会议室预订
  67. baseUrl = prodServer("activiti");
  68. break;
  69. case '/bus':// 楼巴管理
  70. baseUrl = prodServer("bus");
  71. break;
  72. case '/statistic':// 统计管理
  73. baseUrl = prodServer("statistic");
  74. break;
  75. case '/member'://
  76. baseUrl = prodServer("member");
  77. break;
  78. case '/itemBorrow'://
  79. baseUrl = prodServer("itemBorrow");
  80. break;
  81. case '/borrowRecord'://
  82. baseUrl = prodServer("borrowRecord");
  83. break;
  84. case '/voucher'://
  85. baseUrl = prodServer("voucher");
  86. break;
  87. case '/guesthouse'://
  88. baseUrl = prodServer("guesthouse");
  89. break;
  90. case '/apartment'://
  91. baseUrl = prodServer("apartment");
  92. break;
  93. case '/car'://
  94. baseUrl = prodServer("car");
  95. break;
  96. default:
  97. baseUrl = "";
  98. break;
  99. }
  100. }
  101. if (host.PROJECT === 'chuangxinfang') baseUrl = `/wg${baseUrl}`;
  102. }
  103. url = baseUrl + url;
  104. if(pathArr && pathArr.length>0)
  105. {
  106. url+="/"+pathArr.join("/");
  107. }
  108. if (type == 'GET' || type == 'DELETE') {
  109. let dataStr = ''; //数据拼接字符串
  110. Object.keys(data).forEach(key => {
  111. if(typeof(data[key]) == "undefined") {
  112. data[key] = "";
  113. }
  114. dataStr += key + '=' + encodeURIComponent(data[key]) + '&';
  115. })
  116. if (dataStr !== '') {
  117. dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
  118. url = url + '?' + dataStr+'&_t=' + new Date().getTime();
  119. }
  120. else{
  121. url = url + '?_t=' + new Date().getTime();
  122. }
  123. }
  124. if (window.fetch && method == 'fetch') {
  125. var header_content = {
  126. 'Accept': 'application/json',
  127. 'Content-Type': 'application/x-www-form-urlencoded',
  128. 'client_token': '',
  129. 'token': ''
  130. };
  131. if(dataType && dataType==="XML")
  132. {
  133. header_content = {
  134. 'Accept': 'application/xml',
  135. 'Content-Type': 'application/x-www-form-urlencoded'
  136. };
  137. }
  138. else if(dataType && dataType==="JSON2")
  139. {
  140. header_content = {
  141. 'Accept': 'application/json',
  142. 'Content-Type': 'application/json'
  143. };
  144. }
  145. else if(dataType && dataType === "FORMDATA")
  146. {
  147. header_content = {
  148. dataType: "json",
  149. cache: false,//上传文件无需缓存
  150. processData: false,//用于对data参数进行序列化处理 这里必须false
  151. // contentType: "application/x-www-form-urlencoded", //必须
  152. ContentType: "application/x-www-form-urlencoded"
  153. };
  154. }
  155. if(localStorage.token != "" && typeof(localStorage.token) !== "undefined") {
  156. header_content.client_token = localStorage.token;
  157. header_content.token = localStorage.token;
  158. }
  159. header_content.sign = key_gen.encode(key_gen.handlerData(type == 'GET'?url.substring(url.indexOf("?")+1):data));
  160. if(localStorage.user_id){
  161. header_content["userId"] = localStorage.user_id;
  162. }
  163. let requestConfig = {
  164. credentials: 'include',
  165. method: type,
  166. headers: header_content,
  167. mode: "cors",
  168. cache: "force-cache"
  169. }
  170. if ((type == 'POST' || type == 'PUT' || type == 'DELETE') && dataType!="JSON2"&& dataType!="FORMDATA") {
  171. Object.defineProperty(requestConfig, 'body', {
  172. value: initData(data)
  173. })
  174. }else if((type == 'POST' || type == 'PUT' || type == 'DELETE') && dataType=="JSON2"){
  175. Object.defineProperty(requestConfig, 'body', {
  176. value: JSON.stringify(data)
  177. })
  178. }else if((type == 'POST') && dataType=="FORMDATA"){
  179. Object.defineProperty(requestConfig, 'body', {
  180. value: data
  181. })
  182. }
  183. try {
  184. const response = await fetch(url, requestConfig);
  185. if(response.headers.get("token_code") == -2 || response.headers.get("token_code") == -1){
  186. Vue.prototype.$Message.config({
  187. top: 80,
  188. duration: 3
  189. });
  190. console.log("=====账号过期======");
  191. console.log(url);
  192. console.log(requestConfig);
  193. console.log("------end-------");
  194. Vue.prototype.$Message.info("当前账号已过期,请重新登录!");
  195. Vue.prototype.$Message=function(str){return;}
  196. setTimeout(function(){
  197. localStorage.clear();
  198. if(host.PROJECT && host.PROJECT=="xingfujiye")
  199. {
  200. window.location.href = "http://csms.cfldcn.com:5902/qpi/logoutFilter?returnUrl="+Util.filterUrl(window.location.href);
  201. }
  202. else
  203. {
  204. location.reload();
  205. }
  206. return;
  207. }, 3000);
  208. }
  209. else {
  210. if(dataType && dataType==="XML")
  211. {
  212. const responseJson = await response.text();
  213. return responseJson
  214. }
  215. else
  216. {
  217. const responseJson = await response.json();
  218. return responseJson
  219. }
  220. }
  221. } catch (error) {
  222. Vue.prototype.$Spin.hide();
  223. const responseJson={
  224. errCode:500,
  225. msg:"系统异常"
  226. };
  227. return responseJson;
  228. }
  229. } else {
  230. return new Promise((resolve, reject) => {
  231. let requestObj;
  232. if (window.XMLHttpRequest) {
  233. requestObj = new XMLHttpRequest();
  234. } else {
  235. requestObj = new ActiveXObject;
  236. }
  237. let sendData = '';
  238. if ((type == 'POST' || type == 'PUT' || type == 'DELETE') && dataType!="JSON2"&& dataType!="FORMDATA") {
  239. sendData = initData(data);
  240. }else if((type == 'POST' || type == 'PUT' || type == 'DELETE') && dataType=="JSON2"){
  241. sendData = JSON.stringify(data);
  242. }else if((type == 'POST') && dataType=="FORMDATA"){
  243. sendData = data;
  244. }
  245. requestObj.open(type, url, true);
  246. requestObj.setRequestHeader("Accept","application/json");
  247. if(dataType && dataType==="XML")
  248. {
  249. requestObj.setRequestHeader("Accept","application/xml");
  250. requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  251. }
  252. else if(dataType && dataType==="JSON2")
  253. {
  254. requestObj.setRequestHeader("Accept","application/json");
  255. requestObj.setRequestHeader("Content-type", "application/json");
  256. }
  257. else if(dataType && dataType === "FORMDATA")
  258. {
  259. requestObj.setRequestHeader("Accept","application/json");
  260. requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  261. requestObj.setRequestHeader("dataType", "json");
  262. requestObj.setRequestHeader("cache", false); //上传文件无需缓存
  263. requestObj.setRequestHeader("processData", false); //用于对data参数进行序列化处理 这里必须false
  264. requestObj.setRequestHeader("contentType", false); //必须
  265. }
  266. else {
  267. requestObj.setRequestHeader("Accept","application/json");
  268. requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  269. }
  270. requestObj.setRequestHeader("client_token", localStorage.token || "");
  271. requestObj.setRequestHeader("token", localStorage.token || "");
  272. requestObj.setRequestHeader("sign", key_gen.encode(key_gen.handlerData(type == 'GET'?url.substring(url.indexOf("?")+1):data)));
  273. if(localStorage.user_id){
  274. requestObj.setRequestHeader("x-user-id-header", localStorage.user_id);
  275. }
  276. requestObj.send(sendData);
  277. requestObj.onreadystatechange = () => {
  278. if (requestObj.readyState == 4) {
  279. if (requestObj.status == 200) {
  280. let obj = requestObj.response || requestObj.responseT
  281. if (typeof obj !== 'object' && obj.indexOf("<?xml") == -1) {
  282. obj = JSON.parse(obj);
  283. }
  284. resolve(obj)
  285. }
  286. }
  287. }
  288. })
  289. }
  290. }