app.js 4.6 KB

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