Authored by 郭成尧

buynow-gift-card

... ... @@ -10,6 +10,7 @@ const BuyNowModel = require('../models/buy-now-model');
const addressModel = require('../models/address');
const userModel = require('../models/user');
const orderModel = require('../models/order');
const shoppingAPI = require('../models/shopping');
const utils = '../../../utils';
const paymentProcess = require(`${utils}/payment-process`);
const crypto = global.yoho.crypto;
... ... @@ -30,6 +31,7 @@ class BuyNowController {
*/
orderEnsure(req, res, next) {
let orderInfo;
let uid = req.user.uid;
try {
orderInfo = JSON.parse(req.cookies.buynow_info);
... ... @@ -51,30 +53,35 @@ class BuyNowController {
}
co(function * () {
let result = yield req.ctx(BuyNowModel).payment({
uid: req.user.uid,
product_sku: product_sku,
sku_type: req.query.sku_type,
buy_number: buy_number,
yoho_coin_mode: parseInt(orderInfo.use_yoho_coin, 10) > 0 ? 1 : 0
});
let computeData = yield req.ctx(BuyNowModel).compute({
uid: req.user.uid,
product_sku: product_sku,
sku_type: req.query.sku_type,
buy_number: buy_number,
payment_type: orderInfo.payment_type,
delivery_way: orderInfo.delivery_way,
use_yoho_coin: parseInt(orderInfo.use_yoho_coin, 10),
coupon_code: orderInfo.coupon_code,
promotion_code: orderInfo.promotion_code
});
let validCouponCount = yield req.ctx(BuyNowModel).countUsableCoupon({
uid: req.user.uid,
product_sku: req.query.product_sku,
sku_type: req.query.sku_type,
buy_number: buy_number
});
let [result, computeData, validCouponCount, validGiftCardCount] = yield Promise.all([
req.ctx(BuyNowModel).payment({
uid: uid,
product_sku: product_sku,
sku_type: req.query.sku_type,
buy_number: buy_number,
yoho_coin_mode: parseInt(orderInfo.use_yoho_coin, 10) > 0 ? 1 : 0
}),
req.ctx(BuyNowModel).compute({
uid: uid,
product_sku: product_sku,
sku_type: req.query.sku_type,
buy_number: buy_number,
payment_type: orderInfo.payment_type,
delivery_way: orderInfo.delivery_way,
use_yoho_coin: parseInt(orderInfo.use_yoho_coin, 10),
coupon_code: orderInfo.coupon_code,
gift_card_code: orderInfo.gift_card_code,
promotion_code: orderInfo.promotion_code
}),
req.ctx(BuyNowModel).countUsableCoupon({
uid: uid,
product_sku: req.query.product_sku,
sku_type: req.query.sku_type,
buy_number: buy_number
}),
shoppingAPI.countUsableGiftCard(uid) // 可用礼品卡数量
]);
let headerData = headerModel.setNav({
navTitle: '确认订单',
navBtn: false
... ... @@ -104,7 +111,11 @@ class BuyNowController {
buy_number: buy_number
}),
isOrdinaryCart: true,
choseGiftCard: helpers.urlFormat('/cart/index/buynow/selectGiftcard')
choseGiftCard: helpers.urlFormat('/cart/index/buynow/selectGiftcard'),
giftCards: paymentProcess.handleGiftCards({
validGiftCardCount: _.get(validGiftCardCount, 'data.count', 0),
orderCompute: computeData.data
})
}
);
... ... @@ -116,7 +127,8 @@ class BuyNowController {
width750: true,
localCss: true,
product_sku: product_sku,
orderEnsure: orderEnsure
orderEnsure: orderEnsure,
userMobile: _.get(orderEnsure, 'phoneNum', '')
});
})().catch(next);
... ... @@ -156,8 +168,12 @@ class BuyNowController {
*/
orderSub(req, res, next) {
let uid = req.user.uid;
let udid = req.sessionID || 'yoho';
let verifyCode = req.body.verifyCode || null;
let params = {
uid: uid,
udid: udid,
product_sku: req.body.product_sku,
sku_type: req.body.sku_type,
buy_number: req.body.buy_number,
... ... @@ -210,6 +226,24 @@ class BuyNowController {
}
co(function * () {
// 使用礼品卡,发送验证码
if (params.gift_card_code) {
if (!verifyCode) {
yield orderModel.giftCardSendSms(uid);
return res.json({
code: 411
});
} else {
let verifyResult = yield orderModel.validRegCode({
uid, verifyCode, udid
});
if (verifyResult.code !== 200) {
return res.json(verifyResult);
}
}
}
let result = yield req.ctx(BuyNowModel).submit(params);
// 提交成功清除Cookie
... ... @@ -322,20 +356,51 @@ class BuyNowController {
/**
* 选择礼品卡页面
*/
selectGiftcard(req, res) {
selectGiftcard(req, res, next) {
let headerData = headerModel.setNav({
navTitle: '礼品卡',
navBtn: false
});
let uid = req.user.uid;
res.render('select-giftcard', {
module: 'cart',
page: 'buynow-select-giftcard',
title: '礼品卡',
pageHeader: headerData,
pageFooter: false,
localCss: true
});
co(function* () {
let usable_giftCards = []; // 可用礼品卡列表
let sureActice = false; // 确认按钮状态
let giftCardsData = yield shoppingAPI.listGiftCard(uid);
let usableGiftCardsOrigin = _.get(giftCardsData, 'data.usable_giftCards', false);
if (usableGiftCardsOrigin) {
let orderInfo;
try {
orderInfo = JSON.parse(req.cookies.buynow_info);
} catch (e) {
logger.info(`orderEnsure: get buynow_info from cookie error:${JSON.stringify(e)}`);
orderInfo = {};
res.clearCookie('buynow_info', actCkOpthn);
}
let handleResult = paymentProcess.handleGiftCardsRender(usableGiftCardsOrigin,
_.get(orderInfo, 'gift_card_code'));
usable_giftCards = handleResult.giftCards;
sureActice = handleResult.sureActice;
}
res.render('select-giftcard', {
module: 'cart',
page: 'buynow-select-giftcard',
title: '礼品卡',
pageHeader: _.assign(headerData, {
useGiftCard: true
}),
pageFooter: false,
localCss: true,
width750: true,
usable_giftCards: usable_giftCards,
sureActice: sureActice
});
})().catch(next);
}
/**
... ...
... ... @@ -126,6 +126,7 @@ class BuyNowModel extends global.yoho.BaseModel {
let finalParams = {
method: 'app.Buynow.submit',
uid: params.uid,
udid: params.udid,
product_sku: params.product_sku,
sku_type: params.sku_type || 'I',
buy_number: params.buy_number,
... ...
... ... @@ -128,17 +128,17 @@
</li>
{{!-- 礼品卡 --}}
{{#if isOrdinaryCart}}
{{#if giftCards}}
<li class="gift-card">
<a href="{{choseGiftCard}}">
<span class="title">礼品卡</span>
{{# giftCard}}
<span class="count">{{#if selectedAmount}}已选{{selectedAmount}}{{^}}{{count}}张可用{{/if}}</span>
<span class="coupon-info pull-right{{#isEqualOr info '无可用'}} no-can-use{{/isEqualOr}}">
{{info}}<i class="iconfont">&#xe614;</i>
</span>
{{/giftCard}}
</a>
<span class="title">礼品卡</span>
{{# giftCards}}
<span class="count">{{leftInfo}}</span>
<span class="coupon-info pull-right">
{{rightInfo}}<i class="iconfont">&#xe614;</i>
</span>
{{/giftCards}}
</a>
</li>
{{/if}}
... ...
... ... @@ -35,7 +35,7 @@ let $invoice = $('.invoice'),
delivery = 0,
$noPrintPrice = $('.no-print-price');
new OrderEnsure(order);
const orderEnsure = new OrderEnsure(order);
require('common');
... ... @@ -139,7 +139,11 @@ function orderCompute() {
});
}
function submitOrder() {
/**
* 提交订单
* @param {短信验证码} verifyCode
*/
function submitOrder(verifyCode) {
let msg = $('#msg').find('input').val() || orderInfo('msg');
if (isSubmiting) {
... ... @@ -167,6 +171,7 @@ function submitOrder() {
payment_type: orderInfo('payment_type'), // 支付方式
coupon_code: orderInfo('coupon_code'),
gift_card_code: orderInfo('gift_card_code'),
verifyCode: verifyCode || null,
use_yoho_coin: orderInfo('use_yoho_coin')
};
... ... @@ -233,6 +238,10 @@ function submitOrder() {
window.location.href = url;
} else if (res.code === 409) {
richTip.show(res.message, res.buttons);
} else if (res.code === 411) {
orderEnsure.showSafeCheckDialog({
message: res.message
}, submitOrder);
} else if (res.message) {
tip.show(res.message);
}
... ...