Authored by 姜枫

merge

... ... @@ -63,11 +63,12 @@ exports.index = (req, res) => {
* @param {[object]} res
* @return {[type]}
*/
exports.breakCode = (req, res) => {
exports.breakingYards = (req, res) => {
let headerData = headerModel.setNavHeader('断码区');
let renderData = {
module: 'product',
page: 'break-code',
title: '断码区',
pageHeader: headerData,
pageFooter: true
};
... ... @@ -87,17 +88,17 @@ exports.breakCode = (req, res) => {
* @param {[object]} res
* @return {[type]}
*/
exports.special = (req, res) => {
exports.discount = (req, res) => {
let headerData = headerModel.setNavHeader('折扣专场');
let renderData = {
module: 'product',
page: 'special',
page: 'discount',
pageHeader: headerData,
pageFooter: true
};
saleModel.getSpecialData().then((result) => {
res.render('sale/special', Object.assign(renderData, result));
saleModel.getDiscountData().then((result) => {
res.render('sale/discount', Object.assign(renderData, result));
}).catch((err) => {
saleLogger(err, res);
});
... ... @@ -110,19 +111,19 @@ exports.special = (req, res) => {
* @param {[object]} res
* @return {[type]}
*/
exports.specialDetail = (req, res) => {
exports.discountDetail = (req, res) => {
let headerData = headerModel.setNavHeader();
let id = req.query.id;
let renderData = {
module: 'product',
page: 'special-detail',
page: 'discount-detail',
pageFooter: true
};
saleModel.getSpecialDetailData(id).then((result) => {
saleModel.getDiscountDetailData(id).then((result) => {
headerData.navTitle = result.title;
renderData.pageHeader = headerData;
res.render('sale/special-detail', Object.assign(renderData, result));
res.render('sale/discount-detail', Object.assign(renderData, result));
}).catch((err) => {
saleLogger(err, res);
});
... ... @@ -139,6 +140,7 @@ exports.vip = (req, res) => {
let renderData = {
module: 'product',
page: 'vip',
title: '会员专享',
pageHeader: headerData,
pageFooter: true
};
... ... @@ -179,7 +181,9 @@ exports.filter = (req, res) => {
*/
exports.search = (req, res) => {
let params = Object.assign({}, req.query);
let uid = 9239279 || req.user.uid || 0;
// uid = 9239279
let uid = req.user.uid || 0;
saleModel.getSearchData(params, uid).then((result) => {
let vipLevel = result[1].curLevel;
... ... @@ -187,7 +191,7 @@ exports.search = (req, res) => {
if (req.query.saleType === '2') {
vipObj = Object.assign({
saleVip: (req.query.saleType === '2' && (!uid || vipLevel === '1')),
saleVip: (req.query.saleType === '2' && (!uid || vipLevel === '0')),
vipLevel: vipLevel,
saleViplogin: vipLevel >= 1 ? true : false,
vipPrice1: vipLevel === '1',
... ...
... ... @@ -75,7 +75,7 @@ const processTime = (time) => {
* @param {[array]} list
* @return {[array]}
*/
const processSpecial = (list) => {
const processDiscount = (list) => {
const formatData = [];
let flag = true;
... ... @@ -88,7 +88,7 @@ const processSpecial = (list) => {
_.forEach(list, (data) => {
if (flag === true) {
data.specialUrl = `/product/specialDetail?id=${data.id}`;
data.specialUrl = `/product/sale/discount/detail?id=${data.id}`;
_.merge(data, processTime(data.leftTime));
}
... ... @@ -103,7 +103,7 @@ const processSpecial = (list) => {
* @param {[object]} params
* @return {[array]}
*/
const special = (params) => {
const discount = (params) => {
params = params || {};
return api.get('', sign.apiSign(Object.assign({
... ... @@ -307,13 +307,13 @@ exports.getBreakCodeData = (params) => {
* @param {[object]} params
* @return {[object]}
*/
exports.getSpecialData = (params) => {
const specialData = {};
exports.getDiscountData = (params) => {
const discountData = {};
return special(params).then((result) => {
return discount(params).then((result) => {
if (result && result.code === 200) {
specialData.data = processSpecial(result.data);
return specialData;
discountData.data = processDiscount(result.data);
return discountData;
} else {
logger.error('折扣专场专题列表返回 code 不是 200');
return {};
... ... @@ -327,16 +327,16 @@ exports.getSpecialData = (params) => {
* @param {[string]} id
* @return {[object]}
*/
exports.getSpecialDetailData = (id) => {
exports.getDiscountDetailData = (id) => {
let res = {};
let param = {
id: id
};
return special(param).then((result) => {
return discount(param).then((result) => {
if (result && result.code === 200) {
res = processSpecial(result.data);
console.log(res);
res = processDiscount(result.data);
return {
title: res[0].title,
activity: {
... ...
... ... @@ -22,10 +22,10 @@ router.get(/\/pro_([\d]+)_([\d]+)\/(.*)/, detail.index);
router.get('/detail/intro/:productskn', detail.intro);
router.get('/detail/preference/:productskn/:yhchannel/:brandId', detail.preference);
router.get('/sale', sale.index);
router.get('/sale/special', sale.special);
router.get('/sale/special/detail', sale.specialDetail);
router.get('/sale/breakCode', sale.breakCode);
router.get('/sale/index', sale.index);
router.get('/sale/discount', sale.discount);
router.get('/sale/discount/detail', sale.discountDetail);
router.get('/sale/breakingYards', sale.breakingYards);
router.get('/sale/vip', sale.vip);
router.get('/sale/search', sale.search);
... ...
<div class="sale-channel-page goods-page yoho-page">
<div class="discount-detail-page goods-page yoho-page">
{{> product/sale/banner}}
... ...
<div class="sale-special-page yoho-page">
<div class="discount-page yoho-page">
<ul class="special-list">
{{#each data}}
<li>
... ...
... ... @@ -11,7 +11,7 @@ const isTest = process.env.NODE_ENV === 'test';
module.exports = {
port: 6001,
siteUrl: 'http://m.yohobuy.com',
siteUrl: '//m.yohobuy.com',
domains: {
api: 'http://testapi.yoho.cn:28078/', // http://192.168.102.205:8080/gateway
service: 'http://testservice.yoho.cn:28077/'
... ...
... ... @@ -30,7 +30,7 @@ exports.setNavHeader = (title, navBack, backUrl, navBtn) => {
return _.merge({
navTitle: '',
backUrl: true,
navBack: true,
navBack: '',
navBtn: true,
boys: true
}, header);
... ...
... ... @@ -35,15 +35,15 @@
{{#if @root.saleViplogin}}
<i class="vip-grade vip-grade-{{@root.vipLevel}}"></i>
<span class="sale-price {{^marketPrice}}no-price{{/marketPrice}}">¥
{{#if @root.vipPrice1}}{{vip1Price}}{{/if}}
{{#if @root.vipPrice2}}{{vip2Price}}{{/if}}
{{#if @root.vipPrice3}}{{vip3Price}}{{/if}}
{{#if @root.vipPrice1}}{{round vip1Price}}{{/if}}
{{#if @root.vipPrice2}}{{round vip2Price}}{{/if}}
{{#if @root.vipPrice3}}{{round vip3Price}}{{/if}}
</span>
{{else}}
<span class="sale-price {{^marketPrice}}no-price{{/marketPrice}}">¥{{salesPrice}}</span>
<span class="sale-price {{^marketPrice}}no-price{{/marketPrice}}">¥{{round salesPrice}}</span>
{{/if}}
{{#marketPrice}}
<span class="market-price">¥{{.}}</span>
<span class="market-price">¥{{round .}}</span>
{{/marketPrice}}
</div>
{{#if @root.saleVip}}
... ...
... ... @@ -92,6 +92,19 @@ exports.upperCase = (str) => {
return str.toUpperCase();
};
/**
* 四舍五入
* @param {[type]} num 数字
* @param {[type]} precision 精度
* @return {[type]}
*/
exports.round = (num, precision) => {
precision = _.isNumber(precision) ? precision : 2;
num = _.isInteger(num) ? (+num).toFixed(precision) : _.round(num, precision);
return num;
};
/**
* 时间格式化
* @param format 格式化token @see{http://momentjs.cn/docs/#/displaying/format/}
... ...
... ... @@ -9,30 +9,35 @@ var $ = require('yoho-jquery'),
var $activityTime = $('.activity-time'),
endTime = $activityTime.data('time-ms');
var anHour = 3600000,
aMinute = 60000,
aSecond = 1000;
var params = {
anHour: 3600000, // 1小时=?毫秒
aMinute: 60000, // 1分钟=?毫秒
aSecond: 1000, // 1秒=?毫秒
timeDom: $activityTime, // 时间对象数组
endTime: [endTime] // 时间差数组
};
require('./sale/search');
lazyLoad($('img.lazy'));
// 倒计时
function getRTime() {
function getRTime(conf) {
var showTime = '',
d = 0,
h = 0,
m = 0,
s = 0;
endTime = endTime - 1000;
conf.timeDom.each(function(key, item) {
showTime = '';
conf.endTime[key] = conf.endTime[key] - 1000;
if (endTime > 1000) {
d = Math.floor(endTime / anHour / 24);
h = Math.floor(endTime / anHour % 24);
m = Math.floor(endTime / aMinute % 60);
s = Math.floor(endTime / aSecond % 60);
if (conf.endTime[key] > 1000) {
d = Math.floor(conf.endTime[key] / conf.anHour / 24);
h = Math.floor(conf.endTime[key] / conf.anHour % 24);
m = Math.floor(conf.endTime[key] / conf.aMinute % 60);
s = Math.floor(conf.endTime[key] / conf.aSecond % 60);
showTime += d > 0 ? d + '天' : '';
showTime += h > 0 ? h + '小时' : '';
... ... @@ -43,12 +48,14 @@ function getRTime() {
showTime = '剩' + showTime;
}
$activityTime.find('span').html(showTime);
$activityTime.attr('data-time-ms', endTime);
$(item).find('span').html(showTime);
$(item).fadeIn();
} else {
$activityTime.hide();
$(item).hide();
}
});
}
setInterval(getRTime, 1000);
setInterval(function() {
getRTime(params);
}, 1000);
... ...
.sale-channel-page {
.discount-detail-page {
.banner {
position: relative;
overflow: hidden;
... ... @@ -18,6 +18,7 @@
text-align: right;
font-size: 22px;
line-height: 50px;
display: none;
.time-ico {
margin-right: 15px;
... ...
.sale-special-page {
.discount-page {
overflow: hidden;
height: auto;
background: #f0f0f0;
... ...
@import "break-code";
@import "goods-list";
@import "sale";
@import "special";
@import "special-detail";
@import "discount";
@import "discount-detail";
... ...
... ... @@ -72,22 +72,22 @@ exports.processProductList = (list, options) => {
// thumb: product.defaultImages
// });
if (options.showPoint) {
product.marketPrice += '.00';
product.salesPrice += '.00';
if (product.vip1Price) {
product.vip1Price = parseInt(product.vip1Price) + '.00';
}
if (product.vip2Price) {
product.vip2Price = parseInt(product.vip2Price) + '.00';
}
if (product.vip3Price) {
product.vip3Price = parseInt(product.vip3Price) + '.00';
}
}
// if (options.showPoint) {
// // product.marketPrice += '.00';
// // product.salesPrice += '.00';
// // if (product.vip1Price) {
// // product.vip1Price = parseInt(product.vip1Price) + '.00';
// // }
// // if (product.vip2Price) {
// // product.vip2Price = parseInt(product.vip2Price) + '.00';
// // }
// // if (product.vip3Price) {
// // product.vip3Price = parseInt(product.vip3Price) + '.00';
// // }
// }
product.isSoonSoldOut = product.isSoonSoldOut === 'Y';
product.url = helpers.urlFormat(`/product/pro_${product.productId}_${product.goodsList[0].goodsId}/${product.cnAlphabet}.html`); // eslint-disable-line
... ...