api_base.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. import Global from './global'
  2. import Auth from './auth'
  3. import Cache from './cache'
  4. import Dialog from './dialog'
  5. import Util from './util2'
  6. import ApiEnum from './api_enum'
  7. //加载器文本
  8. let _loadingTextDefault = '加载中..'
  9. let api = {};
  10. // 获取设备信息
  11. let getDevice = ()=>{
  12. if(api._device){
  13. return api._device
  14. }
  15. let deviceInfo = uni.getSystemInfoSync()
  16. // '设备名称|设备版本|设备系统版本|设备当前使用语言|设备屏幕分辨率|http请求版本|设备唯一识别码|default'
  17. // 'MI 5|V1.0.0|6.0.1|zh|720*1280|1.0|320981221265414|default'
  18. let device = [
  19. deviceInfo.model,
  20. deviceInfo.version,
  21. deviceInfo.system,
  22. deviceInfo.language,
  23. deviceInfo.screenWidth+'*'+deviceInfo.screenHeight,
  24. 'default',
  25. 'default',
  26. 'default'
  27. ].join('|');
  28. api._device = device
  29. return device
  30. }
  31. // 获取请求时间,并格式化
  32. let getRequestTime = () => {
  33. let time = new Date().getTime();
  34. let requestTime = Util.dateFormat(time, "yyyyMMddhhmmss");
  35. return requestTime;
  36. }
  37. // 获取随机数
  38. let getRands = () => {
  39. let num = Math.random() * (999999 - 100000) + 100000;
  40. let rands = parseInt(num, 10);
  41. return rands
  42. }
  43. api.request = (code, data, method = 'GET', dataType = 'json', header = null) => {
  44. //设置请求头
  45. header = header || {}
  46. header['Content-Type'] = 'application/json;charset=UTF-8'
  47. let head = {
  48. version:'v1',
  49. device: getDevice(),
  50. reqtime: getRequestTime(),
  51. seqno: getRands(),
  52. sessionId: Auth.getSessionId()
  53. }
  54. if([ApiEnum.loginByCode, ApiEnum.loginByWxapp].includes(code)){
  55. delete head.sessionId
  56. }
  57. // 1 reqtime 请求时间 N X(14) yyyymmddhhmmss
  58. // 2 seqno 请求随机数 N X(6) 随机数
  59. // 3 device 设备信息 N X(100) 设备信息
  60. // 4 sessionId 会话 Y X(20) 当需要识别请求者身份时必填
  61. // 5 version 请求版本号 Y X 默认v1
  62. //设置请求参数
  63. data = data || {}
  64. //操作店铺
  65. if(!Array.isArray(data)){
  66. data.storeId = data.storeId || Global.server.storeId;
  67. }
  68. //是否显示加载器
  69. let isShowLoading = data._isShowLoading || false
  70. let isPull = data._isPull || false
  71. let loadingText = data._loadingText || _loadingTextDefault
  72. let isReject = data._isReject || false
  73. //显示加载器
  74. if (isShowLoading) {
  75. isShowLoading = true
  76. Dialog.showLoading(loadingText)
  77. }
  78. //删除字段
  79. delete data._isShowLoading
  80. delete data._isPull
  81. delete data._isReject
  82. delete data._loadingText
  83. let realData = {}
  84. realData.head = head
  85. realData.body = data
  86. return new Promise((resolve, reject) => {
  87. //请求http
  88. uni.request({
  89. header: header,
  90. url: Global.server.apiUrl + "/"+Global.server.miniappCode+"/"+code,
  91. data: method=='POST'?realData:data,
  92. dataType: dataType,
  93. responseType: 'text',
  94. method: method,
  95. success: (res)=>{
  96. let response=res.data;
  97. if(response.head.bzflag=='200' && response.head.sysflag=='200'){
  98. resolve(response.body)
  99. }else{
  100. if(isReject){
  101. reject(response.head)
  102. return
  103. }
  104. Dialog.alert({
  105. content: response.head.errmsg || '服务繁忙,请稍后再试...'
  106. })
  107. }
  108. },
  109. fail: (res)=>{
  110. console.error(res)
  111. },
  112. complete: ()=>{
  113. if(isPull){
  114. uni.stopPullDownRefresh()
  115. }
  116. if (isShowLoading) {
  117. Dialog.hideLoading()
  118. }
  119. }
  120. })
  121. })
  122. }
  123. // 包裹一层,方便后续拓展
  124. api.requestWithTicket = (code, data, method = 'GET', dataType = 'json') => {
  125. return new Promise((resolve, reject) => {
  126. api.request(code, data, method, dataType)
  127. .then(resolve)
  128. .catch(reject)
  129. })
  130. }
  131. /**
  132. * 上传图片(多张)
  133. * @param {string} uri 文件路径 [Y]
  134. * @param {string} type 'multipart/form-data' [Y]
  135. * @param {string} name 文件key [Y]
  136. *
  137. * @return {Array<Object>} body
  138. * @return {string} id
  139. * @return {string} name
  140. * @return {string} path
  141. */
  142. api.uploadImg = (data) => {
  143. data = data || {}
  144. let isShowLoading = data._isShowLoading || false
  145. let isReject = data._isReject || false
  146. if(isShowLoading){
  147. Dialog.showLoading('上传中...')
  148. }
  149. return new Promise((resolve, reject) => {
  150. let header = {}
  151. header['Content-Type'] = 'multipart/form-data;'
  152. let uploadUrl = Global.server.apiUrl + "/" + Global.server.miniappCode+ "/" + ApiEnum.uploadImg
  153. uni.uploadFile({
  154. url: uploadUrl,
  155. filePath: data.uri,
  156. header: header,
  157. async: false,
  158. name: data.name,
  159. formData: {
  160. uri: data.uri,
  161. type: 'multipart/form-data',
  162. name: data.name
  163. },
  164. success: (res) => {
  165. let ret = JSON.parse(res.data)
  166. if(res.statusCode==200){
  167. resolve(ret.body)
  168. }else{
  169. if(isReject){
  170. reject(ret)
  171. }
  172. }
  173. },
  174. fail: (err) => {
  175. if(isReject){
  176. resolve(err)
  177. }
  178. },
  179. complete: () => {
  180. if(isShowLoading){
  181. Dialog.hideLoading()
  182. }
  183. }
  184. })
  185. })
  186. }
  187. export default api