123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- 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/order/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;
- 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);
- }
- }
|