Http.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. class HTTP {
  2. constructor() {
  3. this.urls = [{
  4. name: '测试',
  5. url: "https://crm.meida.com:16691"
  6. }, {
  7. name: '8300',
  8. url: "http://61.164.207.46:8300"
  9. }, {
  10. name: "楚楚",
  11. url: "https://cucu.cnyunl.com:8079"
  12. }];
  13. this.updateList = (content, getList) => {
  14. content.copyContent = JSON.parse(JSON.stringify(content));
  15. content.pageSize = (content.pageNumber - 1) * (content.pageSize || 20); // 确保pageSize存在
  16. content.pageNumber = 1;
  17. getList()
  18. }
  19. this.formatNumber = (num, decimalPlaces = 2) => {
  20. if (!num && num !== 0) return '';
  21. let [integer, decimal] = String(num.toFixed(decimalPlaces)).split('.');
  22. integer = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  23. return decimal ? `${integer}.${decimal}` : integer;
  24. }
  25. //得到缩略图或者压缩图 getType默认得到缩略图传true得到压缩图
  26. this.getSpecifiedImage = (obj, getType = false) => {
  27. try {
  28. let type = getType ? 'compressed' : 'thumbnail';
  29. let imgObj = obj.subfiles.find(v => v.type == type);
  30. return imgObj.url || obj.url;
  31. } catch (error) {
  32. return obj.url;
  33. }
  34. }
  35. if (process.env.NODE_ENV === 'development') {
  36. this.baseUrl = this.urls[0].url;
  37. } else {
  38. this.baseUrl = this.urls[1].url;
  39. }
  40. // 从本地存储加载JSESSIONID
  41. this.jsessionid = uni.getStorageSync('JSESSIONID') || '';
  42. console.log("接口地址", this.baseUrl);
  43. }
  44. request({
  45. url,
  46. data = {},
  47. method = "POST",
  48. header = {
  49. 'content-type': 'application/json',
  50. "accesstoken": data.accesstoken || uni.getStorageSync('userMsg')?.token || '',
  51. // 添加Cookie字段
  52. "Cookie": `JSESSIONID=${this.jsessionid}`
  53. },
  54. showLoading = ''
  55. }) {
  56. // 如果data.content.pageNumber存在但pageTotal不存在,则设置pageTotal为1
  57. // 如果pageNumber大于pageTotal,则直接返回空结果
  58. // 在接口中拿到的pageNumber自动加1,目的是在这里直接处理分页逻辑
  59. try {
  60. if (data.content.pageNumber) {
  61. if (data.content.pageNumber > data.content.pageTotal) return new Promise((resolve) => resolve({ code: 0 }));;
  62. }
  63. } catch (error) { }
  64. return new Promise((resolve, reject) => {
  65. this._request(url, resolve, reject, data, method, header, showLoading);
  66. });
  67. }
  68. _request(url, resolve, reject, data, method, header, showLoading) {
  69. if (showLoading) uni.showLoading({
  70. title: showLoading,
  71. mask: true
  72. });
  73. uni.request({
  74. url: this.baseUrl + '/yos/rest' + url,
  75. data: data,
  76. method: method,
  77. header: header,
  78. timeout: 60000,
  79. success: (res) => {
  80. // 提取并保存JSESSIONID
  81. this._handleSessionCookies(res);
  82. try {
  83. if (res.data.pageNumber) {
  84. res.data.firstPage = res.data.pageNumber === 1; // 判断是否为第一页
  85. if (data.content.copyContent) {
  86. res.data.pageNumber = data.content.copyContent.pageNumber;
  87. res.data.pageTotal = data.content.copyContent.pageTotal;
  88. data.content.pageSize = data.content.copyContent.pageSize;
  89. delete data.content.copyContent
  90. } else {
  91. res.data.pageNumber++
  92. }
  93. }
  94. } catch (error) {
  95. }
  96. resolve(res.data);
  97. },
  98. fail: (err) => {
  99. reject(err);
  100. },
  101. complete: (res) => {
  102. if (showLoading) uni.hideLoading();
  103. // 网络错误处理
  104. if (res.errMsg !== 'request:ok') {
  105. uni.showToast({
  106. title: '网络异常,请稍后再试',
  107. icon: "none"
  108. });
  109. return;
  110. }
  111. // 会话过期处理
  112. if (res.data.msg === '登陆状态已过期,请重新登陆!') {
  113. // 清除过期会话ID
  114. this.jsessionid = '';
  115. uni.removeStorageSync('JSESSIONID');
  116. let currentPages = getCurrentPages()[getCurrentPages().length - 1];
  117. // 如果当前页面不是登录页面,则跳转到登录页面
  118. if (currentPages.route !== 'pages/login/login') {
  119. uni.showModal({
  120. title: '提示',
  121. content: '您的登录状态已过期,请重新登录。',
  122. showCancel: false,
  123. success: () => {
  124. uni.redirectTo({
  125. url: '/pages/login/login',
  126. })
  127. }
  128. });
  129. }
  130. }
  131. }
  132. });
  133. }
  134. // 处理会话Cookie
  135. _handleSessionCookies(res) {
  136. try {
  137. const cookies = res.cookies || [];
  138. const headers = res.header || {};
  139. // 检查响应头中的Set-Cookie
  140. const setCookie = headers['Set-Cookie'] || headers['set-cookie'];
  141. if (setCookie) {
  142. // 将字符串转换为数组
  143. const cookieArray = Array.isArray(setCookie)
  144. ? setCookie
  145. : [setCookie];
  146. cookies.push(...cookieArray);
  147. }
  148. // 查找JSESSIONID
  149. for (const cookie of cookies) {
  150. const match = cookie.match(/JSESSIONID=([^;]+)/i);
  151. if (match && match[1]) {
  152. const newSessionId = match[1];
  153. // 更新JSESSIONID
  154. if (newSessionId !== this.jsessionid) {
  155. this.jsessionid = newSessionId;
  156. uni.removeStorageSync('JSESSIONID');
  157. uni.setStorageSync('JSESSIONID', newSessionId);
  158. }
  159. break;
  160. }
  161. }
  162. } catch (error) {
  163. console.error('处理会话Cookie时出错:', error);
  164. }
  165. }
  166. }
  167. export { HTTP };