|
|
|
|
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,
|
|
|
|
|
function(res) {
|
|
|
|
|
resolve(res);
|
|
|
|
|
},
|
|
|
|
|
function(err) {
|
|
|
|
|
reject(err);
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// H5支付
|
|
|
|
|
if (getPlatform() == 'H5' && option.mweb_url) {
|
|
|
|
|
h5Pay(option.mweb_url, option.backUrl);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 微信小程序支付
|
|
|
|
|
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 false;
|
|
|
|
|
}
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const h5Pay = (url, backUrl) => {
|
|
|
|
|
// 设置回跳地址,支付完成之后回跳到哪
|
|
|
|
|
let redirectUrl ='&redirect_url=' + encodeURIComponent(backUrl);
|
|
|
|
|
// 拼接上回跳地址
|
|
|
|
|
let linkUrl = url + redirectUrl
|
|
|
|
|
const system = uni.getSystemInfoSync()
|
|
|
|
|
if (system.platform == 'ios') {
|
|
|
|
|
// 如果是iOS平台,使用location.href,iOS里面限制了window.open的使用。
|
|
|
|
|
window.location.href = linkUrl;
|
|
|
|
|
} else {
|
|
|
|
|
window.open(linkUrl);
|
|
|
|
|
}
|
|
|
|
|
}
|