app.js 5.7 KB

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