Authored by 邱骏

首单收购需求

... ... @@ -117,6 +117,58 @@ exports.couponSend = (req, res, next) => {
}).catch(next);
};
/**
* 分享领券活动模板领券接口
* @param req
* @param res
* @param next
* @returns {*}
*/
exports.webShareCouponSend = (req, res, next) => {
let uid = req.user.uid,
app = req.query.app || {},
activityId = req.query.activityId,
templateId = req.query.templateId;
let resultData = {
code: 403,
message: '参数错误',
data: ''
};
if (req.yoho.isApp || app.client_type === 'miniapp') {
if (app.app_version && app.client_type && app.session_key && app.uid) {
// 小程序调接口获取 session 的方式不同,H5 嵌小程序,client_type 标记为 h5
let isMiniApp = app.client_type === 'miniapp';
uid = {
toString: () => {
return _.parseInt(app.uid);
},
sessionKey: app.session_key,
appVersion: isMiniApp ? _.get(global, 'yoho.config.appVersion') : app.app_version,
appSessionType: app.client_type
};
}
}
console.log('UID:', uid, 'APP:', app, activityId, templateId);
if (uid === '' || uid === 0 || !parseInt(activityId, 10) || !parseInt(templateId, 10)) {
return res.jsonp(resultData);
}
req.ctx(model).couponSendWebShare(activityId, templateId, uid).then(result => {
res.set({
'Cache-Control': 'no-cache',
Pragma: 'no-cache',
Expires: (new Date(1900, 0, 1, 0, 0, 0, 0)).toUTCString()
});
res.jsonp(result);
}).catch(next);
};
exports.redenvelope = (req, res, next) => {
let token = req.query.token || '',
uid = req.user.uid,
... ...
... ... @@ -447,7 +447,6 @@ class featureModel extends global.yoho.BaseModel {
}
if (componentType === 'share') { // 分享模板
console.log(data);
f.component[0].webShare = data.webShare;
if (f.component[0].share_template_id) {
f.component[0].webShare.url =
... ... @@ -603,6 +602,31 @@ class featureModel extends global.yoho.BaseModel {
return result;
});
}
/**
* 领取活动模板分享的优惠券
* @param activityId
* @param templateId
* @param uid
*/
couponSendWebShare(activityId, templateId, uid) {
let data = {
method: 'app.coupons.sendNewUserShareCoupon',
uid: uid,
activityId: activityId,
templateId: templateId
};
return this.get({data}).then(result => {
if (!result) {
result.code = 404;
result.message = '出错啦~';
}
return result;
});
}
getTplPraiseInfo(ids, udid) {
return this.get({
data: {
... ...
... ... @@ -284,6 +284,7 @@ router.get('/feature/:code.html', feature.index);
router.get('/featuresidebar/:code.html', feature.sidebar);
router.get('/featurebottombar/:code.html', feature.bottombar);
router.get('/feature/couponSend', feature.couponSend); // 获取优惠券
router.get('/feature/webShareCouponSend', feature.webShareCouponSend); // 活动模板分享领取优惠券, 不用分券类型,不用传券ID
router.get('/tide/category', auth, tide.category); // 潮品推介
router.get('/tide/shop', auth, tide.shop); // 潮牌推介
router.get('/feature/redenvelope', feature.redenvelope); // 获取红包
... ...
<!--活动模板分享领券组件-->
<div class="web-share">
{{log .}}
{{#webShare}}
... ... @@ -8,7 +9,13 @@
<div class="web-share-tips-wrapper">
<div class="web-share-tips-container">
<div class="web-share-tips">
<p class="title">提示</p>
<p class="desc"></p>
<div class="web-share-buttons-container">
<a href="javascript:void(0)" class="button-ok">确 定</a>
<a href='https://union.yoho.cn/union/app-downloads.html' class="button-download">打开有货APP</a>
</div>
</div>
</div>
</div>
<div class="web-share-img-wrapper"></div>
... ...
... ... @@ -79,53 +79,46 @@ class Reg {
* @param next
*/
regSuccessPage(req, res, next) {
let {activityId = 5475, templateId = 6047} = req.query;
let regSuccessCouponInfo = {
totalPrice: 499,
normalCoupon: [
{
price: 19,
condition: '无限制',
name: '新人专享无门槛现金券',
desc: '领券当日开始3日内有效'
},
{
price: 150,
condition: '满499可用',
name: '新人专享商城购物券',
desc: '领券当日开始3日内有效'
},
{
price: 130,
condition: '满499可用',
name: '新人专享UFO购物券',
desc: '领券当日开始3日内有效'
}
],
shareCoupon: [
{
price: 130,
condition: '满499可用',
name: '新人专享分享券',
desc: '领券当日开始3日内有效'
}
],
boughtCoupon: [
{
price: 30,
condition: '满299可用',
name: '支付有礼商城购物券',
desc: '领券当日开始3日内有效'
}
]
};
if ((global.yoho.isDev || global.yoho.isTest) && (!req.query.activityId || !req.query.templateId)) {
activityId = 528;
templateId = 4166;
}
req.ctx(RegServiceModel).regSuccessPrize(activityId, templateId).then(result => {
// console.log(result);
let regSuccessCouponInfo = {
activityId: activityId,
templateId: templateId,
totalPrice: 0,
normalCoupon: [],
shareCoupon: [],
boughtCoupon: []
};
_.each(result.data, (couponData) => {
// console.log('VALUE', couponData);
_.each(couponData.coupons, (coupon) => {
if (couponData.name === 'NEW_USER_REGISTER') {
regSuccessCouponInfo.totalPrice += parseInt(coupon.amount, 10) || 0;
regSuccessCouponInfo.normalCoupon.push(coupon);
} else if (couponData.name === 'NEW_USER_SHARE') {
regSuccessCouponInfo.shareCoupon.push(coupon);
} else if (couponData.name === 'ORDER_BUY') {
regSuccessCouponInfo.boughtCoupon.push(coupon);
}
res.render('reg/reg-success-prize', {
module: 'passport',
page: 'reg-success-prize',
localCss: true,
width750: true,
regSuccessCouponInfo: regSuccessCouponInfo
});
});
res.render('reg/reg-success-prize', {
module: 'passport',
page: 'reg-success-prize',
localCss: true,
width750: true,
regSuccessCouponInfo: regSuccessCouponInfo
});
}).catch(next);
}
... ...
... ... @@ -140,6 +140,19 @@ class RegServiceModel extends global.yoho.BaseModel {
}
});
}
/**
* 注册成功领券信息
*/
regSuccessPrize(activityId, templateId) {
return this.get({
data: {
method: 'app.coupons.newUserlists',
activityId,
templateId
}
});
}
}
module.exports = RegServiceModel;
... ...
... ... @@ -15,16 +15,18 @@
<li>
<div class="coupon-info">
<div class="coupon-left">
<p class="coupon-price">{{price}}</p>
<p class="coupon-condition">{{condition}}</p>
<p class="coupon-price">{{amount}}</p>
<p class="coupon-condition">{{useRuleText}}</p>
</div>
<div class="coupon-right">
<p class="coupon-name">{{name}}</p>
<p class="coupon-desc">{{desc}}</p>
<p class="coupon-name">{{couponName}}</p>
<p class="coupon-desc">{{valiPeriodText}}</p>
</div>
<a class="coupon-button">去使用</a>
{{#if isUfo}}
<a class="coupon-button" href='//m.yohobuy.com/?openby:yohobuy={"action":"go.ufo","params":{"pagename":"home"}}'>去使用</a>
{{else}}
<a class="coupon-button" href='//m.yohobuy.com/?openby:yohobuy={"action":"go.home","params":{"gender":"1","channel":"2"}}'>去使用</a>
{{/if}}
</div>
</li>
{{/each}}
... ... @@ -38,14 +40,14 @@
<li>
<div class="coupon-info">
<div class="coupon-left">
<p class="coupon-price">{{price}}</p>
<p class="coupon-condition">{{condition}}</p>
<p class="coupon-price">{{amount}}</p>
<p class="coupon-condition">{{useRuleText}}</p>
</div>
<div class="coupon-right">
<p class="coupon-name">{{name}}</p>
<p class="coupon-desc">{{desc}}</p>
<p class="coupon-name">{{couponName}}</p>
<p class="coupon-desc">{{valiPeriodText}}</p>
</div>
<a class="coupon-button">去分享</a>
<a class="coupon-button" href='//m.yohobuy.com/activity/feature/{{../activityId}}.html?openby:yohobuy={"action":"go.h5","params":{"url":"http://m.yohobuy.com/activity/feature/{{../activityId}}.html"}}'>去分享</a>
</div>
</li>
{{/each}}
... ... @@ -58,12 +60,12 @@
<li>
<div class="coupon-info">
<div class="coupon-left">
<p class="coupon-price">{{price}}</p>
<p class="coupon-condition">{{condition}}</p>
<p class="coupon-price">{{amount}}</p>
<p class="coupon-condition">{{useRuleText}}</p>
</div>
<div class="coupon-right">
<p class="coupon-name">{{name}}</p>
<p class="coupon-desc">{{desc}}</p>
<p class="coupon-name">{{couponName}}</p>
<p class="coupon-desc">{{valiPeriodText}}</p>
</div>
</div>
</li>
... ... @@ -73,7 +75,7 @@
</div>
</div>
<div class="download-button">
<a id="btn_goto_share" href="//m.yohobuy.com" target="_blank">
<a id="btn_goto_share" href='http://m.yohobuy.com/activity/feature/{{activityId}}.html?openby:yohobuy={"action":"go.h5","params":{"url":"http://m.yohobuy.com/activity/feature/{{activityId}}.html"}}' target="_blank">
<p>去逛逛新人专享</p>
</a>
<a id="btn_goto_download" style="display: none" href="https://union.yoho.cn/union/app-downloads.html" target="_blank">
... ...
... ... @@ -23,6 +23,7 @@ let app_info = {
};
let appInterface = null;
// 分享领券相关START------------------------------------------------------------
// 用于判断app版本
let versionCompare = {
toVersion: function(str = '') {
... ... @@ -69,11 +70,35 @@ let versionCompare = {
}
};
function getParams() {
let app_uid = cookie.get('app_uid') || qs.uid || '0';
let app_session_key = cookie.get('app_session_key') || qs.session_key || '';
function closeWebShareTips() { // 关闭提示框
$('.web-share-tips-wrapper').removeClass('show');
$('.web-share-tips-wrapper .desc').text('');
}
function showWebShareTips(text) { // 显示提示框
$('.web-share-tips-wrapper').addClass('show');
$('.web-share-tips-wrapper .desc').text(text);
}
function showShare() {
$('.web-share-img-wrapper').addClass('show');
}
function hideShare() {
$('.web-share-img-wrapper').removeClass('show');
}
function getParams() { // 获取登录相关信息
let app_uid = cookie.get('app_uid') || qs.uid || app_info.uid;
let app_session_key = cookie.get('app_session_key') || qs.session_key || app_info.session_key;
let app_version = cookie.get('app_version') || qs.app_version || '';
let app_client_type = cookie.get('app_client_type') || qs.app_version || '';
let app_client_type = cookie.get('app_client_type') || qs.app_client_type || '';
if (isApp) {
if (/android/i.test(navigator.userAgent)) {
app_client_type = 'android';
}
}
app_info = {
uid: app_uid,
... ... @@ -85,12 +110,78 @@ function getParams() {
console.log(app_info);
}
function checkShare() {
versionCompare.version('6.9.7', '6.9.8');
alert('ok');
function getCoupon() { // 分享成功后领券
if (parseInt(app_info.uid, 10)) {
let activityInfo = JSON.parse($('.activity-plan').val());
let data = {
activityId: activityInfo[0].activityId,
templateId: activityInfo[0].templateId,
app: app_info
};
console.log(data);
$.ajax({
url: '//m.yohobuy.com/activity/feature/webShareCouponSend',
type: 'get',
dataType: 'jsonp',
data: data,
success: function(result) {
console.log(result);
if (result.code === 200) {
showWebShareTips(result.message);
} else if (result.code === 401) {
showWebShareTips('您已领取过该优惠券');
} else if (result.code === 402) {
showWebShareTips('登录信息异常');
} else {
showWebShareTips(result.message);
}
hideShare();
}
});
} else {
showWebShareTips('您还没登录哦');
}
}
function goLogin() {
function checkShare(shareData) {
console.log(shareData);
if (isApp) {
let newShare = false;
let app_vercode = cookie.get('app_vercode');
let app_version = cookie.get('app_version') || qs.app_version || '';
if (versionCompare.version(app_version, '6.9.5') >= 0 || app_vercode) {
newShare = true;
}
window.successShare = function() {
getCoupon();
};
appInterface.triggerEvent(
function() {},
function() {},
{
method: 'go.showshareaction',
arguments: shareData
}
);
if (!newShare) {
setTimeout(getCoupon, 5000);
}
} else {
showShare();
if (isWechatMiniProgram) {
setTimeout(getCoupon, 6000);
}
}
}
function goLogin(shareData) { // 跳转登录判断
if (isApp) {
let uidParams = {
method: 'get.uid'
... ... @@ -104,9 +195,10 @@ function goLogin() {
yo_sdk.goLogin();
} else {
app_info.uid = uid;
appInterface.triggerEvent(function(sid) {
app_info.session_key = sid;
checkShare();
checkShare(shareData);
}, function() {}, sessionIdParams);
}
}, function() {}, uidParams);
... ... @@ -115,41 +207,60 @@ function goLogin() {
}
}
function initWebShareButtons(env = '') {
function initWebShareButtons(env = '') { // 初始化分享按钮事件
$('.web-share-button').each(function() {
let webShareButton = $(this);
$(this).on('click', function() {
if (!env) {
return alert('请在微信中打开');
showWebShareTips('请在微信中打开');
return;
}
getParams();
let webShareData = {
title: webShareButton.data('stitle'),
desc: webShareButton.data('sdesc'),
imgUrl: webShareButton.data('spic'),
link: webShareButton.data('surl').replace('https://activity.yoho.cn', 'http://m.yohobuy.com/activity')
};
if (isApp) {
Object.assign(webShareData, {
hideType: ['4', '5', '6', '7', '8', '9'],
isCareCallBack: '1'
});
}
if (parseInt(app_info.uid, 10)) {
let webShareData = {
title: webShareButton.data('stitle'),
desc: webShareButton.data('sdesc'),
imgUrl: webShareButton.data('spic'),
link: webShareButton.data('surl')
};
if (isApp) {
Object.assign(webShareData, {
hideType: ['4', '5', '6', '7', '8', '9'],
isCareCallBack: '1'
});
}
console.log(webShareData);
checkShare(webShareData);
} else {
goLogin();
goLogin(webShareData);
}
});
});
$('.web-share-img-wrapper').on('click', hideShare);
}
function initWxShare() {
let shareData = {
title: $('#shareTitle').val(),
imgUrl: $('#shareImg').val(),
desc: $('#shareDesc').val(),
link: $('#shareLink').val(),
success: function() {
setTimeout(getCoupon, 500);
}
};
yo_sdk.wxShare(shareData);
}
// 分享领券模板功能初始化
function initWebShare() {
getParams();
console.log(isApp);
$('.web-share-buttons-container .button-ok').on('click', closeWebShareTips);
if (isApp) {
document.addEventListener('deviceready', function() {
appInterface = window.yohoInterface;
... ... @@ -158,14 +269,18 @@ function initWebShare() {
}
});
} else if (isWechatMiniProgram) {
$('.web-share-buttons-container .button-download').hide();
initWebShareButtons('miniprogram');
} else if (isWechat) {
initWxShare();
initWebShareButtons('wechat');
} else {
initWebShareButtons();
}
}
// 分享领券相关END------------------------------------------------------------
function swiperInit() {
$('.swiper-container').each(function() {
let opt = {
... ...
... ... @@ -17,7 +17,7 @@ const jumpAction = ['go.productDetail', 'go.list', 'go.h5', 'go.shop', 'go.pooll
class LinkHandle {
constructor() {
$(document).delegate('a:not(.yoho-coin, .yoho-conpon)', 'click', event => {
$(document).delegate('a:not(.yoho-coin, .yoho-conpon, .web-share-button, .button-ok)', 'click', event => {
let $currentTarget = $(event.currentTarget);
let href = $currentTarget.attr('href');
... ...
require('scss/passport/reg-success-prize.page.scss');
const $ = require('yoho-jquery');
function hideDownloadBar() {
$('#top-downloadbar').hide();
}
function checkEnviroment() {
if (!/yohobuy/i.test(navigator.userAgent)) {
$('#btn_goto_download').show();
$('.coupon-button').each(function() {
let url = $(this).attr('href');
let newUrl = url.replace(/\?openby:yohobuy=\{\S*\s*\}/, '');
$(this).attr('href', newUrl);
});
}
}
$(document).ready(function() {
hideDownloadBar();
checkEnviroment();
});
... ...
... ... @@ -34,13 +34,71 @@
.web-share-tips {
position: relative;
margin: 38px auto;
width: 540px;
height: 324px;
width: 460.8px;
background-color: #fff;
border-radius: 10px;
color: #444;
}
.web-share-tips .title {
font-size: 29px;
line-height: 40.96px;
color: #d0021b;
text-align: center;
padding: 34.1px 51.2px 0 51.2px;
}
.web-share-tips .desc {
min-height: 39.25px;
font-size: 24px;
line-height: 39px;
padding: 14px 51.2px 34.1px 51.2px;
text-align: center;
}
.web-share-tips .web-share-buttons-container {
width: 100%;
height: 75px;
display: flex;
flex-direction: row;
flex: 1;
border-top: 1px solid #e0e0e0;
}
.web-share-tips .web-share-buttons-container a {
width: 100%;
height: 100%;
text-align: center;
line-height: 75px;
font-size: 29px;
text-decoration: none;
color: #444;
}
.web-share-tips .web-share-buttons-container .button-download {
border-left: 1px solid #e0e0e0;
color: #d0021b;
}
}
&.show {
display: block;
}
}
.web-share-img-wrapper {
display: none;
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
background-color: rgba(0, 0, 0, 0.7);
z-index: 30;
background-image: url("img/activity/feature/share.png");
background-size: contain;
background-position: 0 50%;
background-repeat: no-repeat;
&.show {
display: block;
... ...