Authored by 石坚

Merge branch 'release/1.0' of http://git.yoho.cn/fe/yoho-blk into release/1.0

@@ -8,6 +8,9 @@ @@ -8,6 +8,9 @@
8 8
9 const mcHandler = require('../models/menu-crumb-handler'); 9 const mcHandler = require('../models/menu-crumb-handler');
10 const orderModel = require('../models/order'); 10 const orderModel = require('../models/order');
  11 +const _ = require('lodash');
  12 +const crypto = global.yoho.crypto;
  13 +const config = global.yoho.config;
11 14
12 /** 15 /**
13 * 我的订单 16 * 我的订单
@@ -41,6 +44,9 @@ const detail = (req, res, next) => { @@ -41,6 +44,9 @@ const detail = (req, res, next) => {
41 const pageData = result[0]; 44 const pageData = result[0];
42 const thumb = result[1]; 45 const thumb = result[1];
43 46
  47 + if (_.has(pageData, 'orderDetail.orderCode')) {
  48 + pageData.orderDetail.orderCodeM = crypto.encryption(config.crypto.common, pageData.orderDetail.orderCode);
  49 + }
44 50
45 res.display('index', { 51 res.display('index', {
46 isMe: true, 52 isMe: true,
@@ -123,6 +129,7 @@ const editOrder = (req, res, next) => { @@ -123,6 +129,7 @@ const editOrder = (req, res, next) => {
123 const query = req.query; 129 const query = req.query;
124 130
125 query.uid = uid; 131 query.uid = uid;
  132 + query.orderCode = crypto.decrypt(config.crypto.common, query.orderCode);
126 133
127 orderModel.editOrder(query).then(result => { 134 orderModel.editOrder(query).then(result => {
128 res.json(result); 135 res.json(result);
@@ -344,7 +344,7 @@ const _setRefundDetailData = (data) => { @@ -344,7 +344,7 @@ const _setRefundDetailData = (data) => {
344 resData.refundSure = { 344 resData.refundSure = {
345 mode: data.return_amount_mode_name, 345 mode: data.return_amount_mode_name,
346 account: data.return_amount_mode_name, 346 account: data.return_amount_mode_name,
347 - amount: data.return_amount_total, 347 + amount: data.return_amount,
348 coin: parseInt(data.return_yoho_coin * 100, 10) 348 coin: parseInt(data.return_yoho_coin * 100, 10)
349 }; 349 };
350 break; 350 break;
1 -<div class="order-status order" data-code="{{orderCode}}"> 1 +<div class="order-status order" data-code="{{orderCode}}" data-codem="{{orderCodeM}}">
2 <div class="basic"> 2 <div class="basic">
3 <p>订单号:{{orderCode}}</p> 3 <p>订单号:{{orderCode}}</p>
4 <p>订单状态:{{statusStr}}</p> 4 <p>订单状态:{{statusStr}}</p>
@@ -823,9 +823,7 @@ const setDetailData = sizeInfo => { @@ -823,9 +823,7 @@ const setDetailData = sizeInfo => {
823 titleCn: '商品详情' 823 titleCn: '商品详情'
824 }; 824 };
825 825
826 - if (sizeInfo.productDescBo && sizeInfo.productDescBo.phrase) {  
827 - details.content = `${sizeInfo.productDescBo.phrase}<br/>`;  
828 - } 826 + details.content = `${_.get(sizeInfo, 'productDescBo.phrase', '')}<br/>`;
829 827
830 // 图片换规则 828 // 图片换规则
831 const replacePairs = [ 829 const replacePairs = [
@@ -18,7 +18,6 @@ exports.index = (req, res, next) => { @@ -18,7 +18,6 @@ exports.index = (req, res, next) => {
18 if (result.code === 200) { 18 if (result.code === 200) {
19 19
20 res.header('Cache-Control', 'no-store'); 20 res.header('Cache-Control', 'no-store');
21 -  
22 res.display('cart', _.merge({ 21 res.display('cart', _.merge({
23 module: 'shopping', 22 module: 'shopping',
24 page: 'cart', 23 page: 'cart',
@@ -135,7 +134,7 @@ exports.addToCart = (req, res, next) => { @@ -135,7 +134,7 @@ exports.addToCart = (req, res, next) => {
135 shoppingKey: req.cookies._SPK || null, 134 shoppingKey: req.cookies._SPK || null,
136 uid: req.user.uid 135 uid: req.user.uid
137 }).then((result) => { 136 }).then((result) => {
138 - res.cookie('_SPK', result.data.shopping_key, { maxAge: 1000 * 60 * 60 * 24 * 365, httpOnly: true, path: '/'}); 137 + res.cookie('_SPK', result.data.shopping_key, {maxAge: 1000 * 60 * 60 * 24 * 365, httpOnly: true, path: '/'});
139 res.json(result); 138 res.json(result);
140 }).catch(next); 139 }).catch(next);
141 }; 140 };
@@ -147,9 +146,6 @@ exports.toggleSelectGoods = (req, res, next) => { @@ -147,9 +146,6 @@ exports.toggleSelectGoods = (req, res, next) => {
147 const shoppingKey = req.cookies._SPK; 146 const shoppingKey = req.cookies._SPK;
148 147
149 // 商品sku列表 148 // 商品sku列表
150 - // skuList:  
151 - // [{"goods_type":"advance","buy_number":1,"selected":"Y","product_sku":"1006277","promotion_id":0}, {...}]  
152 - // [{"goods_type":"ordinary","buy_number":1,"selected":"Y","product_sku":"1006277","promotion_id":0}, {...}]  
153 const productSkuList = req.body.skuList; 149 const productSkuList = req.body.skuList;
154 150
155 if (uid) { 151 if (uid) {
@@ -26,7 +26,7 @@ const Alipay = { @@ -26,7 +26,7 @@ const Alipay = {
26 _input_charset: 'utf-8', 26 _input_charset: 'utf-8',
27 notify_url: config.pay.serviceNotify + 'payment/alipay_notify', 27 notify_url: config.pay.serviceNotify + 'payment/alipay_notify',
28 return_url: 'http:' + helpers.urlFormat('/shopping/pay/callback/alipay'), 28 return_url: 'http:' + helpers.urlFormat('/shopping/pay/callback/alipay'),
29 - subject: '有货订单号:' + order.orderCode, 29 + subject: 'BLK订单号:' + order.orderCode,
30 out_trade_no: order.orderCode, 30 out_trade_no: order.orderCode,
31 it_b_pay: common.getPayExpireMin(order.payExpire) + 'm', 31 it_b_pay: common.getPayExpireMin(order.payExpire) + 'm',
32 total_fee: order.paymentAmount, 32 total_fee: order.paymentAmount,
@@ -132,40 +132,40 @@ const toggleSelectGoods = (params) => { @@ -132,40 +132,40 @@ const toggleSelectGoods = (params) => {
132 _.merge(params, {method}); 132 _.merge(params, {method});
133 133
134 /* 134 /*
135 - let resultData;  
136 - let skus = JSON.parse(params.product_sku_list).map(sku => return sku.product_sku);  
137 - const skusLen = skus.length;  
138 -  
139 - _.merge(params, {method});  
140 -  
141 - return getCartData(params.shopping_key, params.uid).then(function(result) {  
142 - // 检查库存量  
143 - resultData = result.data;  
144 -  
145 - _.find(  
146 - _.concat(resultData.ordinary_cart_data.goods_list, resultData.advance_cart_data.goods_list),  
147 - (goodItem) => {  
148 - if (skusLen == 1 && goodItem.product_sku === skus[0] &&  
149 - (parseInt(goodItem.buy_number, 10) > parseInt(goodItem.storage_number, 10))) {  
150 - // 单个商品  
151 - return {  
152 - code: '1000',  
153 - message: '您勾选的商品库存不足'  
154 - };  
155 - } else {  
156 - if((parseInt(goodItem.buy_number, 10) > parseInt(goodItem.storage_number, 10))) {  
157 - // 全选  
158 - return api.get('', params).then(result => {  
159 - return _.merge(result, {  
160 - code: '1001',  
161 - message: '您全选的商品中存在库存不足商品,已帮您自动取消勾选'  
162 - })  
163 - });  
164 - }  
165 - }  
166 - });  
167 - });  
168 - */ 135 + let resultData;
  136 + let skus = JSON.parse(params.product_sku_list).map(sku => return sku.product_sku);
  137 + const skusLen = skus.length;
  138 +
  139 + _.merge(params, {method});
  140 +
  141 + return getCartData(params.shopping_key, params.uid).then(function(result) {
  142 + // 检查库存量
  143 + resultData = result.data;
  144 +
  145 + _.find(
  146 + _.concat(resultData.ordinary_cart_data.goods_list, resultData.advance_cart_data.goods_list),
  147 + (goodItem) => {
  148 + if (skusLen == 1 && goodItem.product_sku === skus[0] &&
  149 + (parseInt(goodItem.buy_number, 10) > parseInt(goodItem.storage_number, 10))) {
  150 + // 单个商品
  151 + return {
  152 + code: '1000',
  153 + message: '您勾选的商品库存不足'
  154 + };
  155 + } else {
  156 + if((parseInt(goodItem.buy_number, 10) > parseInt(goodItem.storage_number, 10))) {
  157 + // 全选
  158 + return api.get('', params).then(result => {
  159 + return _.merge(result, {
  160 + code: '1001',
  161 + message: '您全选的商品中存在库存不足商品,已帮您自动取消勾选'
  162 + })
  163 + });
  164 + }
  165 + }
  166 + });
  167 + });
  168 + */
169 return api.get('', params); 169 return api.get('', params);
170 }; 170 };
171 171
@@ -295,15 +295,33 @@ const filterCartData = (result, uid) => { @@ -295,15 +295,33 @@ const filterCartData = (result, uid) => {
295 }); 295 });
296 } 296 }
297 297
  298 + let freeShippingTip = '';
  299 +
  300 + if (_.has(result, 'data.ordinary_cart_data.promotion_info')) {
  301 + let promotions = result.data.ordinary_cart_data.promotion_info;
  302 +
  303 + _.each(promotions, p => {
  304 +
  305 + if (p.promotion_type === 'VipFreeShippingCost') {
  306 + freeShippingTip = p.promotion_title;
  307 + }
  308 +
  309 + if (p.promotion_type === 'FreeShippingCost') {
  310 + freeShippingTip = p.promotion_title;
  311 + }
  312 + });
  313 + }
  314 +
298 return _.merge(resData, { 315 return _.merge(resData, {
299 hasGoods: advancedGoods.length || ordinaryGoods.length || invalidGoods.length, 316 hasGoods: advancedGoods.length || ordinaryGoods.length || invalidGoods.length,
300 preSalePros: (advancedSoldOutGoods.length || advancedGoods.length) ? 317 preSalePros: (advancedSoldOutGoods.length || advancedGoods.length) ?
301 - _.concat(advancedGoods, advancedSoldOutGoods) : [], 318 + _.concat(advancedGoods, advancedSoldOutGoods) : [],
302 commonPros: ordinaryGoods, 319 commonPros: ordinaryGoods,
303 invalidPros: invalidGoods, 320 invalidPros: invalidGoods,
304 selectedNum: selectedAdvanceNum + selectedOrdinaryNum, 321 selectedNum: selectedAdvanceNum + selectedOrdinaryNum,
305 checkAll: totalNum === (selectedAdvanceNum + selectedOrdinaryNum), 322 checkAll: totalNum === (selectedAdvanceNum + selectedOrdinaryNum),
306 totalMoney: totalAdvanceMoney + totalOrdinaryMoney, 323 totalMoney: totalAdvanceMoney + totalOrdinaryMoney,
  324 + freeShippingTip: freeShippingTip,
307 noStorage 325 noStorage
308 }); 326 });
309 }; 327 };
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 </li> 17 </li>
18 <li> 18 <li>
19 <a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank"> 19 <a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank">
20 - <img src="{{image goods_images 100 134}}" alt="{{product_name}}"> 20 + <img src="{{image goods_images 100 134}}" alt="{{product_name}}" width="100" height="134">
21 </a> 21 </a>
22 </li> 22 </li>
23 <li class="pro-info"> 23 <li class="pro-info">
@@ -72,7 +72,7 @@ @@ -72,7 +72,7 @@
72 </li> 72 </li>
73 <li> 73 <li>
74 <a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank"> 74 <a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank">
75 - <img src="{{image goods_images 100 134}}" alt="{{product_name}}"> 75 + <img src="{{image goods_images 100 134}}" alt="{{product_name}}" width="100" height="134">
76 </a> 76 </a>
77 </li> 77 </li>
78 <li class="pro-info"> 78 <li class="pro-info">
@@ -116,7 +116,7 @@ @@ -116,7 +116,7 @@
116 </li> 116 </li>
117 <li> 117 <li>
118 <a href="javascript:void(0)"> 118 <a href="javascript:void(0)">
119 - <img src="{{image goods_images 100 134}}" alt="{{product_name}}"> 119 + <img src="{{image goods_images 100 134}}" alt="{{product_name}}" width="100" height="134">
120 </a> 120 </a>
121 </li> 121 </li>
122 <li class="pro-info"> 122 <li class="pro-info">
  1 +{{#if freeShippingTip}}
1 <div class="fregit-remark"> 2 <div class="fregit-remark">
2 <span>免运费</span> 3 <span>免运费</span>
3 - 满399免运费 4 + {{freeShippingTip}}
4 </div> 5 </div>
  6 +{{/if}}
5 <div class="cart-statement"> 7 <div class="cart-statement">
6 <div class="actions"> 8 <div class="actions">
7 <div class="action"> 9 <div class="action">
@@ -28,4 +30,4 @@ @@ -28,4 +30,4 @@
28 <div class="checkout"> 30 <div class="checkout">
29 <span class="btn {{#unless selectedNum}}disable{{/unless}}" id="checkout_btn">去结算</span> 31 <span class="btn {{#unless selectedNum}}disable{{/unless}}" id="checkout_btn">去结算</span>
30 </div> 32 </div>
31 -</div>  
  33 +</div>
@@ -23,8 +23,8 @@ module.exports = { @@ -23,8 +23,8 @@ module.exports = {
23 cookieDomain: 'yohoblk.com', 23 cookieDomain: 'yohoblk.com',
24 domains: { 24 domains: {
25 singleApi: 'http://single.yoho.cn/', 25 singleApi: 'http://single.yoho.cn/',
26 - api: 'http://api.yoho.yohoops.org/',  
27 - service: 'http://service.yoho.yohoops.org/', 26 + api: 'http://api-test3.yohops.com:9999/',
  27 + service: 'http://service-test3.yohops.com:9999/',
28 search: 'http://search.yohoops.org/yohosearch/' 28 search: 'http://search.yohoops.org/yohosearch/'
29 }, 29 },
30 useOneapm: false, 30 useOneapm: false,
@@ -85,13 +85,16 @@ module.exports = { @@ -85,13 +85,16 @@ module.exports = {
85 partnerID: '2088421464239504', 85 partnerID: '2088421464239504',
86 appSecret: 'e3i54meghrac3qhryzhw1h5yzeijik7e' 86 appSecret: 'e3i54meghrac3qhryzhw1h5yzeijik7e'
87 }, 87 },
88 - sina: { // 还未申请  
89 - appID: '3739328910',  
90 - appSecret: '9d44cded26d048e23089e5e975c93df1' 88 + sina: { // OK
  89 + appID: '1379621535',
  90 + appSecret: 'aa29bf39b5fd9f247c93e900d679ab6a'
91 } 91 }
92 }, 92 },
93 pay: { 93 pay: {
94 serviceNotify: 'http://devservice.yoho.cn:58077/' 94 serviceNotify: 'http://devservice.yoho.cn:58077/'
  95 + },
  96 + crypto: {
  97 + common: 'yohoblk9646abcde'
95 } 98 }
96 }; 99 };
97 100
@@ -11,7 +11,9 @@ module.exports = () => { @@ -11,7 +11,9 @@ module.exports = () => {
11 let isMobile = /(nokia|iphone|android|ipad|motorola|^mot\-|softbank|foma|docomo|kddi|up\.browser|up\.link|htc|dopod|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam\-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|symbian|smartphone|midp|wap|phone|windows ce|iemobile|^spice|^bird|^zte\-|longcos|pantech|gionee|^sie\-|portalmmm|jig\s browser|hiptop|^ucweb|^benq|haier|^lct|opera\s*mobi|opera\*mini|320x320|240x320|176x220)/i.test(req.get('user-agent')); // eslint-disable-line 11 let isMobile = /(nokia|iphone|android|ipad|motorola|^mot\-|softbank|foma|docomo|kddi|up\.browser|up\.link|htc|dopod|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam\-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|symbian|smartphone|midp|wap|phone|windows ce|iemobile|^spice|^bird|^zte\-|longcos|pantech|gionee|^sie\-|portalmmm|jig\s browser|hiptop|^ucweb|^benq|haier|^lct|opera\s*mobi|opera\*mini|320x320|240x320|176x220)/i.test(req.get('user-agent')); // eslint-disable-line
12 12
13 if (isMobile) { 13 if (isMobile) {
14 - return res.redirect(`//m.yohobuy.com${req.url}`); 14 + // return res.redirect(`//m.yohobuy.com${req.url}`);
  15 + // http://jira.yoho.cn:8888/browse/BLK-2051
  16 + return res.redirect('//www.yohoshow.com/about/index/blkqr');
15 } 17 }
16 next(); 18 next();
17 }; 19 };
@@ -14,12 +14,10 @@ var $searchWrap = $('.search-wrapper'), @@ -14,12 +14,10 @@ var $searchWrap = $('.search-wrapper'),
14 $clearInput = $('.clear-input'); 14 $clearInput = $('.clear-input');
15 15
16 var goodsTpl = require('../../tpl/common/bag-goods.hbs'); 16 var goodsTpl = require('../../tpl/common/bag-goods.hbs');
  17 +var delayer;
17 18
18 require('yoho-jquery-nanoscroller'); 19 require('yoho-jquery-nanoscroller');
19 20
20 -  
21 -var delayer;  
22 -  
23 function handelProduct(data) { 21 function handelProduct(data) {
24 var goods = [], 22 var goods = [],
25 list = ['commonPros', 'preSalePros', 'noStorage']; 23 list = ['commonPros', 'preSalePros', 'noStorage'];
@@ -66,8 +64,7 @@ function refreshBag() { @@ -66,8 +64,7 @@ function refreshBag() {
66 $bagGoodsList.empty(); 64 $bagGoodsList.empty();
67 $miniBag.addClass('bag-empty'); 65 $miniBag.addClass('bag-empty');
68 } 66 }
69 - $('.nano').nanoScroller({disableResize: true});  
70 - 67 + $('.mini-goods-list-wrap.nano').nanoScroller({disableResize: true});
71 } 68 }
72 } 69 }
73 }); 70 });
@@ -26,7 +26,7 @@ $('.order .cancel-btn').on('click', function() { @@ -26,7 +26,7 @@ $('.order .cancel-btn').on('click', function() {
26 $('.order .edit-btn').on('click', function() { 26 $('.order .edit-btn').on('click', function() {
27 var $this = $(this); 27 var $this = $(this);
28 var $userInfo = $('.user-info.info-box'); 28 var $userInfo = $('.user-info.info-box');
29 - var code = $this.closest('.order').data('code'); 29 + var code = $this.closest('.order').data('codem');
30 30
31 var areaCode = $userInfo.data('area'); 31 var areaCode = $userInfo.data('area');
32 var userName = $userInfo.find('.user-name-sel').data('name'); 32 var userName = $userInfo.find('.user-name-sel').data('name');
@@ -238,7 +238,8 @@ @@ -238,7 +238,8 @@
238 .del-good-btn { 238 .del-good-btn {
239 cursor: pointer; 239 cursor: pointer;
240 color: #999; 240 color: #999;
241 - &:hover{ 241 +
  242 + &:hover {
242 color: #1b1b1b; 243 color: #1b1b1b;
243 } 244 }
244 } 245 }
@@ -282,7 +283,7 @@ @@ -282,7 +283,7 @@
282 left: 50%; 283 left: 50%;
283 position: absolute; 284 position: absolute;
284 margin-left: -132px; 285 margin-left: -132px;
285 - margin-top: 20px; 286 + margin-top: 30px;
286 background: resolve("layout/blk-logo.svg") no-repeat center center; 287 background: resolve("layout/blk-logo.svg") no-repeat center center;
287 background-size: 100%; 288 background-size: 100%;
288 289
@@ -300,8 +301,9 @@ @@ -300,8 +301,9 @@
300 301
301 .sub-nav-list { 302 .sub-nav-list {
302 max-width: 94%; 303 max-width: 94%;
303 - line-height: 50px;  
304 display: inline-block; 304 display: inline-block;
  305 + line-height: 55px;
  306 + height: 44px;
305 307
306 li { 308 li {
307 float: left; 309 float: left;
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 margin-top: 9px; 23 margin-top: 9px;
24 text-align: center; 24 text-align: center;
25 top: 15px; 25 top: 15px;
26 - left: 26px; 26 + left: 10px;
27 z-index: 2; 27 z-index: 2;
28 28
29 h2 { 29 h2 {
@@ -2,6 +2,11 @@ @@ -2,6 +2,11 @@
2 padding-bottom: 30px; 2 padding-bottom: 30px;
3 background: #f5f5f5; 3 background: #f5f5f5;
4 4
  5 + /* 个人中心布局下重置默认的底部样式 */
  6 + + .blk-footer .center-content {
  7 + border-top: none;
  8 + }
  9 +
5 .help-navigation { 10 .help-navigation {
6 width: 150px; 11 width: 150px;
7 margin-right: 10px; 12 margin-right: 10px;
@@ -220,10 +220,10 @@ @@ -220,10 +220,10 @@
220 } 220 }
221 } 221 }
222 222
223 - .marginhack{ 223 + .marginhack {
224 margin-top: -4px; 224 margin-top: -4px;
225 225
226 - .black{ 226 + .black {
227 margin-top: 0; 227 margin-top: 0;
228 } 228 }
229 } 229 }
@@ -259,7 +259,7 @@ @@ -259,7 +259,7 @@
259 width: 100%; 259 width: 100%;
260 260
261 .bg { 261 .bg {
262 - height: 250px; 262 + height: 160px;
263 background-image: resolve("me/no-order.png"); 263 background-image: resolve("me/no-order.png");
264 background-repeat: no-repeat; 264 background-repeat: no-repeat;
265 background-position: center bottom; 265 background-position: center bottom;
@@ -17,7 +17,6 @@ @@ -17,7 +17,6 @@
17 color: $blue; 17 color: $blue;
18 font-weight: bold; 18 font-weight: bold;
19 } 19 }
20 -  
21 } 20 }
22 21
23 .country-code { 22 .country-code {
@@ -36,7 +35,7 @@ @@ -36,7 +35,7 @@
36 @mixin input; 35 @mixin input;
37 36
38 &.phone-num { 37 &.phone-num {
39 - width: 150px; 38 + width: 170px;
40 display: block; 39 display: block;
41 float: left; 40 float: left;
42 border: none !important; 41 border: none !important;
@@ -46,7 +45,6 @@ @@ -46,7 +45,6 @@
46 &.captcha { 45 &.captcha {
47 width: $captcha; 46 width: $captcha;
48 float: left; 47 float: left;
49 -  
50 } 48 }
51 } 49 }
52 50
@@ -93,7 +91,6 @@ @@ -93,7 +91,6 @@
93 .small { 91 .small {
94 @mixin small; 92 @mixin small;
95 } 93 }
96 -  
97 } 94 }
98 95
99 .other-opts { 96 .other-opts {
@@ -104,6 +101,7 @@ @@ -104,6 +101,7 @@
104 101
105 .third-party-login { 102 .third-party-login {
106 margin: 0 30px; 103 margin: 0 30px;
  104 +
107 span { 105 span {
108 float: left; 106 float: left;
109 width: calc(($item-width - 60px) / 4); 107 width: calc(($item-width - 60px) / 4);
@@ -397,11 +397,15 @@ @@ -397,11 +397,15 @@
397 display: inline-block; 397 display: inline-block;
398 vertical-align: top; 398 vertical-align: top;
399 width: 60px; 399 width: 60px;
400 - margin-right: 10px; 400 + margin-right: 11px;
  401 + }
  402 +
  403 + .goods-img-col:last-child {
  404 + margin-right: 0;
401 } 405 }
402 406
403 img { 407 img {
404 - margin: 8px 0; 408 + margin-top: 11px;
405 cursor: pointer; 409 cursor: pointer;
406 } 410 }
407 } 411 }
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 display: block; 23 display: block;
24 position: absolute; 24 position: absolute;
25 right: 20px; 25 right: 20px;
26 - bottom: 30px; 26 + bottom: 20px;
27 font-size: 14px; 27 font-size: 14px;
28 28
29 a, 29 a,
@@ -33,6 +33,9 @@ @@ -33,6 +33,9 @@
33 padding: 10px; 33 padding: 10px;
34 margin-left: 10px; 34 margin-left: 10px;
35 cursor: pointer; 35 cursor: pointer;
  36 + display: inline-block;
  37 + line-height: 12px;
  38 + height: 32px;
36 39
37 .iconfont { 40 .iconfont {
38 font-size: 14px; 41 font-size: 14px;
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 </li> 33 </li>
34 <li> 34 <li>
35 <a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank"> 35 <a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank">
36 - <img src="{{image goods_images 100 134}}" alt="{{product_name}}"> 36 + <img src="{{image goods_images 100 134}}" alt="{{product_name}}" width="100" height="134">
37 </a> 37 </a>
38 </li> 38 </li>
39 <li class="pro-info"> 39 <li class="pro-info">
@@ -101,7 +101,7 @@ @@ -101,7 +101,7 @@
101 </li> 101 </li>
102 <li> 102 <li>
103 <a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank"> 103 <a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank">
104 - <img src="{{image goods_images 100 134}}" alt="{{product_name}}"> 104 + <img src="{{image goods_images 100 134}}" alt="{{product_name}}" width="100" height="134">
105 </a> 105 </a>
106 </li> 106 </li>
107 <li class="pro-info"> 107 <li class="pro-info">
@@ -158,7 +158,7 @@ @@ -158,7 +158,7 @@
158 </li> 158 </li>
159 <li> 159 <li>
160 <a href="javascript:void(0)"> 160 <a href="javascript:void(0)">
161 - <img src="{{image goods_images 100 134}}" alt="{{product_name}}"> 161 + <img src="{{image goods_images 100 134}}" alt="{{product_name}}" width="100" height="134">
162 </a> 162 </a>
163 </li> 163 </li>
164 <li class="pro-info"> 164 <li class="pro-info">
@@ -203,6 +203,13 @@ @@ -203,6 +203,13 @@
203 </div> 203 </div>
204 {{/if}} 204 {{/if}}
205 205
  206 +{{#if @root.freeShippingTip}}
  207 + <div class="fregit-remark">
  208 + <span>免运费</span>
  209 + {{@root.freeShippingTip}}
  210 + </div>
  211 +{{/if}}
  212 +
206 <div class="cart-statement"> 213 <div class="cart-statement">
207 <div class="actions"> 214 <div class="actions">
208 <div class="action"> 215 <div class="action">
@@ -229,4 +236,4 @@ @@ -229,4 +236,4 @@
229 <div class="checkout"> 236 <div class="checkout">
230 <span class="btn {{#unless selectedNum}}disable{{/unless}}" id="checkout_btn">去结算</span> 237 <span class="btn {{#unless selectedNum}}disable{{/unless}}" id="checkout_btn">去结算</span>
231 </div> 238 </div>
232 -</div>  
  239 +</div>