http.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. var config = require('../config/config.js')
  2. import {
  3. showToast
  4. } from '../utils/tips.js'
  5. const noRelaunch = [
  6. 'pages/interview-registration/index'
  7. ]
  8. //model状态
  9. let model = true;
  10. let loading = true;
  11. //服务器地址
  12. const apiUrl = config.apiUrl;
  13. /**
  14. * 处理请求数据
  15. */
  16. const getData = (data) => {
  17. // 预先取值
  18. const { user_token, user_id, member_id } = {
  19. user_token: wx.getStorageSync('user_token'),
  20. user_id: wx.getStorageSync('user_id'),
  21. member_id: wx.getStorageSync('member_id'),
  22. }
  23. // 删除空值
  24. let tmp_data = { user_token, user_id, member_id }
  25. for (let key in tmp_data) {
  26. if (!tmp_data[key] && tmp_data[key] !== 0) {
  27. delete tmp_data[key]
  28. }
  29. }
  30. // 再次过滤
  31. const _data = Object.assign(data, tmp_data)
  32. for (let key in _data) {
  33. if (!_data[key] && _data[key] !== 0) {
  34. delete _data[key]
  35. }
  36. }
  37. return _data;
  38. }
  39. /**
  40. * 封装http 请求方法
  41. */
  42. const http = (params) => {
  43. //返回promise 对象
  44. return new Promise((resolve, reject) => {
  45. if (loading) {
  46. loading = false;
  47. wx.showLoading({
  48. title: 'loading',
  49. mask: true
  50. });
  51. }
  52. const pages = getCurrentPages();
  53. wx.request({
  54. url: apiUrl + params.url, //服务器url+参数中携带的接口具体地址
  55. data: getData(params.data || {}), //请求参数
  56. header: Object.assign({
  57. "Content-Type": "application/json" //设置后端需要的常用的格式就好,特殊情况调用的时候单独设置
  58. }, params.header || {}),
  59. method: params.method || 'GET', //默认为GET,可以不写,如常用请求格式为POST,可以设置POST为默认请求方式
  60. dataType: params.dataType, //返回的数据格式,默认为JSON,特殊格式可以在调用的时候传入参数
  61. responseType: params.responseType, //响应的数据类型
  62. success: function (res) {
  63. wx.hideLoading({
  64. success: () => {
  65. loading = true
  66. }
  67. });
  68. if (res.statusCode == 200) {
  69. var errorCode = res.data.errcode
  70. if (errorCode == 0) {
  71. return resolve(res.data)
  72. } else if (errorCode == 1014) {
  73. wx.setStorageSync('openId', res.data.data.openId);
  74. wx.setStorageSync('sessionKey', res.data.data.sessionKey);
  75. wx.setStorageSync('unionId', res.data.data.unionId);
  76. //前往绑定手机号
  77. wx.navigateTo({
  78. url: '/pages/bind-phone/index',
  79. })
  80. } else if (errorCode == 4000) {
  81. wx.showModal({
  82. title: '提示',
  83. confirmText: '好的',
  84. content: res.data.errmsg,
  85. showCancel: false,
  86. success: () => { }
  87. })
  88. return
  89. } else if (errorCode == 1005) {
  90. //未获取到微信登录信息
  91. wx.navigateTo({
  92. url: '/pages/login/login',
  93. })
  94. } else if (errorCode == 2009) {
  95. if (pages[pages.length - 1].route === 'pages/identification/index') {
  96. return resolve(res.data)
  97. } else {
  98. //用户信息重复,请选择用户信息
  99. wx.setStorageSync('userList', res.data.data.userList);
  100. wx.setStorageSync('currentUser', res.data.data.currentUser);
  101. wx.redirectTo({
  102. url: '/pages/select-info/index',
  103. })
  104. }
  105. } else if (errorCode == 2008) {
  106. //账号不存在,或token无效
  107. if (model && params.data.task_id !== 10) {
  108. wx.showModal({
  109. title: '提示',
  110. content: '登录失效请重新登录',
  111. // showCancel: false,
  112. success: res => {
  113. if (res.confirm) {
  114. model = true;
  115. wx.navigateTo({
  116. url: '/pages/login/login',
  117. })
  118. }
  119. if (res.cancel) {
  120. model = true;
  121. wx.navigateBack({
  122. delta: 1,
  123. fail: res => {
  124. wx.switchTab({
  125. url: '/pages/index/index',
  126. })
  127. }
  128. })
  129. }
  130. }
  131. })
  132. model = false
  133. }
  134. return
  135. } else if (errorCode == 1007) {
  136. //手机号已被绑定
  137. } else if (errorCode == 40005) {
  138. //用户信息和微信信息不匹配
  139. } else if (errorCode == 1015) {
  140. //用户尚未创建简历
  141. return reject(res.data);
  142. } else if (errorCode == 40007) {
  143. //账号类型不符
  144. } else if (errorCode == 2006) {
  145. //后台接口异常
  146. } else if (errorCode == 2010) {
  147. //用户未登录
  148. wx.showModal({
  149. title: '提示',
  150. content: '请先登录',
  151. success: res => {
  152. if (res.confirm) {
  153. wx.navigateTo({
  154. url: '/pages/login/login',
  155. })
  156. }
  157. if (res.cancel) {
  158. wx.navigateBack({
  159. delta: 1,
  160. fail: res => {
  161. wx.switchTab({
  162. url: '/pages/index/index',
  163. })
  164. }
  165. })
  166. }
  167. }
  168. })
  169. return
  170. }
  171. params.data.task_id !== 10 && showToast(res.data.errmsg);
  172. reject(res.data);
  173. } else {
  174. //2. 操作不成功返回数据,以toast方式弹出响应信息,如后端未格式化非操作成功异常信息,则可以统一定义异常提示
  175. wx.showToast({
  176. icon: "none",
  177. title: "网络异常",
  178. success: () => {
  179. reject()
  180. }
  181. })
  182. }
  183. },
  184. fail: function (e) {
  185. wx.hideLoading({
  186. success: () => {
  187. loading = true
  188. }
  189. });
  190. wx.showToast({
  191. icon: "none",
  192. title: "网络异常",
  193. success: () => {
  194. loading = true
  195. reject()
  196. }
  197. })
  198. },
  199. complete: (res) => {
  200. wx.stopPullDownRefresh({
  201. success: () => {
  202. console.log(`${pages.length ? pages[pages.length - 1].route : '应用加载中...'} => stopPullDownRefresh`);
  203. }
  204. });
  205. try {
  206. console.log('当前页面=>', pages.length ? pages[pages.length - 1].route : '初始化中...')
  207. console.log("请求参数=>", params);
  208. console.log(`请求状态码=>${res.statusCode}`, `状态信息=>${res.errMsg}`);
  209. console.log("返回结果=>", res.data);
  210. console.log(' ');
  211. } catch (error) {
  212. console.log(error);
  213. }
  214. }
  215. })
  216. })
  217. };
  218. module.exports = {
  219. http
  220. }