Http.js 6.3 KB

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