Authored by zhangxiaoru

editorial

... ... @@ -496,6 +496,7 @@ const _getArticleNext = (id, appType) => {
});
return nextArticle;
} else {
logger.error('The next article is not 200');
return {};
... ...
... ... @@ -141,7 +141,7 @@ const isMobileOrder = {
// 转换时间戳
const _convertUnixTime = src => {
return moment.unix(src).format('YYYY-MM-DD HH:mm:ss');
return moment.unix(src).format('YYYY-MM-DD hh:mm:ss');
};
/**
... ... @@ -264,7 +264,6 @@ const _getUserOrder = (uid, type, page) => {
orderList.forEach(item => {
const ot = parseInt(item.orderType, 10);
const st = parseInt(item.status, 10);
const payleftTime = parseInt(item.payLefttime, 10);
let hasRefund = false;
let canRefund = false;
... ... @@ -294,7 +293,7 @@ const _getUserOrder = (uid, type, page) => {
// 没有取消订单并且状态为0的时候显示付款按钮
if (item.isCancel === 'N' &&
st === 0 && payleftTime !== 0) {
st === 0) {
item.showPayButton = true;
}
... ... @@ -316,10 +315,6 @@ const _getUserOrder = (uid, type, page) => {
if (item.isCancel === 'Y') {
item.showBuyBtn = true;
item.statusStr = '已取消';
} else if (payleftTime === 0) {
item.showBuyBtn = true;
item.showPayButton = false;
item.statusStr = '已取消';
} else if (item.isOnlinePaid) {
item.statusStr = statusMap[st].valueStr;
}
... ... @@ -440,13 +435,11 @@ const getOrderData = (uid, type, page) => {
},
2: {
emptyMsg: '没有待付款的订单哦~',
showEmptyEn: true,
btnText: '查看全部订单',
url: '/me/'
},
3: {
emptyMsg: '没有待收货的订单哦~',
showEmptyEn: true,
btnText: '查看全部订单',
url: '/me/'
}
... ... @@ -548,14 +541,6 @@ const getOrderDetail = (uid, code) => {
detail.invoice = false;
}
if (detail.payLefttime === '0') {
detail.showLeftTime = false;
detail.statusStr = '已取消';
detail.steps = false;
detail.btns = false;
}
detail.paymentTypeStr = paymentTypeStr[detail.paymentType];
detail.allAddress = detail.area + detail.address;
... ...
... ... @@ -21,11 +21,11 @@
<td class="width-opearte">
<div>
<span class="blue opreation update-address" data-id="{{address_id}}">修改</span>
<em class="op-sep">|</em>
<span class="blue opreation del-address" data-id="{{address_id}}">删除</span>
{{#if default}}
<span class="btn set-default opreation current-default" data-id={{address_id}}>默认地址</span>
{{else}}
<em class="op-sep">|</em>
<span class="blue opreation del-address" data-id="{{address_id}}">删除</span>
<span class="btn set-default opreation " data-id={{address_id}}>设为默认</span>
{{/if}}
</div>
... ...
... ... @@ -27,7 +27,7 @@
<span class="btn red hide-when-invalid">立即付款</span>
</a>
{{/if}}
<p class="subtext cancel hide-when-invalid">取消订单</p>
<p class="subtext cancel">取消订单</p>
</div>
{{/if}}
{{#if showEditOption}}
... ...
... ... @@ -17,7 +17,7 @@ const list = {
// 列表页
index: (req, res, next) => {
let q = req.query;
let channel = req.cookies._Channel || req.query._Channel || 'men';
let channel = req.query._Channel || req.cookies._Channel || 'men';
q.page = parseInt(q.page || 1, 10);
q.order = q.order || 's_n_desc';
... ... @@ -69,7 +69,7 @@ const list = {
// 新品到着
newPage: (req, res, next) => {
let q = req.query;
let channel = req.cookies._Channel || req.query._Channel || 'men';
let channel = req.query._Channel || req.cookies._Channel || 'men';
q.page = parseInt(q.page || 1, 10);
q.order = q.order || 's_n_desc';
... ...
... ... @@ -17,7 +17,7 @@ const Query = {
index: (req, res, next) => {
let q = req.query;
let query = q.query || '';
let channel = req.cookies._Channel || req.query._Channel || 'men';
let channel = req.query._Channel || req.cookies._Channel || 'men';
q.page = parseInt(q.page || 1, 10);
q.order = q.order || 's_n_desc';
... ...
... ... @@ -91,7 +91,8 @@ const shop = {
page: 'shop-list',
title: '店铺列表'
};
let nav = [DataHelper.getChannelNav()];
let channel = req.query._Channel || req.cookies._Channel || 'men';
let nav = [DataHelper.getChannelNav(channel)];
let domain = req.params.domain;
let uid = req.user.uid;
let q = req.query;
... ... @@ -99,6 +100,7 @@ const shop = {
q.order = q.order || 's_n_desc';
q.page = parseInt(q.page || 1, 10);
q.channel = channel;
ShopData.getShopHeadData(domain, uid).then(result => {
data.banner = result;
... ...
<div class="shop-sort">
<div class="all">所有商品</div>
<div class="sort-list">
<div><a href="{{@root.mores.all.url}}?gender=2,3">女装</a></div>
<div><a href="{{@root.mores.all.url}}?gender=1,3">男装</a></div>
<div><a href="{{@root.mores.all.url}}?gender=1,3">男士</a></div>
<div><a href="{{@root.mores.all.url}}?gender=2,3">女士</a></div>
<div><a href="{{@root.mores.all.url}}?_Channel=lifestyle">生活</a></div>
{{# each banner.sorts}}
<div><a href="{{@root.mores.all.url}}?misort={{sortId}}">{{sortName}}</a></div>
{{/ each}}
... ...
... ... @@ -16,6 +16,9 @@ exports.index = (req, res, next) => {
cartModel.getCartData(shoppingKey, uid).then((result) => {
if (result.code === 200) {
res.header('Cache-Control', 'no-cache');
res.display('cart', _.merge({
module: 'shopping',
page: 'cart',
... ...
... ... @@ -17,54 +17,61 @@ const index = (req, res, next) => {
orderModel.index(req.user.uid).then(result => {
let data = result.data;
// 设置头部路径索引focus
data.bcNavFocus = 2;
// 构造诡异的配送方式数据【显示普通快递的文字,确用顺丰发货和顺丰的快递费】
data.delivery_way = _.concat(_.assign(_.find(data.delivery_way, {delivery_way_id: 2}), {
delivery_way_name: '普通快递'
}));
// 发票抬头
data.invoices.invoiceTitle = [
{
name: '个人',
value: 1,
myClass: 'personal'
},
{
name: '单位',
value: 2
}
];
// 返回购物车链接
data.goCartLink = helper.urlFormat('/shopping/cart');
// 拆单是否显示左右切换
_.forEach(data.shopping_cart_data.package_list, i => {
if (i.goods_list.length > 4) {
i.showToggle = true;
}
});
if (data.goods_list && data.goods_list.length > 0) {
// 设置头部路径索引focus
data.bcNavFocus = 2;
// 构造诡异的配送方式数据【显示普通快递的文字,确用顺丰发货和顺丰的快递费】
data.delivery_way = _.concat(_.assign(_.find(data.delivery_way, {delivery_way_id: 2}), {
delivery_way_name: '普通快递'
}));
// 发票抬头
data.invoices.invoiceTitle = [
{
name: '个人',
value: 1,
myClass: 'personal'
},
{
name: '单位',
value: 2
}
];
// 返回购物车链接
data.goCartLink = helper.urlFormat('/shopping/cart');
// 拆单是否显示左右切换
_.forEach(data.shopping_cart_data.package_list, i => {
if (i.goods_list.length > 4) {
i.showToggle = true;
}
});
// 是否打印价格radio
data.printPriceRadio = [
{
value: '1',
name: '是'
},
{
value: '0',
name: '否',
checked: true
}
];
res.header('Cache-Control', 'no-cache');
res.display('order', {
content: data,
defaultHeader: false
});
} else {
res.redirect('/shopping/cart');
}
// 是否打印价格radio
data.printPriceRadio = [
{
value: '1',
name: '是'
},
{
value: '0',
name: '否',
checked: true
}
];
res.display('order', {
content: data,
defaultHeader: false
});
}).catch(next);
};
... ...
... ... @@ -11,6 +11,7 @@ const OrderData = require('../models/order');
const PayHelpers = require('../helpers/payment');
const camelCase = global.yoho.camelCase;
const helpers = global.yoho.helpers;
const _ = require('lodash');
/**
... ... @@ -24,13 +25,39 @@ const online = (req, res, next) => {
let uid = req.user.uid;
PayData.getPayInfo(uid, orderCode).then(result => {
res.display('pay', Object.assign({
defaultHeader: false,
module: 'shopping',
page: 'pay',
title: '支付页面',
username: req.user.username
}, result));
let order = result.order;
let promotion = order.promotionFormulas;
let coin = 0;
let amount = _.toNumber(order.paymentAmount);
_.forEach(promotion, p => {
if (p.promotion === 'YOHO币') {
coin = _.toNumber(p.promotionAmount.substring(2, p.promotionAmount.length)) * 100;
}
});
if (amount > 0) {
res.display('pay', Object.assign({
defaultHeader: false,
module: 'shopping',
page: 'pay',
title: '支付页面',
username: req.user.username
}, result));
} else {
res.display('pay-success', {
defaultHeader: false,
content: {
cost: order.paymentAmount,
orderNum: order.orderCode,
coin: coin,
orderHref: helpers.urlFormat('/me/order/detail', {orderCode: order.orderCode}),
walkHref: helpers.urlFormat('/')
}
});
}
}).catch(next);
};
... ... @@ -76,16 +103,25 @@ const callback = (req, res) => {
let query = req.query;
PayHelpers.afterPay(query, payId, req.user).then(result => {
if (result.code === 200) {
let data = result.data;
if (result.code === 200 && result.data && result.data.order) {
let order = result.data.order;
let promotion = order.promotionFormulas;
let coin = 0;
_.forEach(promotion, p => {
if (p.promotion === 'YOHO币') {
coin = _.toNumber(p.promotionAmount.substring(2, p.promotionAmount.length)) * 100;
}
});
res.display('pay-success', {
defaultHeader: false,
content: {
cost: data.pay,
orderNum: data.orderCode,
onlineCost: data.pay,
orderHref: helpers.urlFormat('/me/order/detail', {orderCode: data.orderCode}),
cost: order.paymentAmount,
orderNum: order.orderCode,
coin: coin,
orderHref: helpers.urlFormat('/me/order/detail', {orderCode: order.orderCode}),
walkHref: helpers.urlFormat('/')
}
});
... ...
... ... @@ -282,7 +282,7 @@ const filterCartData = (result, uid) => {
ordinaryGoods = _.concat(ordinaryGoods, ordinaryCartData.goods_list, soldOutWithStorage); // 正常商品
invalidGoods = _.concat(invalidGoods, ordinaryCartData.off_shelves_goods_list, soldOutWithoutStorage); // 失效商品
_.forEach(ordinaryGoods, function(good) {
_.forEach(ordinaryGoods, good => {
buyNumber = parseInt(good.buy_number, 10);
storageNumber = parseInt(good.storage_number, 10);
totalNum += buyNumber;
... ...
... ... @@ -221,8 +221,7 @@ const procOrderData = (payResult, uid) => {
code: 200,
message: '支付成功,请等待发货',
data: {
pay: amount,
orderCode: orderCode
order: order
}
};
... ...
... ... @@ -18,8 +18,8 @@
</p>
<p class="order-num">订单编号:{{orderNum}}</p>
{{#if onlineCost}}
<p class="payment-online">在线支付:¥{{round onlineCost 2}}</p>
{{#if cost}}
<p class="payment-online">在线支付:¥{{round cost 2}}</p>
{{/if}}
{{#if coin}}
<p class="payment-coin">有货币支付:{{coin}}</p>
... ... @@ -43,4 +43,4 @@
</div>
{{/ content}}
</div>
</div>
\ No newline at end of file
</div>
... ...
... ... @@ -79,7 +79,7 @@
</a>
</li>
<li class="pro-info">
{{!-- <div class="brand-name">{{brandName}}</div> --}}
<a class="brand-name" href="/product/shop/{{brand_domain}}">{{brand_name}}</a>
<div class="pro-name"><a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank">{{product_name}}</a></div>
<div class="color-size editable" data-productId="{{product_id}}" id="edit_{{product_id}}" data-productSkn="{{product_skn}}">
{{#if color_name}}
... ...
... ... @@ -32,6 +32,7 @@ module.exports = {
if (src <= 0) {
timeStr = '已失效';
$('.hide-when-invalid').hide();
$('.user-order .table .common-column .pay-operation .left-time').css('margin-left', '0');
return timeStr;
}
... ...
... ... @@ -34,7 +34,7 @@ var Bll = {
},
validate: function(info) {
var regBirth = new RegExp(/^[1-2][0-9][0-9][0-9]-[0-1]{0,1}[0-9]-[0-3]{0,1}[0-9]$/);
var regName = new RegExp(/^[\u4e00-\u9fa5_-a-zA-Z0-9]+$/);
var regName = new RegExp(/^[\u4e00-\u9fa5_a-zA-Z0-9-]+$/);
var regRealName = new RegExp(/^[\u4e00-\u9fa5a-zA-Z]{2,12}$/);
var birthdayForm = $('#birthday');
var nickForm = $('#nick_name');
... ...
... ... @@ -87,3 +87,5 @@ $('#go-pay-btn').click(function() {
}
});
});
console.log(window.history);
... ...
... ... @@ -14,6 +14,10 @@
height: $sliderHeight;
}
.slide-pagination {
bottom: 110px;
}
.slide-thumb-container {
height: 510px;
}
... ... @@ -85,12 +89,12 @@
&.prev {
left: 50%;
margin-left: -515px;
margin-left: -620px;
}
&.next {
right: 50%;
margin-right: -515px;
margin-right: -620px;
}
&:hover {
... ... @@ -270,7 +274,7 @@
.main-container {
position: relative;
top: -60px;
top: -85px;
margin: 0 auto;
box-sizing: border-box;
}
... ...
.new-arrival {
$textHeight: 47px;
$imgHeight: 490px;
$imgHeight: 496px;
@extend .resource-container;
... ...
... ... @@ -233,6 +233,8 @@
float: left;
height: 30px;
line-height: 30px;
width: 1000px;
overflow: hidden;
div {
float: left;
margin: 0 5px;
... ...
... ... @@ -53,8 +53,9 @@ $hoverColor: #379ed6;
padding: 24px 30px;
li {
float: left;
display: table-cell;
height: 134px;
vertical-align: middle;
}
.chk {
... ... @@ -92,10 +93,17 @@ $hoverColor: #379ed6;
width: 342px;
padding-left: 42px;
font-size: 12px;
font-weight: bold;
.brand-name {
margin-bottom: 19px;
display: block;
font-size: 18px;
font-weight: bold;
line-height: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 300px;
}
.size {
... ... @@ -108,11 +116,10 @@ $hoverColor: #379ed6;
}
.pro-name {
height: 30px;
height: 36px;
width: 234px;
word-wrap: break-word;
margin-bottom: 13px;
line-height: 1.3em;
margin-bottom: 5px;
overflow: hidden;
:hover {
cursor: pointer;
... ... @@ -123,6 +130,7 @@ $hoverColor: #379ed6;
.pro-name > a {
height: 100%;
display: block;
line-height: 18px;
}
.price {
... ... @@ -165,7 +173,7 @@ $hoverColor: #379ed6;
}
.editable {
padding: 5px;
padding: 5px 0;
width: 200px;
position: relative;
... ...
... ... @@ -427,6 +427,10 @@
.brand-name {
display: block;
line-height: 50px;
width: 338px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.name {
... ...