promotion.js 12.1 KB
/* global wx */
// 1. 优惠券领取
// 2. YOHO币领取

import $ from 'jquery';
import utils from './utils';
import user from './user';
import cookies from './cookies';
import jsonp from './jsonp';
import captcha from './captcha';

const miniAppEntrance = '/pages/common/webback';

let _getMiniappLoginUrl = function(url) {
    if (url.indexOf('openby:yohobuy') > 0) {
        url = url.substring(0, url.indexOf('openby:yohobuy'));
    }
    let h5Url = `http://m.yohobuy.com/signin.html?openby:yohobuy={"action":"go.miniapp_login","params":{"h5back":"${encodeURIComponent(url)}"}}`;

    return `${miniAppEntrance}?url=${encodeURIComponent(h5Url)}`;
};

const gotoLogin = function() {
    if (window.__wxjs_environment === 'miniprogram' && typeof wx !== 'undefined' && wx.miniProgram) {
        wx.miniProgram.navigateTo({
            url: _getMiniappLoginUrl(location.href)
        });
        return;
    }

    if ($('#intimacy-link').length <= 0) {
        $('body').append('<a href=\'' + user.noLoginUrl() + '\' style="display:none;" id="intimacy-link"><span class="intimacy-link"></span></a>');
    }
    $('.intimacy-link').click();
};

let isSendCoin = false;
let _getCoin = function(data) {
    data.app = utils.queryString();
    data.app.uid = data.uid;

    if (isSendCoin) {
        return;
    }

    isSendCoin = true;
    jsonp({
        url: '//m.yohobuy.com/activity/coin/sendCoin?callback=?',
        timeout: 5000, // 5s
        data: data
    }).then(function(res) {
        isSendCoin = false;
        if (res.code === 200 && res.data) {
            if (res.data.code === 200) {
                utils.showCoinTip({
                    title: '恭喜您,成功领取有货币!',
                    content: '特殊情况下到账有延时<br>请耐心等待',
                    close: true,
                    coin: true,
                    img: res.data.popupImg
                });
            } else if (res.data.code === 501) {
                utils.showCoinTip({
                    title: '领取失败',
                    content: '哎呀,你来的有点早,活动还没开始呢<br/>稍后再来哦',
                    close: true,
                    img: res.data.popupImg
                });
            } else if (res.data.code === 502) {
                utils.showCoinTip({
                    title: '领取失败',
                    content: '抱歉,活动已结束了,下次要快哟~~',
                    close: true,
                    img: res.data.popupImg
                });
            } else if (res.data.code === 503) {
                utils.showCoinTip({
                    title: '已经领取',
                    content: '贪心会长胖,你已经领取过了啦~~',
                    close: true,
                    img: res.data.popupImg
                });
            } else if (res.data.code === 504) {
                utils.showCoinTip({
                    title: '领取失败',
                    content: '哎呀,你来晚了,有货币已经领完了,<br/>下次早点来哦',
                    close: true,
                    img: res.data.popupImg
                });
            } else if (res.data.msg) {
                utils.showCoinTip({
                    title: '领取失败',
                    content: '抱歉,系统错误,有货君正奋力解决中...请稍后再来',
                    close: true,
                    img: res.data.popupImg
                });
            }
        } else if (res.code === 401 && res.auth) {
            utils.showCoinTip({
                title: '领取失败',
                content: '登录信息失效,请重新登录',
                close: true,
                img: res.data && res.data.popupImg
            });
            setTimeout(() => {
                gotoLogin();
            }, 1000);
        } else if (res.message) {
            utils.showCoinTip({
                title: '领取失败',
                content: '抱歉,系统错误,有货君正奋力解决中...请稍后再来',
                close: true,
                img: res.data && res.data.popupImg
            });
        }
    }, function(){
        isSendCoin = false;
        utils.showCoinTip({
            title: '领取失败',
            content: '抱歉,系统错误,有货君正奋力解决中...请稍后再来',
            close: true
        });
    });
};

let isSendCoupon = false;
let _getCoupon = function(data){
    const qs = utils.queryString();

    data.app = {
        uid: qs.uid || cookies.cookie('app_uid'),
        app_version: qs.app_version || cookies.cookie('app_version'),
        client_type: qs.client_type || cookies.cookie('app_client_type'),
        session_key: qs.session_key || cookies.cookie('app_session_key')
    };

    if (isSendCoupon) {
        return;
    }

    let options = {
        bottom: '48%',
        paddingX: 20,
        paddingY: 20,
        radius: 6
    };

    isSendCoupon = true;
    jsonp({
        url: '//m.yohobuy.com/activity/feature/couponSend?callback=?',
        timeout: 5000, // 5s
        data: data
    }).then(function(res) {
        isSendCoupon = false;

        if (res.code === 200) {
            utils.toast('领取成功', options);
            let $img = $(`#${data.token}`);
            if($img) {
                let statusImgs = $img.data('status-imgs');
                if(statusImgs && statusImgs.received) {
                    $img.attr('src', statusImgs.received);
                }
            }
        } else if (res.code === 401) {
            if(res.auth) {
                utils.toast('登录信息失效,请重新登录', options);
                setTimeout(() => {
                    gotoLogin();
                }, 1000);
            }
            if(res.message === '优惠券已经领取') {
                utils.toast(res.message, options);
                let $img = $(`#${data.token}`);
                if($img) {
                    let statusImgs = $img.data('status-imgs');
                    if(statusImgs && statusImgs.received) {
                        $img.attr('src', statusImgs.received);
                    }
                }
            }
        } else if (res.message) {
            utils.toast(res.message, options);
        } else {
            utils.toast('领取失败', options);
        }
    }, function(){
        isSendCoupon = false;
        utils.toast('领取失败', options);
    });
};

let isSendRedEnevlope = false;
let _getRedEnevlope = function(data){
    data.app = utils.queryString();

    data.app.uid = data.app.uid || cookies.cookie('app_uid');
    data.app.app_version = data.app.app_version || cookies.cookie('app_version');
    data.app.client_type = data.app.client_type || cookies.cookie('app_client_type');
    data.app.session_key = data.app.session_key || cookies.cookie('app_session_key');

    if (isSendRedEnevlope) {
        return;
    }

    isSendRedEnevlope = true;
    jsonp({
        url: '//m.yohobuy.com/activity/feature/redenvelope?callback=?',
        timeout: 5000, // 5s
        data: data
    }).then(function(res) {
        isSendRedEnevlope = false;
        if (res.code === 200 && res.data) {
            if (res.data.addMsg === '领取成功') {
                utils.showTip({
                    title: '领取成功',
                    content: `成功领取${res.data.amount}元红包!`,
                    close: true
                });
            } else {
                utils.showTip({
                    title: '已领取过',
                    content: '今日领取机会已用完',
                    close: true
                });
            }
        } else if (res.code === 401 && res.auth) {
            utils.showTip({
                title: '领取失败',
                content: '登录信息失效,请重新登录',
                close: false
            });
            setTimeout(() => {
                gotoLogin();
            }, 1000);
        } else if (res.message) {
            utils.showTip({
                title: '领取失败',
                content: res.message,
                close: false
            });
        } else {
            utils.showTip({
                title: '领取失败',
                content: '请刷新重新领取,若多次领取失败,<br>可能网络故障或活动已结束。',
                close: false
            });
        }
    }, function(){
        isSendRedEnevlope = false;
        utils.showTip({
            title: '领取失败<br>请刷新重新领取',
            content: '如多次领取失败,请联系客服人员<br>带来不便敬请谅解',
            close: false
        });
    });
};

let _initCoin = function(uid){
    if (uid) {
        let cointoken = cookies.cookie('yoho-coin-token');
        if (cointoken) {
            _getCoin({
                token: cointoken,
                uid: uid
            });

            cookies.setCookie('yoho-coin-token', '');
        }
    }

    $('body').on('click', '.yoho-coin', function() {
        let token = $(this).data('token');
        if (user.uid) {
            _getCoin({
                token: token,
                uid: user.uid
            });
        } else {
            cookies.setCookie('yoho-coin-token', token);

            gotoLogin();
            return;
        }
    });
};

let _initCoupon = function(uid) {
    if (uid) {
        let conpontoken = cookies.cookie('yoho-conpon-token');
        let coupontype = cookies.cookie('yoho-conpon-type');
        let couponCaptcha = Number(cookies.cookie('yoho-conpon-captcha'));

        if (conpontoken) {
            if (couponCaptcha || captcha.isOn()) {
                let captchaInstance = captcha.getInstance((result) => {
                    if (result.ret === 0) {
                        _getCoupon({
                            token: conpontoken,
                            uid: uid,
                            coupontype,
                            ticket: result.ticket,
                            randstr: result.randstr
                        });
                    }
                });

                captchaInstance.show();
            }

            cookies.setCookie('yoho-conpon-token', '');
            cookies.setCookie('yoho-conpon-type', '');
            cookies.setCookie('yoho-conpon-captcha', '');
        }
    }

    $('body').on('click', '.yoho-conpon', function() {
        let token = $(this).data('token');
        let type = $(this).data('type');
        let isCaptcha = $(this).hasClass('yoho-captcha') ? 1 : 0;

        if (user.uid) {
            if (isCaptcha || captcha.isOn()) {
                let captchaInstance = captcha.getInstance((result) => {
                    if (result.ret === 0) {
                        _getCoupon({
                            token: token,
                            uid: user.uid,
                            coupontype: type,
                            ticket: result.ticket,
                            randstr: result.randstr
                        });
                    }
                });

                captchaInstance.show();
            }
        } else {
            cookies.setCookie('yoho-conpon-token', token);
            cookies.setCookie('yoho-conpon-type', type);
            cookies.setCookie('yoho-conpon-captcha', isCaptcha);

            gotoLogin();
            return;
        }
    });
};

let _initRedEnvelope = function(uid) {
    if (uid) {
        let redevenlopetoken = cookies.cookie('yoho-redenvelope-token');
        if (redevenlopetoken) {
            _getRedEnevlope({
                token: redevenlopetoken,
                uid: uid
            });

            cookies.setCookie('yoho-redenvelope-token', '');
        }
    }

    $('body').on('click', '.yoho-redenvelope', function() {
        let token = $(this).data('token');
        if (user.uid) {
            _getRedEnevlope({
                token: token,
                uid: user.uid
            });
        } else {
            cookies.setCookie('yoho-redenvelope-token', token);

            gotoLogin();
            return;
        }
    });
};

export default {
    init(uid) {
        _initCoin(uid);  // 初始化有货币
        _initCoupon(uid); // 初始化优惠券
        _initRedEnvelope(uid); // 初始化红包
    }
};