requestConfig.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. import request from "./request";
  2. // 全局配置的请求域名
  3. // let baseUrl = "http://39.104.176.9:8082/lzkj-admin/";
  4. let baseUrl = "http://192.168.1.151:8080/";
  5. // let baseUrl = "https://byg.nmglzrj.com/lzkj-admin/";
  6. //可以new多个request来支持多个域名请求
  7. let $http = new request({
  8. //接口请求地址
  9. baseUrl: baseUrl,
  10. //服务器本地上传文件地址
  11. fileUrl: baseUrl,
  12. // 服务器上传图片默认url
  13. defaultUploadUrl: "api/common/v1/upload_image",
  14. //设置请求头(如果使用报错跨域问题,可能是content-type请求类型和后台那边设置的不一致)
  15. header: {
  16. 'content-type': 'application/json;charset=UTF-8'
  17. },
  18. // 请求超时时间(默认6000)
  19. timeout: 100000,
  20. // 默认配置(可不写)
  21. config: {
  22. // 是否自动提示错误
  23. isPrompt: false,
  24. // 是否显示加载动画
  25. load: true,
  26. // 是否使用数据工厂
  27. isFactory: true
  28. }
  29. });
  30. // 添加获取七牛云token的方法
  31. $http.getQnToken = function(callback){
  32. //该地址需要开发者自行配置(每个后台的接口风格都不一样)
  33. $http.get("api/kemean/aid/qn_upload").then(data => {
  34. /*
  35. *接口返回参数:
  36. *visitPrefix:访问文件的域名
  37. *token:七牛云上传token
  38. *folderPath:上传的文件夹
  39. *region: 地区 默认为:SCN
  40. */
  41. callback({
  42. visitPrefix: data.visitPrefix,
  43. token: data.token,
  44. folderPath: data.folderPath,
  45. region: "SCN"
  46. });
  47. });
  48. }
  49. // 添加获取阿里云token的方法
  50. $http.getAliToken = function(callback){
  51. //该地址需要开发者自行配置(每个后台的接口风格都不一样)
  52. $http.get("api/open/v1/ali_oss_upload").then(data => {
  53. /*
  54. *接口返回参数:
  55. *visitPrefix: 访问文件的域名
  56. *folderPath: 上传的文件夹
  57. *region: 地区
  58. *bucket: 阿里云的 bucket
  59. *accessKeyId: 阿里云的访问ID
  60. *accessKeySecret: 阿里云的访问密钥
  61. *stsToken: 阿里云的访问token
  62. */
  63. callback({
  64. accessKeyId: data.accessKeyId,
  65. accessKeySecret: data.accessKeySecret,
  66. bucket: data.bucket,
  67. region: data.region,
  68. visitPrefix: data.visitPrefix,
  69. token: data.token,
  70. folderPath: data.folderPath,
  71. stsToken: data.securityToken,
  72. });
  73. });
  74. }
  75. //当前接口请求数
  76. let requestNum = 0;
  77. //请求开始拦截器
  78. $http.requestStart = function(options) {
  79. if (options.load) {
  80. if (requestNum <= 0) {
  81. //打开加载动画
  82. uni.showLoading({
  83. title: '加载中',
  84. mask: true
  85. });
  86. }
  87. requestNum += 1;
  88. }
  89. // 图片、视频上传大小限制
  90. if (options.method == "FILE") {
  91. // 文件最大字节: options.maxSize 可以在调用方法的时候加入参数
  92. let maxSize = options.maxSize || '';
  93. for (let item of options.files) {
  94. if(item.fileType == 'image'){
  95. if (maxSize && item.size > maxSize) {
  96. setTimeout(() => {
  97. uni.showToast({
  98. title: "图片过大,请重新上传",
  99. icon: "none"
  100. });
  101. }, 500);
  102. return false;
  103. }
  104. } else if(item.fileType == "video"){
  105. if (item.duration < 3) {
  106. setTimeout(() => {
  107. uni.showToast({
  108. title: "视频长度不足3秒,请重新上传",
  109. icon: "none"
  110. });
  111. }, 500);
  112. return false;
  113. }
  114. }
  115. }
  116. }
  117. //请求前加入token
  118. options.header['authorization'] = 'Bearer '+uni.getStorageSync('token');
  119. return options; // return false 表示请求拦截,不会继续请求
  120. }
  121. //请求结束
  122. $http.requestEnd = function(options) {
  123. //判断当前接口是否需要加载动画
  124. if (options.load) {
  125. requestNum = requestNum - 1;
  126. if (requestNum <= 0) {
  127. uni.hideLoading();
  128. }
  129. }
  130. }
  131. //登录弹窗次数
  132. let loginPopupNum = 0;
  133. //所有接口数据处理(可在接口里设置不调用此方法)
  134. //此方法需要开发者根据各自的接口返回类型修改,以下只是模板
  135. $http.dataFactory = async function(res) {
  136. console.log("接口请求数据", {
  137. url: res.url,
  138. resolve: res.response,
  139. header: res.header,
  140. data: res.data,
  141. method: res.method,
  142. });
  143. if (res.response.statusCode && res.response.statusCode == 200) {
  144. let httpData = res.response.data;
  145. if (typeof (httpData) == "string") {
  146. httpData = JSON.parse(httpData);
  147. }
  148. /*********以下只是模板(及共参考),需要开发者根据各自的接口返回类型修改*********/
  149. //判断数据是否请求成功
  150. if (httpData.success || httpData.code == 200) {
  151. // 返回正确的结果(then接受数据)
  152. return Promise.resolve(httpData);
  153. } else if (httpData.code == "1000" || httpData.code == "401" || httpData.code == 1100) {
  154. let content = '登录过期,请重新登录~';
  155. if (loginPopupNum <= 0) {
  156. loginPopupNum++;
  157. uni.showModal({
  158. title: '温馨提示',
  159. content: content,
  160. confirmText: "登录",
  161. cancelText: "取消",
  162. success: function (res) {
  163. loginPopupNum--;
  164. if (res.confirm) {
  165. uni.login({
  166. provider: 'weixin', //使用微信登录
  167. success: function (loginRes) {
  168. $http.post('appraisal/WeiXin/getOpenId',{code:loginRes.code}).then(res=>{
  169. uni.setStorageSync('token',res.data.token);
  170. uni.setStorageSync('openId',res.data.user.openId);
  171. uni.setStorageSync('phonenumber',res.data.user.phonenumber);
  172. uni.setStorageSync('userName',res.data.user.userName);
  173. uni.setStorageSync('userId',res.data.user.userId);
  174. }).catch(err=>{
  175. })
  176. }
  177. });
  178. // uni.navigateTo({
  179. // url: "/pages/login/index"
  180. // });
  181. }
  182. }
  183. });
  184. }
  185. // 返回错误的结果(catch接受数据)
  186. return Promise.reject({
  187. statusCode: 0,
  188. errMsg: "【request】" + (httpData.info || httpData.msg)
  189. });
  190. } else { //其他错误提示
  191. if (res.isPrompt) {
  192. uni.showToast({
  193. title: httpData.info || httpData.msg,
  194. icon: "none",
  195. duration: 3000
  196. });
  197. }
  198. // 返回错误的结果(catch接受数据)
  199. return Promise.reject({
  200. statusCode: 0,
  201. errMsg: "【request】" + (httpData.info || httpData.msg)
  202. });
  203. }
  204. /*********以上只是模板(及共参考),需要开发者根据各自的接口返回类型修改*********/
  205. } else {
  206. // 返回错误的结果(catch接受数据)
  207. return Promise.reject({
  208. statusCode: res.response.statusCode,
  209. errMsg: "【request】数据工厂验证不通过"
  210. });
  211. }
  212. };
  213. // 错误回调
  214. $http.requestError = function (e) {
  215. // e.statusCode === 0 是参数效验错误抛出的
  216. if (e.statusCode === 0) {
  217. throw e;
  218. } else {
  219. uni.showToast({
  220. title: "网络错误,请检查一下网络",
  221. icon: "none"
  222. });
  223. }
  224. }
  225. export default $http;