import store from '../store' import * as util from './util' import { paginate } from '@/common/constant' import * as MessageApi from '@/api/message' /** * 获取当前运行的终端(App H5 小程序) * https://uniapp.dcloud.io/platform */ export const getPlatform = () => { // #ifdef APP-PLUS const platform = 'App' // #endif // #ifdef APP-PLUS-NVUE const platform = 'App' // #endif // #ifdef H5 const platform = 'H5' // #endif // #ifdef MP-WEIXIN const platform = 'MP-WEIXIN' // #endif // #ifdef MP-ALIPAY const platform = 'MP-ALIPAY' // #endif // #ifdef MP-BAIDU const platform = 'MP-BAIDU' // #endif // #ifdef MP-TOUTIAO const platform = 'MP-TOUTIAO' // #endif // #ifdef MP-QQ const platform = 'MP-QQ' // #endif // #ifdef MP-360 const platform = 'MP-360' // #endif return platform } /** * 显示成功提示框 */ export const showSuccess = (msg, callback) => { uni.showToast({ title: msg, icon: 'success', mask: true, duration: 1500, success() { callback && callback() } }) } /** * 显示失败提示框 */ export const showError = (msg, callback) => { uni.showModal({ title: '友情提示', content: msg, showCancel: false, success(res) { callback && callback() } }) } /** * 显示纯文字提示框 */ export const showToast = msg => { uni.showToast({ title: msg, icon: 'none' }) } /** * tabBar页面路径列表 (用于链接跳转时判断) * tabBarLinks为常量, 无需修改 */ export const getTabBarLinks = () => { const tabBarLinks = [ 'pages/index/index', 'pages/category/index', 'pages/user/index' ] return tabBarLinks } /** * 生成转发的url参数 */ export const getShareUrlParams = (params) => { return util.urlEncode({ refereeId: store.getters.userId, // 推荐人ID ...params }) } /** * 跳转到指定页面url * 支持tabBar页面 * @param {string} url * @param {object} query */ export const navTo = (url, query = {}) => { if (!url || url.length == 0) { return false } // tabBar页面, 使用switchTab if (util.inArray(url, getTabBarLinks())) { uni.switchTab({ url: `/${url}` }) return true } // 生成query参数 const queryStr = !util.isEmpty(query) ? '?' + util.urlEncode(query) : '' // 普通页面, 使用navigateTo uni.navigateTo({ url: `/${url}${queryStr}` }) return true } /** * 记录购物车商品总数量 * @param {*} value */ export const setCartTotalNum = (value) => { uni.setStorageSync('cartTotalNum', Number(value)) } /** * 设置购物车tabbar的角标 * 该方法只能在tabbar页面中调用, 其他页面调用会报错 */ export const setCartTabBadge = () => { const cartTabbarIndex = 1 const cartTotal = uni.getStorageSync('cartTotalNum') || 0; console.log('cartTotal = ', cartTotal); if (cartTotal > 0) { uni.setTabBarBadge({ index: cartTabbarIndex, text: `${cartTotal}` }) } else { uni.removeTabBarBadge({ index: cartTabbarIndex }) } return } /** * 验证是否已登录 */ export const checkLogin = () => { return !!store.getters.userId; } /** * 需要登录后操作 */ export const needLogin = () => { const isLogin = checkLogin(); if (!isLogin) { uni.showModal({ title: '温馨提示', content: '此时此刻需要您登录喔~', confirmText: "去登录", cancelText: "再逛会", success: res => { if (res.confirm) { uni.navigateTo({ url: "/pages/login/index" }) } } }) } } /** * 发起支付请求 * @param {Object} 参数 */ export const wxPayment = (option) => { const options = { timeStamp: '', nonceStr: '', prepay_id: '', paySign: '', ...option } // 微信内浏览器支付 if (isWechat()) { return new Promise((resolve, reject) => { wxH5Payment(options); }) } // 微信小程序支付 return new Promise((resolve, reject) => { uni.requestPayment({ provider: 'wxpay', timeStamp: options.timeStamp, nonceStr: options.nonceStr, 'package': options.package, signType: 'MD5', paySign: options.paySign, success: res => resolve(res), fail: res => reject(res) }) }) } /** * 加载更多列表数据 * @param {Object} resList 新列表数据 * @param {Object} oldList 旧列表数据 * @param {int} pageNo 当前页码 */ export const getEmptyPaginateObj = () => { return util.cloneObj(paginate) } /** * 加载更多列表数据 * @param {Object} resList 新列表数据 * @param {Object} oldList 旧列表数据 * @param {int} pageNo 当前页码 */ export const getMoreListData = (resList, oldList, pageNo) => { // 如果是第一页需手动制空列表 if (pageNo == 1) oldList.content = []; // 合并新数据 return oldList.content.concat(resList.content); } /** * 弹框消息 * @param {Object} 参数 */ export const showMessage = () => { const app = this if (!store.getters.userId) { return false } return new Promise((resolve, reject) => { MessageApi.getOne() .then(result => { if (result.data.content) { uni.showModal({ title: result.data.title ? result.data.title : '友情提示', content: result.data.content, showCancel: false, success(res) { if (res.confirm) { // 将消息置为已读 MessageApi.readed({'msgId' : result.data.msgId}) .then(result => { //empty }) } } }) } }) }) } export const isWechat = () => { try { const ua = window.navigator.userAgent.toLowerCase(); if (ua.match(/micromessenger/i) == 'micromessenger') { return true; } else { return false; } } catch (e) { return false; } } export const wxH5Payment = (data ,callback_succ_func ,callback_error_func) => { if (!isWechat()) { return; } if (typeof WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } } else { jsApiCall(data, callback_succ_func, callback_error_func); } } export const jsApiCall = (data, callback_succ_func, callback_error_func) => { //使用原生的,避免初始化appid问题 WeixinJSBridge.invoke('getBrandWCPayRequest', { appId:data['appId'], timeStamp: data['timeStamp'], nonceStr: data['nonceStr'], // 支付签名随机串,不长于 32 位 package: data['package'], // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*) signType: data['signType'], // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' paySign: data['paySign'], // 支付签名 }, function(res) { var msg = res.err_msg ?res.err_msg :res.errMsg; //WeixinJSBridge.log(msg); switch (msg) { case 'get_brand_wcpay_request:ok': //支付成功时 if(callback_succ_func){ callback_succ_func(res); } break; default: //支付失败时 WeixinJSBridge.log('支付失败!'+msg+',请返回重试.'); if(callback_error_func){ callback_error_func({msg:msg}); } break; } }) }