api.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. import {
  2. baseUrl,
  3. baseApiUrl
  4. } from './config.js';
  5. import * as common from './common.js' //引入common
  6. import * as db from './db.js' //引入common
  7. // 需要登陆的,都写到这里,否则就是不需要登陆的接口
  8. let methodsToken = ['profile', 'refreshUser', 'wxLogin', 'changeMobile', 'getWuyuanUser'];
  9. const post = (method, data, callback, type, orgurl) => {
  10. let userToken = '';
  11. let auth = '';
  12. // 判断token是否存在
  13. // console.log("method: ", method);
  14. if (methodsToken.indexOf(method) >= 0) {
  15. // 获取用户token
  16. let auth = db.get("auth");
  17. // console.log(auth);
  18. let nowdate = (new Date()) / 1000; //当前时间戳
  19. //新增用户判断是否登录逻辑begin
  20. common.isLogin();
  21. //新增用户判断是否登录逻辑end
  22. if (!auth || auth.createtime + auth.expires_in < nowdate) {
  23. common.toLogin();
  24. return false;
  25. } else {
  26. userToken = auth.token;
  27. }
  28. }
  29. if (type) {
  30. method = type + '/' + method
  31. } else {
  32. method = '/' + method
  33. }
  34. let realurl = baseApiUrl + method;
  35. if (orgurl) {
  36. realurl = baseUrl + orgurl;
  37. }
  38. uni.showLoading({
  39. title: '',
  40. icon: 'loading'
  41. });
  42. uni.request({
  43. url: realurl,
  44. data: data,
  45. header: {
  46. 'Accept': 'application/json',
  47. 'Content-Type': 'application/x-www-form-urlencoded',
  48. 'token': userToken,
  49. '__token__': userToken
  50. },
  51. method: 'POST',
  52. success: (response) => {
  53. uni.hideLoading();
  54. const result = response.data
  55. if (result.msg == 'Please login' || result.msg == '请登陆') {
  56. db.del("user");
  57. db.del("auth");
  58. console.log('未登陆')
  59. uni.showToast({
  60. title: result.msg,
  61. icon: 'none',
  62. duration: 2000,
  63. complete: function() {
  64. uni.reLaunch({
  65. url: '/pages/index/index',
  66. })
  67. }
  68. });
  69. }
  70. callback(result);
  71. },
  72. fail: (error) => {
  73. uni.hideLoading();
  74. if (error && error.response) {
  75. showError(error.response);
  76. }
  77. },
  78. });
  79. }
  80. // 上传图片
  81. export const uploadImage = (method, data = {}, callback, num = 9, type) => {
  82. if (type) {
  83. method = type + '/' + method
  84. } else {
  85. method = method
  86. }
  87. let userToken = '';
  88. let auth = db.get("auth");
  89. userToken = auth.token;
  90. uni.chooseImage({
  91. count: num,
  92. success: (res) => {
  93. uni.showLoading({
  94. title: '上传中...'
  95. });
  96. let tempFilePaths = res.tempFilePaths
  97. for (var i = 0; i < tempFilePaths.length; i++) {
  98. data.file = tempFilePaths[i]
  99. uni.uploadFile({
  100. url: baseApiUrl + method,
  101. filePath: tempFilePaths[i],
  102. fileType: 'image',
  103. name: 'file',
  104. headers: {
  105. 'Accept': 'application/json',
  106. 'Content-Type': 'multipart/form-data',
  107. 'token': userToken
  108. },
  109. formData: data,
  110. success: (uploadFileRes) => {
  111. callback(JSON.parse(uploadFileRes.data))
  112. },
  113. fail: (error) => {
  114. if (error && error.response) {
  115. common.showError(error.response);
  116. }
  117. },
  118. complete: () => {
  119. setTimeout(function() {
  120. uni.hideLoading();
  121. }, 250);
  122. },
  123. });
  124. }
  125. }
  126. });
  127. }
  128. const get = (url, callback) => {
  129. uni.showLoading({
  130. title: '加载中'
  131. });
  132. let realurl = baseUrl + url;
  133. if (url.indexOf('http:') >= 0 || url.indexOf('https:') >= 0) {
  134. let realurl = url;
  135. }
  136. uni.request({
  137. url: realurl,
  138. header: {
  139. 'Accept': 'application/json',
  140. 'Content-Type': 'application/x-www-form-urlencoded', //自定义请求头信息
  141. },
  142. method: 'GET',
  143. success: (response) => {
  144. callback(response.data);
  145. },
  146. fail: (error) => {
  147. if (error && error.response) {
  148. showError(error.response);
  149. }
  150. },
  151. complete: () => {
  152. setTimeout(function() {
  153. uni.hideLoading();
  154. }, 250);
  155. }
  156. });
  157. }
  158. const showError = error => {
  159. let errorMsg = ''
  160. switch (error.status) {
  161. case 400:
  162. errorMsg = '请求参数错误'
  163. break
  164. case 401:
  165. errorMsg = '未授权,请登录'
  166. break
  167. case 403:
  168. errorMsg = '跨域拒绝访问'
  169. break
  170. case 404:
  171. errorMsg = `请求地址出错: ${error.config.url}`
  172. break
  173. case 408:
  174. errorMsg = '请求超时'
  175. break
  176. case 500:
  177. errorMsg = '服务器内部错误'
  178. break
  179. case 501:
  180. errorMsg = '服务未实现'
  181. break
  182. case 502:
  183. errorMsg = '网关错误'
  184. break
  185. case 503:
  186. errorMsg = '服务不可用'
  187. break
  188. case 504:
  189. errorMsg = '网关超时'
  190. break
  191. case 505:
  192. errorMsg = 'HTTP版本不受支持'
  193. break
  194. default:
  195. errorMsg = error.msg
  196. break
  197. }
  198. uni.showToast({
  199. title: errorMsg,
  200. icon: 'none',
  201. duration: 2000
  202. });
  203. }
  204. const syncget = (url, data) => {
  205. return new Promise(function(resolve, reject) {
  206. get(url + queryParams(data, true), (result) => {
  207. try {
  208. resolve(result);
  209. } catch (e) {
  210. reject(e);
  211. }
  212. })
  213. })
  214. }
  215. const syncpost = (f, m, d) => {
  216. return new Promise(function(resolve, reject) {
  217. post(f, d, (result) => {
  218. try {
  219. resolve(result);
  220. } catch (e) {
  221. reject(e);
  222. }
  223. }, m, m);
  224. })
  225. }
  226. // 登录
  227. export const third = (data, callback) => post('third', data, callback, 'discover/User');
  228. // 用户绑定手机
  229. export const bindphone = (data, callback) => post('bind', data, callback, 'discover/User');
  230. // 修改用户信息
  231. export const profile = (data, callback) => post('profile', data, callback, 'discover/User');
  232. // 发送验证码
  233. export const sendSmsVerify = (data, callback) => post('sendSmsVerify', data, callback, 'discover/User');
  234. // 刷新用户
  235. export const refreshUser = (data, callback) => post('refreshUser', data, callback, 'discover/User');
  236. // 注册
  237. export const register = (data, callback) => post('register', data, callback, 'discover/User');
  238. // 登录
  239. export const login = (data, callback) => post('login', data, callback, 'discover/User');
  240. // 退出登录
  241. export const logout = (data, callback) => post('logout', data, callback, 'discover/User');
  242. // 上传头像
  243. export const upload = (data, callback) => post('upload', data, callback, 'discover/Ajax');
  244. // 绑定手机
  245. export const changeMobile = (data, callback) => post('changeMobile', data, callback, 'discover/User');
  246. //获取手机号前先登录
  247. export const wxLogin = (data, callback) => post('wxLogin', data, callback, 'user');
  248. //获取手机号
  249. export const getMobile = (data, callback) => post('getPhoneNumber', data, callback, 'user');
  250. //取CMS配置
  251. export const getConfig = async (params = {}) => await syncget('addons/cms/api.common/init', params);
  252. function queryParams(data = {}, isPrefix = true, arrayFormat = 'brackets') {
  253. let prefix = isPrefix ? '?' : ''
  254. let _result = []
  255. if (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1) arrayFormat = 'brackets';
  256. for (let key in data) {
  257. let value = data[key]
  258. // 去掉为空的参数
  259. if (['', undefined, null].indexOf(value) >= 0) {
  260. continue;
  261. }
  262. if (value.length > 0) {
  263. value = value.replace(/%/g, "%25");
  264. value = value.replace(/\&/g, "%26");
  265. value = value.replace(/\+/g, "%2B");
  266. }
  267. // 如果值为数组,另行处理
  268. if (value.constructor === Array) {
  269. // e.g. {ids: [1, 2, 3]}
  270. switch (arrayFormat) {
  271. case 'indices':
  272. // 结果: ids[0]=1&ids[1]=2&ids[2]=3
  273. for (let i = 0; i < value.length; i++) {
  274. _result.push(key + '[' + i + ']=' + value[i])
  275. }
  276. break;
  277. case 'brackets':
  278. // 结果: ids[]=1&ids[]=2&ids[]=3
  279. value.forEach(_value => {
  280. _result.push(key + '[]=' + _value)
  281. })
  282. break;
  283. case 'repeat':
  284. // 结果: ids=1&ids=2&ids=3
  285. value.forEach(_value => {
  286. _result.push(key + '=' + _value)
  287. })
  288. break;
  289. case 'comma':
  290. // 结果: ids=1,2,3
  291. let commaStr = "";
  292. value.forEach(_value => {
  293. commaStr += (commaStr ? "," : "") + _value;
  294. })
  295. _result.push(key + '=' + commaStr)
  296. break;
  297. default:
  298. value.forEach(_value => {
  299. _result.push(key + '[]=' + _value)
  300. })
  301. }
  302. } else {
  303. _result.push(key + '=' + value)
  304. }
  305. }
  306. return _result.length ? prefix + _result.join('&') : ''
  307. }
  308. //取轮播图
  309. export const getBannerList = (data, callback) => get('/api/wuyuan/swiper_icon/lists' + queryParams(data, true),
  310. callback);
  311. export const getWuyuanUser = (data, callback) => post('getWuyuanUser', data, callback, 'wuyuan/user');