Authored by 张丽霞

分享领券h5业务逻辑

'use strict';
const mRoot = '../models';
const library = '../../../library';
// const couponModel = require(`${mRoot}/coupon`); // 领取优惠券 model
// const cookie = require('../../../utils/cookie');
const couponModel = require(`${mRoot}/coupon`); // 领取优惠券 model
const log = require(`${library}/logger`);
exports.index = (req, res) => {
var renderData = {
module: 'coupon',
page: 'index'
},
ordercode = req.query.ordercode,
uid = req.query.uid,
mobile = req.query.mobile;
// var renderData = {
// layout: false, // 原有活动移植,忽略公有模板
// module: 'coupon/index',
// title: 'YOHO!BUY有货微信分享',
// isApp: req.isApp,
// appUrl: 'http://www.yohoshow.com/about/index/yohobuyqr', // APP 下载地址
// };
// var uid = cookie.getUid(req);
// var couponId = res.app.locals.proEnv ? '22184' : '13061';
// couponModel({
// uid: uid,
// couponId: couponId,
// }).then((couponData) => {
// var couponInfo = JSON.parse(couponData[0]);
// if (couponData.length && couponInfo.code === 200) {
// //领券成功
// console.log('领券成功');
// }
// }).then((couponData) => {
// var couponInfo = JSON.parse(couponData[0]);
// if (couponInfo.code === 401) {
// renderData.geted = true;
// }
// if (couponInfo.code !== 401 && couponInfo.code !== 200) {
// renderData.fail = true;
// }
// res.render('coupon/index', renderData); // 渲染页面
// }).catch((err) => {
// errUtil.webError(err, res); // 抓取 Promise 链的错误
// });
res.render('coupon', {
renderData.uid = uid;
renderData.mobile = mobile;
renderData.ordercode = ordercode;
// 测试假数据
// res.render('coupon', renderData); // 渲染页面
couponModel.getPageInfo({
ordercode: ordercode,
uid: uid
}).then((couponData) => {
if (couponData.code === 200) {
// 获取信息成功
couponData.ordercode = ordercode;
}
res.render('coupon', {
result: couponData,
module: 'coupon',
page: 'index',
title: couponData.title
});
}).catch((err) => {
log.error('频道页面渲染错误:' + JSON.stringify(err));
});
};
exports.getCoupon = (req, res) => {
var renderData = {
module: 'coupon',
page: 'index'
};
var ordercode = req.query.ordercode,
mobile = req.query.mobile;
renderData.mobile = mobile;
renderData.ordercode = ordercode;
// //测试假数据
// res.render('coupon', renderData); // 渲染页面
couponModel.getCoupon({
ordercode: ordercode,
mobile: mobile
}).then((couponData) => {
if (couponData.code === 200) {
// 获取信息成功
couponData.ordercode = ordercode;
}
console.log(couponData);
res.json({
result: couponData
});
}).catch((err) => {
log.error('频道页面渲染错误:' + JSON.stringify(err));
});
};
exports.verify = (req, res) => {
var renderData = {
module: 'coupon',
page: 'index'
};
var ordercode = req.query.ordercode,
mobile = req.query.mobile,
identifycode = req.query.identifycode;
renderData.mobile = mobile;
renderData.ordercode = ordercode;
renderData.identifycode = identifycode;
// //测试假数据
// res.render('coupon', renderData); // 渲染页面
couponModel.registerAndSendCoupon({
ordercode: ordercode,
mobile: mobile,
identifycode: identifycode
}).then((couponData) => {
if (couponData.code === 200) {
// 获取信息成功
couponData.ordercode = ordercode;
}
console.log(couponData);
res.json({
result: couponData
});
}).catch((err) => {
log.error('频道页面渲染错误:' + JSON.stringify(err));
});
};
... ...
... ... @@ -23,7 +23,7 @@ app.engine('.hbs', hbs({
defaultLayout: 'layout',
layoutsDir: doraemon,
partialsDir: ['./views/partial', `${doraemon}/partial`],
helpers: 'helpers'
helpers: require(`${global.library}/helpers`)
}));
// router
... ...
var API = require('../../../library/api').API;
var api = new API();
const library = '../../../library';
const sign = require(`${library}/sign`);
/**
* 分享页面基础参数
* @param {object} sizeInfo [接口原始数据]
* @return {object} [description]
*/
const getPageInfo = (pageInfo) => {
var dest = {};
// var Http = require('../../../library/api');
dest.code = pageInfo.code;
dest.title = pageInfo.data.h5Title;
dest.activityDesc = pageInfo.data.activityDesc;
dest.couponPic = pageInfo.data.couponPic;
if (pageInfo.data.flag === 1) {
dest.couponGoing = true;
dest.bgImg = pageInfo.data.activityNormalPic;
} else if (pageInfo.data.flag !== 1) {
dest.bgImg = pageInfo.data.activityEndPic;
dest.ended = true;
}
dest.message = pageInfo.data.returnMsg;
// var http = new Http();
// 清空变量,释放内存
pageInfo = {};
return dest;
};
// module.exports = (data) => {
// var defaultParam = {
// method: 'app.promotion.getCoupon'
// },
// requestList = [],
// requestData = _.cloneDeep(data);
const getUserStatus = (param) => {
var dest = {};
// // 处理完成后,发给后端
// data = Object.assign(defaultParam, data);
// return api.get('/', data); // 所有数据返回一个 Promise,方便 Promise.all 调用
dest.code = param.code;
dest.title = param.data.h5Title;
dest.returnCode = param.data.returnCode;
if (param.data.returnCode === 0) {
dest.geted = true;
} else if (param.data.returnCode === 1) {
dest.wrongNumb = true;
} else if (param.data.returnCode === 2) {
dest.newUser = true;
} else {
dest.ended = true;
}
dest.message = param.data.returnMsg;
// var defaultParam = {
// method: 'app.promotion.getCoupon'
// },
// requestList = [],
// requestData = _.cloneDeep(data);
// 清空变量,释放内存
param = {};
return dest;
};
// // 根据券号取优惠券
// if (data.couponId) {
// return http.post(defaultParam,data);
// };
// // 处理完成后,发给后端
// data = Object.assign(defaultParam, data);
// return http.get('/', data); // 所有数据返回一个 Promise,方便 Promise.all 调用
// };
/**
* 获取分享页面数据
*/
exports.getPageInfo = (data) => {
var defaultParam = {
method: 'app.activity.getInfoOfOrderShare'
},
// 处理完成后,发给后端
infoData = Object.assign(defaultParam, data);
return api.get('', sign.apiSign(infoData)).then(result => {
return getPageInfo(result);
}); // 所有数据返回一个 Promise,方便 Promise.all 调用
};
/**
* 输入手机号领券,新用户返回验证码
*/
exports.getCoupon = (data) => {
var defaultParam = {
method: 'wap.order.drawOrderShareCoupon'
},
// 处理完成后,发给后端
phoneData = Object.assign(defaultParam, data);
return api.get('', sign.apiSign(phoneData)).then(result => {
return getUserStatus(result);
}); // 所有数据返回一个 Promise,方便 Promise.all 调用
};
/**
* 验证注册码进行注册并发券
*/
exports.registerAndSendCoupon = (data) => {
var defaultParam = {
method: 'wap.order.registerAndSendCoupon'
},
// 处理完成后,发给后端
verifyData = Object.assign(defaultParam, data);
return api.get('', sign.apiSign(verifyData)).then(result => {
return getUserStatus(result);
}); // 所有数据返回一个 Promise,方便 Promise.all 调用
};
... ...
... ... @@ -15,4 +15,8 @@ const coupon = require(`${cRoot}/coupon`);
router.get('/index', coupon.index);
router.get('/phone', coupon.getCoupon);
router.get('/verify', coupon.verify);
module.exports = router;
... ...
{{# result}}
<div class="receive-coupon-page">
<div class="bg-contain">
<img src="{{image bgImg 640 1136}}">
</div>
<p class="hidden" id="orderCode">{{ordercode}}</p>
<div class="page">
<div class="coupon-header">
<div class="gain-coupon-centent hidden">
<div class="coupon">
<img src={{couponPic}}>
</div>
<p class="phone" id="mobile"></p>
<p>登录Yoho!Buy有货客户端即可使用</p>
<div class="use-coupon-btn">
马上去Yoho!Buy有货使用
</div>
<span class="description">活动说明&#xe604;</span>
</div>
<div class="coupon-centent">
<div class="title">
<img src="../img/coupon/coupon-title.png">
</div>
<div class="input-content hidden">
<div class="input-content phone-input-content">
<input id="phone" type="text" placeholder="请输入手机号" maxlength="11"/>
<div>获取红包</div>
</div>
<div class="input-content">
<div class="input-content vertify-input-content hidden">
<input id="verification" type="text" placeholder="请输入验证码" maxlength="4"/>
<div>验证领红包</div>
</div>
... ... @@ -21,38 +37,23 @@
<span></span>
</div>
</div>
</div>
<div class="tip-wrap hidden">
<div class="tip fail">
<div class="header">
</div>
<div class="gain-coupon-centent hidden">
<div class="coupon">
<!-- <img src="{{img}}"> -->
<img src="../img/coupon/coupon.png">
<div class="title">
{{message}}
<!-- 优惠券已领光 -->
</div>
<p class="phone" id="mobile"></p>
<p>登录Yoho!Buy有货客户端即可使用</p>
<div class="use-coupon-btn">
马上去Yoho!Buy有货使用
<div class="logo">
</div>
<span class="description">活动说明&#xe604;</span>
</div>
</div>
{{#if fail}}
<div class="tip-wrap">
<div class="tip fail">
<div class="header">
</div>
<div class="title">
本次活动已结束
<!-- 优惠券已领光 -->
</div>
<div class="logo">
</div>
</div>
</div>
{{/if}}
<div class="messages hidden" id="dialog">
<div class="content"></div>
</div>
... ... @@ -71,4 +72,5 @@
</div>
</div>
\ No newline at end of file
</div>
{{/result}}
... ...
... ... @@ -12,9 +12,15 @@ const isTest = process.env.NODE_ENV === 'test';
module.exports = {
port: 6001,
siteUrl: 'http://m.yohobuy.com',
// domains: {
// api: 'http://testapi.yoho.cn:28078/', // http://192.168.102.205:8080/gateway
// service: 'http://testservice.yoho.cn:28077/'
// },
domains: {
api: 'http://testapi.yoho.cn:28078/', // http://192.168.102.205:8080/gateway
service: 'http://testservice.yoho.cn:28077/'
api: 'http://devapi.yoho.cn:58078/',
service: 'http://devservice.yoho.cn:58077/',
search: 'http://192.168.10.64:8080/yohosearch/'
},
useOneapm: false,
useCache: false,
... ...
var $ = require('yoho-jquery'),
num = 0,
phone,
reg,
time;
reg;
var orderCode = $('#orderCode').html();
$('#phone').bind('input propertychange', function() {
if ($(this).val().length === 11) {
... ... @@ -36,28 +36,38 @@ $('.input-content').on('click', '.verification-code', function() {
return;
}
$.ajax({
url: '/activity/cocacola/CocacolaController/sendSms',
url: '/coupon/phone',
data: {
mobile: $('#phone').val()
mobile: $('#phone').val(),
ordercode: orderCode
},
dataType: 'json',
success: function(data) {
if (data.code === 200) {
time = setInterval(function() {
num++;
if (num > 60) {
num = 0;
$('.input-content div').eq('0').addClass('verification-code').html('获取验证码');
clearInterval(time);
} else {
$('.input-content div').eq('0').removeClass('verification-code').html('重新发送' + (60 - num));
}
}, 1000);
if (data.result.code === 200) {
if (data.result.ended) {
$('.tip-wrap').removeClass('hidden');
$('.tip-wrap .title').html(data.result.message);
} else if (data.result.geted) {
$('.page .gain-coupon-centent').removeClass('hidden');
$('.page .coupon-centent').addClass('hidden');
} else if (data.result.newUser) {
$('.coupon-centent .phone-input-content').addClass('hidden');
$('.coupon-centent .vertify-input-content').removeClass('hidden');
} else if (data.result.wrongNumb) {
$('#dialog').removeClass('hidden');
$('.keep-out').removeClass('hidden');
$('#dialog .content').html('<p class="phone-error">手机号错误,请重新输入。<p>');
setTimeout(function() {
$('.messages').addClass('hidden');
$('.keep-out').addClass('hidden');
$('#dialog .content').html(' ');
}, 1400);
return;
}
} else {
$('#dialog').removeClass('hidden');
$('.keep-out').removeClass('hidden');
$('#dialog .content').html('<p class="phone-error">' + data.message + '<p>');
$('#dialog .content').html('<p class="phone-error">' + 网络错误 + '<p>');
setTimeout(function() {
$('.messages').addClass('hidden');
$('.keep-out').addClass('hidden');
... ... @@ -71,20 +81,39 @@ $('.input-content').on('click', '.get', function() {
$('.input-content div').eq('1').removeClass('get');
if ($(this).siblings('input').val().length === 4) {
$.ajax({
url: '/activity/cocacola/CocacolaController/validRegCodeAndSendCode',
url: '/coupon/verify',
data: {
code: $('#verification').val(),
identifycode: $('#verification').val(),
mobile: $('#phone').val(),
client_id: $.cookie('_yasvd')
ordercode: orderCode
},
dataType: 'json',
success: function(data) {
if (data.code === 200) {
location.href = 'gain.html?mobile=' + $('#phone').val();
if (data.result.code === 200) {
if (data.result.ended) {
$('.tip-wrap').removeClass('hidden');
$('.tip-wrap .title').html(data.result.message);
} else if (data.result.geted) {
$('.page .gain-coupon-centent').removeClass('hidden');
$('.page .coupon-centent').addClass('hidden');
} else if (data.result.newUser) {
$('.coupon-centent .phone-input-content').addClass('hidden');
$('.coupon-centent .vertify-input-content').removeClass('hidden');
} else if (data.result.wrongNumb) {
$('#dialog').removeClass('hidden');
$('.keep-out').removeClass('hidden');
$('#dialog .content').html('<p class="phone-error">手机号错误,请重新输入。<p>');
setTimeout(function() {
$('.messages').addClass('hidden');
$('.keep-out').addClass('hidden');
$('#dialog .content').html(' ');
}, 1400);
return;
}
} else {
$('#dialog').removeClass('hidden');
$('.keep-out').removeClass('hidden');
$('#dialog .content').html('<p class="phone-error">' + data.message + '<p>');
$('#dialog .content').html('<p class="phone-error">' + data.result.message + '<p>');
setTimeout(function() {
$('.messages').addClass('hidden');
$('.keep-out').addClass('hidden');
... ...
... ... @@ -5,11 +5,24 @@
font-size: 14px;
}
.bg-contain {
width: 100%;
height: 100%;
position: absolute;
img {
width: 100%;
height: auto;
}
}
.page {
width: 100%;
height: 100%;
padding-bottom: 60px;
background: #c4211a;
position: absolute;
top: 0;
bottom: 0;
}
.coupon-header {
width: 100%;
... ... @@ -20,8 +33,10 @@
.coupon-centent,
.gain-coupon-centent {
margin-top: 428px !important;
height: 520px;
margin: 0 30px;
margin-left: 30px;
margin-right: 30px;
background: #9d1a15;
}
... ... @@ -65,6 +80,7 @@
line-height: 88px;
}
.verification-code,
.get {
background: #fff;
color: #444;
... ... @@ -189,10 +205,11 @@
.activity-message h3 {
width: 100%;
height: 3.4rem;
padding-top: 0.6rem;
line-height: 3.4rem;
font-size: 1.2rem;
height: 40px;
margin-top: 40px;
margin-bottom: 10px;
line-height: 40px;
font-size: 32px;
text-align: center;
}
... ... @@ -201,7 +218,11 @@
height: auto;
overflow: hidden;
margin: 0 auto;
line-height: 2rem;
font-size: 26px;
line-height: 40px;
padding-left: 40px;
text-indent: -40px;
}
.messages {
... ...