Http2.js 7.0 KB

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