api.js 10 KB

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