app.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. import store from '@/store'
  2. import * as util from '@/utils/util'
  3. import { paginate } from '@/common/constant'
  4. /**
  5. * 获取当前运行的终端(App H5 小程序)
  6. * https://uniapp.dcloud.io/platform
  7. */
  8. export const getPlatform = () => {
  9. // #ifdef APP-PLUS
  10. const platform = 'App'
  11. // #endif
  12. // #ifdef APP-PLUS-NVUE
  13. const platform = 'App'
  14. // #endif
  15. // #ifdef H5
  16. const platform = 'H5'
  17. // #endif
  18. // #ifdef MP-WEIXIN
  19. const platform = 'MP-WEIXIN'
  20. // #endif
  21. // #ifdef MP-ALIPAY
  22. const platform = 'MP-ALIPAY'
  23. // #endif
  24. // #ifdef MP-BAIDU
  25. const platform = 'MP-BAIDU'
  26. // #endif
  27. // #ifdef MP-TOUTIAO
  28. const platform = 'MP-TOUTIAO'
  29. // #endif
  30. // #ifdef MP-QQ
  31. const platform = 'MP-QQ'
  32. // #endif
  33. // #ifdef MP-360
  34. const platform = 'MP-360'
  35. // #endif
  36. return platform
  37. }
  38. /**
  39. * 显示成功提示框
  40. */
  41. export const showSuccess = (msg, callback) => {
  42. uni.showToast({
  43. title: msg,
  44. icon: 'success',
  45. mask: true,
  46. duration: 1500,
  47. success() {
  48. callback && callback()
  49. }
  50. })
  51. }
  52. /**
  53. * 显示失败提示框
  54. */
  55. export const showError = (msg, callback) => {
  56. uni.showModal({
  57. title: '友情提示',
  58. content: msg,
  59. showCancel: false,
  60. success(res) {
  61. callback && callback()
  62. }
  63. })
  64. }
  65. /**
  66. * 显示纯文字提示框
  67. */
  68. export const showToast = msg => {
  69. uni.showToast({
  70. title: msg, // 提示的内容
  71. icon: 'none',
  72. mask: true, // 是否显示透明蒙层,防止触摸穿透
  73. duration // 提示的延迟时间,单位毫秒,默认:1500
  74. })
  75. }
  76. /**
  77. * tabBar页面路径列表 (用于链接跳转时判断)
  78. * tabBarLinks为常量, 无需修改
  79. */
  80. export const getTabBarLinks = () => {
  81. const tabBarLinks = [
  82. 'pages/index/index',
  83. 'pages/category/index',
  84. 'pages/cart/index',
  85. 'pages/user/index'
  86. ]
  87. return tabBarLinks
  88. }
  89. /**
  90. * 生成完整的H5地址 [带参数]
  91. * @param {string} h5Url H5访问地址
  92. * @param {string} path 页面路径
  93. * @param {object} params 页面参数
  94. * @return {string}
  95. */
  96. export const buildUrL = (h5Url, path, params) => {
  97. let complete = h5Url
  98. if (!util.isEmpty(path)) {
  99. complete += '#/' + path
  100. const shareParamsStr = getShareUrlParams(params)
  101. if (!util.isEmpty(shareParamsStr)) {
  102. complete += '?' + shareParamsStr
  103. }
  104. }
  105. return complete
  106. }
  107. /**
  108. * 生成转发的url参数(string格式)
  109. */
  110. export const getShareUrlParams = (params) => {
  111. return util.urlEncode({
  112. refereeId: store.getters.userId, // 推荐人ID
  113. ...params
  114. })
  115. }
  116. /**
  117. * 跳转到指定页面url
  118. * 支持tabBar页面
  119. * @param {string} url 页面路径
  120. * @param {object} query 页面参数
  121. * @param {string} modo 跳转类型(默认navigateTo)
  122. */
  123. export const navTo = (url, query = {}, modo = 'navigateTo') => {
  124. if (!url || url.length == 0) {
  125. return false
  126. }
  127. // tabBar页面, 使用switchTab
  128. if (util.inArray(url, getTabBarLinks())) {
  129. uni.switchTab({
  130. url: `/${url}`
  131. })
  132. return true
  133. }
  134. // 生成query参数
  135. const queryStr = !util.isEmpty(query) ? '?' + util.urlEncode(query) : ''
  136. // 普通页面, 使用navigateTo
  137. modo === 'navigateTo' && uni.navigateTo({
  138. url: `/${url}${queryStr}`
  139. })
  140. // 特殊指定, 使用redirectTo
  141. modo === 'redirectTo' && uni.redirectTo({
  142. url: `/${url}${queryStr}`
  143. })
  144. return true
  145. }
  146. /**
  147. * 获取购物车商品总数量
  148. * @param {*} value
  149. */
  150. export const getCartTotalNum = (value) => {
  151. const cartTotal = uni.getStorageSync('cartTotalNum') || 0
  152. return checkLogin() ? cartTotal : 0
  153. }
  154. /**
  155. * 记录购物车商品总数量
  156. * @param {*} value
  157. */
  158. export const setCartTotalNum = (value) => {
  159. uni.setStorageSync('cartTotalNum', Number(value))
  160. }
  161. /**
  162. * 设置购物车tabbar的角标
  163. * 该方法只能在tabbar页面中调用, 其他页面调用会报错
  164. */
  165. export const setCartTabBadge = () => {
  166. const cartTabbarIndex = 2
  167. const cartTotal = getCartTotalNum()
  168. if (cartTotal > 0) {
  169. uni.setTabBarBadge({
  170. index: cartTabbarIndex,
  171. text: `${cartTotal}`
  172. })
  173. } else {
  174. uni.removeTabBarBadge({
  175. index: cartTabbarIndex
  176. })
  177. }
  178. return
  179. }
  180. /**
  181. * 验证是否已登录
  182. */
  183. export const checkLogin = () => {
  184. return !!store.getters.userId
  185. }
  186. /**
  187. * 发起支付请求
  188. * @param {Object} 参数
  189. */
  190. export const wxPayment = (option) => {
  191. const options = {
  192. timeStamp: '',
  193. nonceStr: '',
  194. prepay_id: '',
  195. paySign: '',
  196. ...option
  197. }
  198. return new Promise((resolve, reject) => {
  199. uni.requestPayment({
  200. provider: 'wxpay',
  201. timeStamp: options.timeStamp,
  202. nonceStr: options.nonceStr,
  203. 'package': `prepay_id=${options.prepay_id}`,
  204. signType: 'MD5',
  205. paySign: options.paySign,
  206. success: res => resolve(res),
  207. fail: res => reject(res)
  208. })
  209. })
  210. }
  211. /**
  212. * 加载更多列表数据
  213. * @param {Object} resList 新列表数据
  214. * @param {Object} oldList 旧列表数据
  215. * @param {int} pageNo 当前页码
  216. */
  217. export const getEmptyPaginateObj = () => {
  218. return util.cloneObj(paginate)
  219. }
  220. /**
  221. * 加载更多列表数据
  222. * @param {Object} resList 新列表数据
  223. * @param {Object} oldList 旧列表数据
  224. * @param {int} pageNo 当前页码
  225. */
  226. export const getMoreListData = (resList, oldList, pageNo) => {
  227. // 如果是第一页需手动制空列表
  228. if (pageNo == 1) oldList.data = []
  229. // 合并新数据
  230. return oldList.data.concat(resList.data)
  231. }