Authored by 郝肖肖

'merage-feature/orderShare'

@@ -120,6 +120,9 @@ const getCartDelList = (req, res, addsStr, delSkuId) => { @@ -120,6 +120,9 @@ const getCartDelList = (req, res, addsStr, delSkuId) => {
120 const formatCartGoods = (cartGoods, isAdvanceCart, inValid, isOffShelves, analysis) => { 120 const formatCartGoods = (cartGoods, isAdvanceCart, inValid, isOffShelves, analysis) => {
121 121
122 return _.map(cartGoods, (it) => { 122 return _.map(cartGoods, (it) => {
  123 + it.last_vip_price = transPrice(it.last_vip_price);
  124 + it.sales_price = transPrice(it.sales_price);
  125 + it.last_price = transPrice(it.last_price);
123 126
124 let goods = { 127 let goods = {
125 id: it.product_sku, 128 id: it.product_sku,
@@ -131,12 +134,12 @@ const formatCartGoods = (cartGoods, isAdvanceCart, inValid, isOffShelves, analys @@ -131,12 +134,12 @@ const formatCartGoods = (cartGoods, isAdvanceCart, inValid, isOffShelves, analys
131 imgCover: it.goods_images ? helpers.image(it.goods_images, 64, 88) : '', 134 imgCover: it.goods_images ? helpers.image(it.goods_images, 64, 88) : '',
132 productColor: it.factory_goods_name, 135 productColor: it.factory_goods_name,
133 productSize: it.size_name, 136 productSize: it.size_name,
134 - productPrice: transPrice(it.last_vip_price), // self::transPrice($value['real_price']); 137 + productPrice: it.sales_price,
135 productNum: Number(it.buy_number), 138 productNum: Number(it.buy_number),
136 storageNum: Number(it.storage_number), 139 storageNum: Number(it.storage_number),
137 isSoldOut: parseInt(it.storage_number, 10) === 0 || parseInt(it.off_shelves, 10) === 1, // 已售罄 140 isSoldOut: parseInt(it.storage_number, 10) === 0 || parseInt(it.off_shelves, 10) === 1, // 已售罄
138 - isVipPrice: it.sales_price !== it.last_vip_price && it.discount_tag === 'V',  
139 - isStuPrice: it.sales_price !== it.last_vip_price && it.discount_tag === 'S', 141 + isVipPrice: it.discount_tag === 'V',
  142 + isStuPrice: it.discount_tag === 'S',
140 yohoIcon: Number(it.get_yoho_coin) || 0, 143 yohoIcon: Number(it.get_yoho_coin) || 0,
141 productSubtotal: transPrice(it.last_vip_price * it.buy_number), 144 productSubtotal: transPrice(it.last_vip_price * it.buy_number),
142 promotionId: it.promotion_id || 0, 145 promotionId: it.promotion_id || 0,
@@ -144,6 +147,12 @@ const formatCartGoods = (cartGoods, isAdvanceCart, inValid, isOffShelves, analys @@ -144,6 +147,12 @@ const formatCartGoods = (cartGoods, isAdvanceCart, inValid, isOffShelves, analys
144 isAdvance: isAdvanceCart 147 isAdvance: isAdvanceCart
145 }; 148 };
146 149
  150 + // 划线的价格
  151 + if (it.last_vip_price < it.sales_price) {
  152 + goods.productPrice = it.last_vip_price;
  153 + goods.linePrice = it.sales_price; // 划线的价格
  154 + }
  155 +
147 if (it.min_buy_number) { 156 if (it.min_buy_number) {
148 goods.minBuyNumber = Number(it.min_buy_number); 157 goods.minBuyNumber = Number(it.min_buy_number);
149 158
@@ -173,14 +182,16 @@ const formatCartGoods = (cartGoods, isAdvanceCart, inValid, isOffShelves, analys @@ -173,14 +182,16 @@ const formatCartGoods = (cartGoods, isAdvanceCart, inValid, isOffShelves, analys
173 goods.inValid = true; 182 goods.inValid = true;
174 } else if (it.goods_type === 'gift') { // gift=>是否赠品 && it.isAdvanceBuy 183 } else if (it.goods_type === 'gift') { // gift=>是否赠品 && it.isAdvanceBuy
175 goods.isGift = true; 184 goods.isGift = true;
176 - goods.productPrice = transPrice(it.last_price); 185 + goods.productPrice = it.last_price;
  186 + goods.linePrice = it.sales_price; // 划线的价格
177 goods.productSubtotal = it.subtotal ? transPrice(it.subtotal) : goods.productPrice; 187 goods.productSubtotal = it.subtotal ? transPrice(it.subtotal) : goods.productPrice;
178 } else if (it.goods_type === 'price_gift') { // price_gift=>是否加价购 188 } else if (it.goods_type === 'price_gift') { // price_gift=>是否加价购
179 goods.isPriceGift = true; 189 goods.isPriceGift = true;
180 - goods.productPrice = transPrice(it.last_price); 190 + goods.productPrice = it.last_price;
  191 + goods.linePrice = it.sales_price; // 划线的价格
181 goods.productSubtotal = it.subtotal ? transPrice(it.subtotal) : goods.productPrice; 192 goods.productSubtotal = it.subtotal ? transPrice(it.subtotal) : goods.productPrice;
182 } else if (it.real_price === 0) { // 免单 193 } else if (it.real_price === 0) { // 免单
183 - goods.productPrice = transPrice(it.sales_price); 194 + goods.productPrice = it.sales_price;
184 goods.xForOne = true; 195 goods.xForOne = true;
185 196
186 // 分析用: 商品ID列表 197 // 分析用: 商品ID列表
@@ -88,9 +88,20 @@ const handlePaymentInfo = (d, address) => { @@ -88,9 +88,20 @@ const handlePaymentInfo = (d, address) => {
88 d.shopping_cart_data.hasCoin = _.round(d.yoho_coin * 100); // 有货币稀释 88 d.shopping_cart_data.hasCoin = _.round(d.yoho_coin * 100); // 有货币稀释
89 89
90 _.forEach(d.goods_list, g => { 90 _.forEach(d.goods_list, g => {
  91 + g.last_vip_price = g.last_vip_price && Number(g.last_vip_price).toFixed(2) || '';
  92 + g.sales_price = g.sales_price && Number(g.sales_price).toFixed(2) || '';
  93 +
91 // link to goods 94 // link to goods
92 g.linkToGoods = helper.urlFormat(`/product/pro_${g.product_id}_${g.goods_id}/${g.cn_alphabet}.html`, 95 g.linkToGoods = helper.urlFormat(`/product/pro_${g.product_id}_${g.goods_id}/${g.cn_alphabet}.html`,
93 '', 'item'); 96 '', 'item');
  97 + g.productPrice = g.sales_price;
  98 + g.isVipPrice = g.discount_tag === 'V';
  99 + g.isStuPrice = g.discount_tag === 'S';
  100 +
  101 + // 赠品、加价购
  102 + if (g.goods_type === 'gift' || g.goods_type === 'price_gift') {
  103 + g.productPrice = g.last_price;
  104 + }
94 }); 105 });
95 resData.goodsList = d.goods_list; 106 resData.goodsList = d.goods_list;
96 107
@@ -142,7 +142,16 @@ @@ -142,7 +142,16 @@
142 尺码:<span class="size">{{size_name}}</span> 142 尺码:<span class="size">{{size_name}}</span>
143 </td> 143 </td>
144 <td class="border-top price"> 144 <td class="border-top price">
145 - <span class="red">¥ {{round last_price 2}}</span> 145 + <p class="red">¥ {{round productPrice 2}}</p>
  146 + {{#if linePrice}}
  147 + <p class="line-through">¥ {{round linePrice 2}}</p>
  148 + {{/if}}
  149 + {{#isVipPrice}}
  150 + <p class="tip-message">(VIP)</p>
  151 + {{/isVipPrice}}
  152 + {{#isStuPrice}}
  153 + <p class="tip-message">(学生价)</p>
  154 + {{/isStuPrice}}
146 </td> 155 </td>
147 <td class="border-top">× {{buy_number}}</td> 156 <td class="border-top">× {{buy_number}}</td>
148 <td{{#if @first}} class="border-top"{{/if}}></td> 157 <td{{#if @first}} class="border-top"{{/if}}></td>
@@ -211,6 +211,16 @@ const setExpressNumber = (req, res, next) => { @@ -211,6 +211,16 @@ const setExpressNumber = (req, res, next) => {
211 211
212 }; 212 };
213 213
  214 +const refundCompute = (req, res, next) => {
  215 + let uid = req.user.uid;
  216 + let orderCode = req.body.orderCode;
  217 + let goods = req.body.goods;
  218 +
  219 + returnsModel.refundCompute(uid, orderCode, goods).then(d => {
  220 + res.json(d);
  221 + }).catch(next);
  222 +};
  223 +
214 module.exports = { 224 module.exports = {
215 index, 225 index,
216 refundApply, 226 refundApply,
@@ -224,5 +234,6 @@ module.exports = { @@ -224,5 +234,6 @@ module.exports = {
224 getDelivery, 234 getDelivery,
225 cancelRefund, 235 cancelRefund,
226 cancelChange, 236 cancelChange,
227 - setExpressNumber 237 + setExpressNumber,
  238 + refundCompute
228 }; 239 };
@@ -365,12 +365,29 @@ const getOrders = (uid, page, limit, type, isPage)=> { @@ -365,12 +365,29 @@ const getOrders = (uid, page, limit, type, isPage)=> {
365 newOrder.goods = _.get(order, 'order_goods', []).map((good) => { 365 newOrder.goods = _.get(order, 'order_goods', []).map((good) => {
366 let newGood = {}; 366 let newGood = {};
367 367
  368 + good.real_pay_price = good.real_pay_price && Number(good.real_pay_price).toFixed(2) || '';
  369 + good.sales_price = good.sales_price && Number(good.sales_price).toFixed(2) || '';
368 newGood.href = helpers.getUrlBySkc(good.product_skn); 370 newGood.href = helpers.getUrlBySkc(good.product_skn);
369 newGood.thumb = helpers.image(good.goods_image, 100, 100); 371 newGood.thumb = helpers.image(good.goods_image, 100, 100);
370 newGood.name = good.product_name; 372 newGood.name = good.product_name;
371 newGood.color = good.factory_color_name; 373 newGood.color = good.factory_color_name;
372 newGood.size = good.size_name; 374 newGood.size = good.size_name;
373 - newGood.price = good.goods_price; 375 +
  376 + newGood.price = good.sales_price;// 默认显示销售价
  377 + newGood.isVipPrice = good.discount_tag === 'V';
  378 + newGood.isStuPrice = good.discount_tag === 'S';
  379 +
  380 + // 划线的价格
  381 + if (good.real_pay_price < good.sales_price) {
  382 + newGood.price = good.real_pay_price;// 显示分摊价
  383 + newGood.linePrice = good.sales_price; // 划线的价格
  384 + }
  385 +
  386 + // 赠品、加价购
  387 + if (good.goods_type === 'gift' || good.goods_type === 'price_gift') {
  388 + newGood.price = good.real_pay_price;// 显示分摊价
  389 + newGood.linePrice = good.sales_price; // 划线的价格
  390 + }
374 391
375 let buyNum = _.parseInt(good.buy_number); 392 let buyNum = _.parseInt(good.buy_number);
376 let refundNum = _.parseInt(good.refund_num); 393 let refundNum = _.parseInt(good.refund_num);
@@ -759,19 +776,38 @@ const _getOrderDetail = co(function * (uid, orderId) { @@ -759,19 +776,38 @@ const _getOrderDetail = co(function * (uid, orderId) {
759 // 商品信息 776 // 商品信息
760 if (orderDetail.order_goods) { 777 if (orderDetail.order_goods) {
761 detail.goods = _.get(orderDetail, 'order_goods', []).map((good) => { 778 detail.goods = _.get(orderDetail, 'order_goods', []).map((good) => {
762 - return { 779 + good.real_pay_price = good.real_pay_price && Number(good.real_pay_price).toFixed(2) || '';
  780 + good.sales_price = good.sales_price && Number(good.sales_price).toFixed(2) || '';
  781 +
  782 + let newGood = {
763 url: helpers.getUrlBySkc(good.product_skn), 783 url: helpers.getUrlBySkc(good.product_skn),
764 img: helpers.image(good.goods_image, 60, 60), 784 img: helpers.image(good.goods_image, 60, 60),
765 name: good.product_name, 785 name: good.product_name,
766 color: good.factory_color_name, 786 color: good.factory_color_name,
767 size: good.size_name, 787 size: good.size_name,
768 - price: good.goods_price, 788 + price: good.sales_price, // 默认显示销售价
  789 + isVipPrice: good.discount_tag === 'V',
  790 + isStuPrice: good.discount_tag === 'S',
769 coin: good.yoho_give_coin, 791 coin: good.yoho_give_coin,
770 num: good.buy_number, 792 num: good.buy_number,
771 sum: good.goods_amount, 793 sum: good.goods_amount,
772 sku: good.product_sku, 794 sku: good.product_sku,
773 [_getGoodsTag(good.attribute, good.goods_type)]: true 795 [_getGoodsTag(good.attribute, good.goods_type)]: true
774 }; 796 };
  797 +
  798 + // 划线的价格
  799 + if (good.real_pay_price < good.sales_price) {
  800 + newGood.price = good.real_pay_price;// 显示分摊价
  801 + newGood.linePrice = good.sales_price; // 划线的价格
  802 + }
  803 +
  804 + // 赠品、加价购
  805 + if (good.goods_type === 'gift' || good.goods_type === 'price_gift') {
  806 + newGood.price = good.real_pay_price;// 显示分摊价
  807 + newGood.linePrice = good.sales_price; // 划线的价格
  808 + }
  809 +
  810 + return newGood;
775 }); 811 });
776 } 812 }
777 813
@@ -201,7 +201,6 @@ const getDeliveryAsync = (areaCode, uid, gender, channel) => { @@ -201,7 +201,6 @@ const getDeliveryAsync = (areaCode, uid, gender, channel) => {
201 return api.post('', options); 201 return api.post('', options);
202 }; 202 };
203 203
204 -  
205 /** 204 /**
206 * 发送站内信 205 * 发送站内信
207 * @param int $uid 206 * @param int $uid
@@ -228,6 +227,24 @@ const sendMessage = (uid, title, content, type, verifyKey, sendUid) =>{ @@ -228,6 +227,24 @@ const sendMessage = (uid, title, content, type, verifyKey, sendUid) =>{
228 return api.post('', options); 227 return api.post('', options);
229 }; 228 };
230 229
  230 +/**
  231 + * [退货结算]
  232 + * @param {[type]} uid [uid]
  233 + * @param {[type]} orderCode [订单号]
  234 + * @param {[type]} goods [商品详细]
  235 + * @return {[type]} [{}]
  236 + */
  237 +const refundComputeAsync = (uid, orderCode, goods) => {
  238 + let options = {
  239 + method: 'app.refund.compute',
  240 + order_code: orderCode,
  241 + uid: uid,
  242 + goods: goods
  243 + };
  244 +
  245 + return api.get('', options);
  246 +};
  247 +
231 module.exports = { 248 module.exports = {
232 getRefundGoodsAsync, 249 getRefundGoodsAsync,
233 refundSubmit, 250 refundSubmit,
@@ -241,5 +258,6 @@ module.exports = { @@ -241,5 +258,6 @@ module.exports = {
241 cancelRefundAsync, 258 cancelRefundAsync,
242 cancelChangeAsync, 259 cancelChangeAsync,
243 getDeliveryAsync, 260 getDeliveryAsync,
244 - setExpressNumberAsync 261 + setExpressNumberAsync,
  262 + refundComputeAsync
245 }; 263 };
@@ -41,12 +41,29 @@ const getProductUrlBySkc = (skn) => { @@ -41,12 +41,29 @@ const getProductUrlBySkc = (skn) => {
41 41
42 const setDetailGoods = (list) => { 42 const setDetailGoods = (list) => {
43 let resData = []; 43 let resData = [];
  44 + let goods;
44 45
45 _.forEach(list, value => { 46 _.forEach(list, value => {
46 - resData.push({ 47 +
  48 + goods = {
  49 + href: getProductUrlBySkc(value.product_id, value.goods_id, ''),
  50 + thumb: helpers.image(value.goods_image, 60, 60),
47 name: value.product_name || '', 51 name: value.product_name || '',
  52 + color: value.color_name,
  53 + size: value.size_name,
  54 + yoho_coin_cut_num: value.yoho_coin_cut_num,
  55 + real_pay_price: value.real_pay_price,
  56 + price: value.sales_price,
  57 + goods_type: value.goods_type,
48 reason: value.reason_name 58 reason: value.reason_name
49 - }); 59 + };
  60 +
  61 + if (value.real_pay_price < value.sales_price) {
  62 + goods.price = value.real_pay_price;// 显示分摊价
  63 + goods.linePrice = value.sales_price; // 划线的价格
  64 + }
  65 +
  66 + resData.push(goods);
50 }); 67 });
51 68
52 return resData; 69 return resData;
@@ -174,8 +191,7 @@ const getOrderRefund = (orderCode, uid) => { @@ -174,8 +191,7 @@ const getOrderRefund = (orderCode, uid) => {
174 if (result.data) { 191 if (result.data) {
175 let goods = []; 192 let goods = [];
176 let returnReason = result.data.return_reason, 193 let returnReason = result.data.return_reason,
177 - remarks = _.split(_.get(result, 'data.special_notice.remark', ''), ' ', 2), // 使用3个空格拆分  
178 - amount = 0; 194 + remarks = _.split(_.get(result, 'data.special_notice.remark', ''), ' ', 2); // 使用3个空格拆分
179 195
180 196
181 _.forEach(_.get(result, 'data.goods_list', []), value => { 197 _.forEach(_.get(result, 'data.goods_list', []), value => {
@@ -185,7 +201,8 @@ const getOrderRefund = (orderCode, uid) => { @@ -185,7 +201,8 @@ const getOrderRefund = (orderCode, uid) => {
185 name: value.product_name, 201 name: value.product_name,
186 color: value.factory_color_name, 202 color: value.factory_color_name,
187 size: value.size_name, 203 size: value.size_name,
188 - price: value.last_price, 204 + lastPrice: value.last_price,
  205 + price: value.real_pay_price,
189 skn: value.product_skn, 206 skn: value.product_skn,
190 skc: value.product_skc, 207 skc: value.product_skc,
191 sku: value.product_sku, 208 sku: value.product_sku,
@@ -194,8 +211,6 @@ const getOrderRefund = (orderCode, uid) => { @@ -194,8 +211,6 @@ const getOrderRefund = (orderCode, uid) => {
194 reason: returnReason 211 reason: returnReason
195 }; 212 };
196 213
197 - amount += parseInt(value.last_price, 10);  
198 -  
199 // tar note 为每个特殊商品都添加标识 214 // tar note 为每个特殊商品都添加标识
200 if (value.is_limit_skn === 'Y') { 215 if (value.is_limit_skn === 'Y') {
201 item.specialNoticeBo = { 216 item.specialNoticeBo = {
@@ -226,14 +241,7 @@ const getOrderRefund = (orderCode, uid) => { @@ -226,14 +241,7 @@ const getOrderRefund = (orderCode, uid) => {
226 241
227 Object.assign(resData, { 242 Object.assign(resData, {
228 goods: goods, 243 goods: goods,
229 - orderCode: orderCode,  
230 -  
231 - // 计算相关支付细节  
232 - amount: amount - _.get(result, 'data.yoho_coin_num', 0) -  
233 - _.get(result, 'data.coupon_amount', 0),  
234 - yohoCoin: result.data.yoho_coin_num,  
235 - coupon: result.data.coupon_amount,  
236 - cash: amount 244 + orderCode: orderCode
237 }); 245 });
238 246
239 _.forEach(result.data.return_amount_mode, (val, key) => { 247 _.forEach(result.data.return_amount_mode, (val, key) => {
@@ -329,6 +337,8 @@ const getRefundDetail = (applyId, uid) => { @@ -329,6 +337,8 @@ const getRefundDetail = (applyId, uid) => {
329 applyTime: data.create_time, 337 applyTime: data.create_time,
330 payMode: data.source_payment_type_desc || '', 338 payMode: data.source_payment_type_desc || '',
331 backMode: data.return_amount_mode_name || '', 339 backMode: data.return_amount_mode_name || '',
  340 + return_asset_desc: data.return_asset_desc,
  341 + return_amount: data.return_amount,
332 goods: setDetailGoods(data.goods_list) 342 goods: setDetailGoods(data.goods_list)
333 }; 343 };
334 344
@@ -336,7 +346,8 @@ const getRefundDetail = (applyId, uid) => { @@ -336,7 +346,8 @@ const getRefundDetail = (applyId, uid) => {
336 detail.express = { 346 detail.express = {
337 id: _.get(data, 'notice.express_id', ''), 347 id: _.get(data, 'notice.express_id', ''),
338 company: _.get(data, 'notice.express_company', ''), 348 company: _.get(data, 'notice.express_company', ''),
339 - number: _.get(data, 'notice.express_number', '') 349 + number: _.get(data, 'notice.express_number', ''),
  350 + title: _.get(data, 'notice.title', '请填写寄回快递单号,以便我们查询')
340 }; 351 };
341 } 352 }
342 353
@@ -396,7 +407,8 @@ const getChangeDetail = (applyId, uid) => { @@ -396,7 +407,8 @@ const getChangeDetail = (applyId, uid) => {
396 id: _.get(data, 'notice.express_id', ''), 407 id: _.get(data, 'notice.express_id', ''),
397 company: _.get(data, 'notice.express_company', ''), 408 company: _.get(data, 'notice.express_company', ''),
398 number: _.get(data, 'notice.express_number', ''), 409 number: _.get(data, 'notice.express_number', ''),
399 - expressDeadLine: _.get(data, 'notice.date', '') 410 + expressDeadLine: _.get(data, 'notice.date', ''),
  411 + title: _.get(data, 'notice.title', '请填写寄回快递单号,以便我们查询')
400 }; 412 };
401 } 413 }
402 414
@@ -525,7 +537,8 @@ const getOrderExchange = (orderCode, uid) => { @@ -525,7 +537,8 @@ const getOrderExchange = (orderCode, uid) => {
525 name: value.product_name, 537 name: value.product_name,
526 color: value.color_name, 538 color: value.color_name,
527 size: value.size_name, 539 size: value.size_name,
528 - price: value.last_price, 540 + lastPrice: value.last_price,
  541 + price: value.real_pay_price,
529 skn: value.product_skn, 542 skn: value.product_skn,
530 skc: value.product_skc, 543 skc: value.product_skc,
531 sku: value.product_sku, 544 sku: value.product_sku,
@@ -644,6 +657,10 @@ const setExpressNumber = (id, expressId, expressNumber, uid, expressCompany, isC @@ -644,6 +657,10 @@ const setExpressNumber = (id, expressId, expressNumber, uid, expressCompany, isC
644 }); 657 });
645 }; 658 };
646 659
  660 +const refundCompute = (uid, orderCode, goods) => {
  661 + return returnAPI.refundComputeAsync(uid, orderCode, goods);
  662 +};
  663 +
647 module.exports = { 664 module.exports = {
648 getReturnsList, // 我的订单,退换货列表 665 getReturnsList, // 我的订单,退换货列表
649 getOrderRefund, // 我的订单,申请退货 666 getOrderRefund, // 我的订单,申请退货
@@ -655,5 +672,6 @@ module.exports = { @@ -655,5 +672,6 @@ module.exports = {
655 getDelivery, // 获取换货方式 672 getDelivery, // 获取换货方式
656 getCancelRefund, // 取消退货申请 673 getCancelRefund, // 取消退货申请
657 getCancelChange, // 取消换货申请 674 getCancelChange, // 取消换货申请
658 - setExpressNumber // 设置快递 675 + setExpressNumber, // 设置快递
  676 + refundCompute // 退货结算
659 }; 677 };
@@ -91,6 +91,7 @@ router.post('/returns/getDelivery', tabsMiddleware.getCommonHeader, returnsContr @@ -91,6 +91,7 @@ router.post('/returns/getDelivery', tabsMiddleware.getCommonHeader, returnsContr
91 router.post('/returns/cancelRefund', tabsMiddleware.getCommonHeader, returnsController.cancelRefund);// 取消退货 91 router.post('/returns/cancelRefund', tabsMiddleware.getCommonHeader, returnsController.cancelRefund);// 取消退货
92 router.post('/returns/cancelChange', tabsMiddleware.getCommonHeader, returnsController.cancelChange);// 取消换货 92 router.post('/returns/cancelChange', tabsMiddleware.getCommonHeader, returnsController.cancelChange);// 取消换货
93 router.post('/returns/setExpressNumber', tabsMiddleware.getCommonHeader, returnsController.setExpressNumber);// 设置快递 93 router.post('/returns/setExpressNumber', tabsMiddleware.getCommonHeader, returnsController.setExpressNumber);// 设置快递
  94 +router.post('/returns/api/refundCompute', returnsController.refundCompute);
94 95
95 router.get('/returns/success', returnsController.index); 96 router.get('/returns/success', returnsController.index);
96 97
@@ -226,7 +226,6 @@ @@ -226,7 +226,6 @@
226 <a target="_blank" href="{{yohoCoinUrl}}"></a> 226 <a target="_blank" href="{{yohoCoinUrl}}"></a>
227 </th> 227 </th>
228 <th class="num">数量</th> 228 <th class="num">数量</th>
229 - <th class="sum">小计(元)</th>  
230 </thead> 229 </thead>
231 <tbody> 230 <tbody>
232 {{# goods}} 231 {{# goods}}
@@ -260,10 +259,23 @@ @@ -260,10 +259,23 @@
260 {{/if}} 259 {{/if}}
261 </p> 260 </p>
262 </td> 261 </td>
263 - <td>{{price}}</td> 262 + <td>
  263 + <p>{{price}}</p>
  264 + {{#if linePrice}}
  265 + <p class="line-through">{{linePrice}}</p>
  266 + {{/if}}
  267 + {{#isVipPrice}}
  268 + <p class="tip-message">(VIP)</p>
  269 + {{/isVipPrice}}
  270 + {{#isStuPrice}}
  271 + <p class="tip-message">(学生价)</p>
  272 + {{/isStuPrice}}
  273 + {{#if free}}
  274 + <span class="free-icon">免单</span>
  275 + {{/if}}
  276 + </td>
264 <td>{{coin}}</td> 277 <td>{{coin}}</td>
265 <td>{{num}}</td> 278 <td>{{num}}</td>
266 - <td>{{sum}}</td>  
267 </tr> 279 </tr>
268 {{/ goods}} 280 {{/ goods}}
269 </tbody> 281 </tbody>
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 <input type="hidden" value="{{skn}}" name="skn"> 33 <input type="hidden" value="{{skn}}" name="skn">
34 <input type="hidden" value="{{skc}}" name="skc"> 34 <input type="hidden" value="{{skc}}" name="skc">
35 <input type="hidden" value="{{sku}}" name="sku"> 35 <input type="hidden" value="{{sku}}" name="sku">
36 - <input type="hidden" value="{{price}}" name="price"> 36 + <input type="hidden" value="{{lastPrice}}" name="lastPrice">
37 <input type="hidden" value="{{goods_type_id}}" name="typeid"> 37 <input type="hidden" value="{{goods_type_id}}" name="typeid">
38 <input type="checkbox" checked="true"> 38 <input type="checkbox" checked="true">
39 {{/unless}} 39 {{/unless}}
@@ -154,7 +154,7 @@ @@ -154,7 +154,7 @@
154 <table id="goods-table" class="goods-list-table"> 154 <table id="goods-table" class="goods-list-table">
155 <tr> 155 <tr>
156 <th colspan="3">请选择退货商品</th> 156 <th colspan="3">请选择退货商品</th>
157 - <th>价(元)</th> 157 + <th>成交价(元)</th>
158 <th>退货原因</th> 158 <th>退货原因</th>
159 </tr> 159 </tr>
160 {{# goods}} 160 {{# goods}}
@@ -164,7 +164,7 @@ @@ -164,7 +164,7 @@
164 <input type="hidden" value="{{skn}}" name="skn"> 164 <input type="hidden" value="{{skn}}" name="skn">
165 <input type="hidden" value="{{skc}}" name="skc"> 165 <input type="hidden" value="{{skc}}" name="skc">
166 <input type="hidden" value="{{sku}}" name="sku"> 166 <input type="hidden" value="{{sku}}" name="sku">
167 - <input type="hidden" value="{{price}}" name="price"> 167 + <input type="hidden" value="{{lastPrice}}" name="lastPrice">
168 <input type="hidden" value="{{goods_type_id}}" name="typeid"> 168 <input type="hidden" value="{{goods_type_id}}" name="typeid">
169 {{#unless isLimitSkn}} 169 {{#unless isLimitSkn}}
170 <input type="checkbox" checked="true"> 170 <input type="checkbox" checked="true">
@@ -211,7 +211,7 @@ @@ -211,7 +211,7 @@
211 {{/ goods}} 211 {{/ goods}}
212 <tr> 212 <tr>
213 <td colspan="5"> 213 <td colspan="5">
214 - <p class="re-tips">订单金额:¥{{amount}} (¥{{cash}} 现金 - ¥{{yohoCoin}} 有货币 - ¥{{coupon}} 优惠券)</p> 214 + <p class="re-tips"></p>
215 </td> 215 </td>
216 </tr> 216 </tr>
217 </table> 217 </table>
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 {{/if}} 30 {{/if}}
31 <div class="detail-container"> 31 <div class="detail-container">
32 {{# express}} 32 {{# express}}
33 - <h2>请填写寄回快递单号,以便我们查询</h2> 33 + <h2>{{title}}</h2>
34 <div class="courier-code{{#unless id}} in-edit{{/unless}}"> 34 <div class="courier-code{{#unless id}} in-edit{{/unless}}">
35 <ul style="display: none;"> 35 <ul style="display: none;">
36 {{# expressList}} 36 {{# expressList}}
@@ -55,6 +55,71 @@ @@ -55,6 +55,71 @@
55 </p> 55 </p>
56 </div> 56 </div>
57 {{/ express}} 57 {{/ express}}
  58 +
  59 + <h2>商品清单</h2>
  60 + <div class="goods-bill">
  61 + <table>
  62 + <thead>
  63 + <tr>
  64 + <th class="product-info">商品信息</th>
  65 + <th class="good-price">单价(元)</th>
  66 + <th class="yoho-coin">
  67 + 返有货币
  68 + <a target="_blank" href="//www.yohobuy.com/help/detail?id=105"></a>
  69 + </th>
  70 + <th class="num">数量</th>
  71 + {{#unless isChange}}
  72 + <th class="sum">退款金额(元)</th>
  73 + {{/unless}}
  74 + </tr>
  75 + </thead>
  76 + {{# goods}}
  77 + <tr>
  78 + <td>
  79 + <a class="thumb-link" href="{{href}}" target="_blank">
  80 + <img class="thumb" src="{{image2 thumb}}">
  81 + {{!--
  82 + {{#isEqual goods_type 'gift'}}
  83 + <span class="freebie-tag">赠品</span>
  84 + {{/isEqual}}
  85 +
  86 + {{#isEqual goods_type 'price_gift'}}
  87 + <span class="advance-buy-tag">加价购</span>
  88 + {{/isEqual}}
  89 +
  90 + {{#isEqual goods_type 'advance'}}
  91 + <span class="presall-tag">预售</span>
  92 + {{/isEqual}}
  93 + --}}
  94 + </a>
  95 +
  96 + <p class="name-color-size">
  97 + <a class="name" href="{{href}}" target="_blank">{{name}}</a>
  98 + 颜色:{{color}} 尺码:{{size}}
  99 + {{> home/orders/order-goods-tags}}
  100 + </p>
  101 + </td>
  102 + <td>
  103 + <p class="red">{{round price 2}}</p>
  104 + {{#if linePrice}}
  105 + <p class="line-through">{{round linePrice 2}}</p>
  106 + {{/if}}
  107 + </td>
  108 + <td>{{yoho_coin_cut_num}}</td>
  109 + <td>1</td>
  110 + {{#unless ../isChange}}
  111 + <td>{{round real_pay_price 2}}</td>
  112 + {{/unless}}
  113 + </tr>
  114 + {{/goods}}
  115 + <tr>
  116 + <td colspan="5">
  117 + <p class="re-tips">{{#if return_amount}}退款总金额:¥{{return_amount}} {{#if return_asset_desc}}({{return_asset_desc}}){{/if}}<span class="iconfont icon-tip-help">&#xe6d6;</span>{{/if}}</p>
  118 + </td>
  119 + </tr>
  120 + </table>
  121 + </div>
  122 +
58 <h2>详细信息</h2> 123 <h2>详细信息</h2>
59 <div class="main-detail"> 124 <div class="main-detail">
60 <table> 125 <table>
@@ -60,9 +60,17 @@ @@ -60,9 +60,17 @@
60 </span> 60 </span>
61 </div> 61 </div>
62 </div> 62 </div>
63 - <div class="price{{#if free}} free-price{{/if}}">  
64 - <em>{{price}}</em>  
65 - 63 + <div class="price">
  64 + <p>{{price}}</p>
  65 + {{#if linePrice}}
  66 + <p class="line-through">{{linePrice}}</p>
  67 + {{/if}}
  68 + {{#isVipPrice}}
  69 + <p class="tip-message">(VIP)</p>
  70 + {{/isVipPrice}}
  71 + {{#isStuPrice}}
  72 + <p class="tip-message">(学生价)</p>
  73 + {{/isStuPrice}}
66 {{#if free}} 74 {{#if free}}
67 <span class="free-icon">免单</span> 75 <span class="free-icon">免单</span>
68 {{/if}} 76 {{/if}}
@@ -11,7 +11,7 @@ const isTest = process.env.NODE_ENV === 'test'; @@ -11,7 +11,7 @@ const isTest = process.env.NODE_ENV === 'test';
11 11
12 module.exports = { 12 module.exports = {
13 app: 'web', 13 app: 'web',
14 - appVersion: '5.7.1', // 调用api的版本 14 + appVersion: '5.8.0', // 调用api的版本
15 port: 6002, 15 port: 6002,
16 siteUrl: 'http://www.yohobuy.com', 16 siteUrl: 'http://www.yohobuy.com',
17 cookieDomain: '.yohobuy.com', 17 cookieDomain: '.yohobuy.com',
@@ -66,7 +66,10 @@ @@ -66,7 +66,10 @@
66 {{/eq}} 66 {{/eq}}
67 </p> 67 </p>
68 </div> 68 </div>
69 - <div class="product-price td" style="width:148px;">¥{{productPrice}} 69 + <div class="product-price td {{#if linePrice}}line-margin-top{{/if}}" style="width:148px;">¥{{productPrice}}
  70 + {{#if linePrice}}
  71 + <p class="line-through">¥{{linePrice}}</p>
  72 + {{/if}}
70 {{#isVipPrice}} 73 {{#isVipPrice}}
71 <p class="tip-message">(VIP)</p> 74 <p class="tip-message">(VIP)</p>
72 {{/isVipPrice}} 75 {{/isVipPrice}}
  1 +{{#if return_amount}}退款总金额:¥{{return_amount}} {{#if return_asset_desc}}({{return_asset_desc}}){{/if}}<span class="iconfont icon-tip-help">&#xe6d6;</span>{{/if}}
@@ -7,6 +7,8 @@ var $ = require('yoho-jquery'), @@ -7,6 +7,8 @@ var $ = require('yoho-jquery'),
7 Addr = require('./common-address'), 7 Addr = require('./common-address'),
8 _dialog = require('../common/dialog'); 8 _dialog = require('../common/dialog');
9 9
  10 +var reTipsHbs = require('hbs/home/orders/re-tips.hbs');
  11 +
10 var stringHandle = require('../common/stringHandle'); 12 var stringHandle = require('../common/stringHandle');
11 13
12 var $goodsTable = $('#goods-table'), 14 var $goodsTable = $('#goods-table'),
@@ -75,6 +77,48 @@ if (defaultPhone) { @@ -75,6 +77,48 @@ if (defaultPhone) {
75 $exchange.find('input[name="phone"]').val(disPhone); 77 $exchange.find('input[name="phone"]').val(disPhone);
76 } 78 }
77 79
  80 +// 退货结算
  81 +function getRefundCompute() {
  82 + var goods = [];
  83 +
  84 + if (!pageType) {
  85 + return false;
  86 + }
  87 +
  88 + $goodsTable.find('input[type="checkbox"]:checked').each(function() {
  89 + var $par = $(this).closest('tr'),
  90 + goodsInfo;
  91 +
  92 + goodsInfo = {
  93 + product_skn: $par.find('input[name="skn"]').val(),
  94 + product_skc: $par.find('input[name="skc"]').val(),
  95 + product_sku: $par.find('input[name="sku"]').val(),
  96 + goods_type: $par.find('input[name="typeid"]').val(),
  97 + last_price: $par.find('input[name="lastPrice"]').val()
  98 + };
  99 +
  100 + goods.push(goodsInfo);
  101 + });
  102 +
  103 + if (goods.length <= 0) {
  104 + $('.re-tips').html(reTipsHbs({}));
  105 + return false;
  106 + }
  107 +
  108 + $.ajax({
  109 + type: 'POST',
  110 + url: '/home/returns/api/refundCompute',
  111 + data: {
  112 + orderCode: orderCode,
  113 + goods: JSON.stringify(goods)
  114 + }
  115 + }).then(function(d) {
  116 + if (d.code === 200) {
  117 + $('.re-tips').html(reTipsHbs(d.data));
  118 + }
  119 + });
  120 +}
  121 +
78 function syncRefundMode(code) { 122 function syncRefundMode(code) {
79 $.ajax({ 123 $.ajax({
80 type: 'POST', 124 type: 'POST',
@@ -236,6 +280,8 @@ $checkBox.change(function() { @@ -236,6 +280,8 @@ $checkBox.change(function() {
236 $par.find('select').val(0).prop('disabled', true); 280 $par.find('select').val(0).prop('disabled', true);
237 $par.next().hide(); 281 $par.next().hide();
238 } 282 }
  283 +
  284 + getRefundCompute();
239 }); 285 });
240 286
241 $goodsTable.on('change', '.exchange-color', function() { 287 $goodsTable.on('change', '.exchange-color', function() {
@@ -374,7 +420,7 @@ function packGoogsList() { @@ -374,7 +420,7 @@ function packGoogsList() {
374 product_skc: $par.find('input[name="skc"]').val(), 420 product_skc: $par.find('input[name="skc"]').val(),
375 product_sku: $par.find('input[name="sku"]').val(), 421 product_sku: $par.find('input[name="sku"]').val(),
376 goods_type: $par.find('input[name="typeid"]').val(), 422 goods_type: $par.find('input[name="typeid"]').val(),
377 - last_price: $par.find('input[name="price"]').val(), 423 + last_price: $par.find('input[name="lastPrice"]').val(),
378 reason: $par.find('.return-reason').val() * 1 424 reason: $par.find('.return-reason').val() * 1
379 }; 425 };
380 426
@@ -633,3 +679,30 @@ $('.save-btn').click(function() { @@ -633,3 +679,30 @@ $('.save-btn').click(function() {
633 } 679 }
634 680
635 }); 681 });
  682 +
  683 +// 退货结算
  684 +getRefundCompute();
  685 +
  686 +$('.re-tips').on('click', '.icon-tip-help', function() {
  687 + var tipHelpDialog, content;
  688 +
  689 + content = '<div class="tip-title">退款金额说明</div>';
  690 + content += '<div class="tip-content">';
  691 + content += '订单中包含的促销活动、优惠券、有货币、红包、礼品卡金额均按比例分摊至各件商品。';
  692 + content += '</div>';
  693 +
  694 + tipHelpDialog = new Dialog({
  695 + content: content,
  696 + className: 'icon-tip-help-dialog',
  697 + btns: [
  698 + {
  699 + id: 'tip-btn-sure',
  700 + btnClass: ['tip-btn'],
  701 + name: '确定',
  702 + cb: function() {
  703 + tipHelpDialog.close();
  704 + }
  705 + }
  706 + ]
  707 + }).show();
  708 +});
@@ -1224,6 +1224,16 @@ @@ -1224,6 +1224,16 @@
1224 .tip-message { 1224 .tip-message {
1225 margin-top: -2px; 1225 margin-top: -2px;
1226 } 1226 }
  1227 +
  1228 + .line-through {
  1229 + font-weight: normal;
  1230 + text-decoration: line-through;
  1231 + color: #9a9a9a;
  1232 + }
  1233 + }
  1234 +
  1235 + .line-margin-top {
  1236 + padding-top: 15px !important;
1227 } 1237 }
1228 1238
1229 .sale-info { 1239 .sale-info {
@@ -729,6 +729,21 @@ @@ -729,6 +729,21 @@
729 729
730 .price { 730 .price {
731 font-size: 14px; 731 font-size: 14px;
  732 +
  733 + p {
  734 + line-height: 18px;
  735 + }
  736 + }
  737 +
  738 + p.line-through {
  739 + font-weight: normal;
  740 + text-decoration: line-through;
  741 + color: #9a9a9a;
  742 + }
  743 +
  744 + p.tip-message {
  745 + font-weight: normal;
  746 + color: #ff575c;
732 } 747 }
733 748
734 .border-top { 749 .border-top {
@@ -148,10 +148,6 @@ @@ -148,10 +148,6 @@
148 padding: 5px; 148 padding: 5px;
149 font-weight: bold; 149 font-weight: bold;
150 150
151 - &.free-price em {  
152 - text-decoration: line-through;  
153 - }  
154 -  
155 .free-icon { 151 .free-icon {
156 display: block; 152 display: block;
157 width: 37px; 153 width: 37px;
@@ -165,6 +161,21 @@ @@ -165,6 +161,21 @@
165 border: 1px solid #80bb45; 161 border: 1px solid #80bb45;
166 border-radius: 3px; 162 border-radius: 3px;
167 } 163 }
  164 +
  165 + p {
  166 + line-height: 18px;
  167 + }
  168 +
  169 + p.line-through {
  170 + font-weight: normal;
  171 + text-decoration: line-through;
  172 + color: #9a9a9a;
  173 + }
  174 +
  175 + p.tip-message {
  176 + font-weight: normal;
  177 + color: #ff575c;
  178 + }
168 } 179 }
169 180
170 .count { 181 .count {
@@ -73,9 +73,34 @@ @@ -73,9 +73,34 @@
73 .content { 73 .content {
74 padding: 10px 20px 20px; 74 padding: 10px 20px 20px;
75 75
  76 + .free-icon {
  77 + display: block;
  78 + width: 37px;
  79 + height: 18px;
  80 + line-height: 18px;
  81 + font-size: 12px;
  82 + text-align: center;
  83 + color: #80bb45;
  84 + background: #e7fbc0;
  85 + margin: 5px auto;
  86 + border: 1px solid #80bb45;
  87 + border-radius: 3px;
  88 + }
  89 +
76 p { 90 p {
77 line-height: 18px; 91 line-height: 18px;
78 } 92 }
  93 +
  94 + p.line-through {
  95 + font-weight: normal;
  96 + text-decoration: line-through;
  97 + color: #9a9a9a;
  98 + }
  99 +
  100 + p.tip-message {
  101 + font-weight: normal;
  102 + color: #ff575c;
  103 + }
79 } 104 }
80 105
81 .order-progress { 106 .order-progress {
@@ -420,6 +445,7 @@ @@ -420,6 +445,7 @@
420 .good-list { 445 .good-list {
421 table { 446 table {
422 border-collapse: collapse; 447 border-collapse: collapse;
  448 + width: 100%;
423 } 449 }
424 450
425 thead { 451 thead {
@@ -565,7 +591,7 @@ @@ -565,7 +591,7 @@
565 display: inline-block; 591 display: inline-block;
566 height: 22px; 592 height: 22px;
567 width: 22px; 593 width: 22px;
568 - vertical-align: text-bottom; 594 + vertical-align: middle;
569 } 595 }
570 596
571 .success-icon { 597 .success-icon {
@@ -148,7 +148,17 @@ @@ -148,7 +148,17 @@
148 .re-tips { 148 .re-tips {
149 text-align: left; 149 text-align: left;
150 padding-left: 10px; 150 padding-left: 10px;
151 - color: #666; 151 + color: #444;
  152 + min-height: 15px;
  153 + font-size: 13px;
  154 +
  155 + .icon-tip-help {
  156 + font-size: 15px;
  157 + color: #d1071f;
  158 + vertical-align: top;
  159 + margin-left: 5px;
  160 + cursor: pointer;
  161 + }
152 } 162 }
153 163
154 .problem-description { 164 .problem-description {
@@ -454,3 +464,39 @@ @@ -454,3 +464,39 @@
454 margin-bottom: 25px; 464 margin-bottom: 25px;
455 } 465 }
456 } 466 }
  467 +
  468 +.icon-tip-help-dialog {
  469 + text-align: center;
  470 + width: 370px;
  471 +
  472 + .close {
  473 + top: 12px;
  474 +
  475 + .iconfont {
  476 + font-size: 30px;
  477 + }
  478 + }
  479 +
  480 + .tip-title {
  481 + color: #444;
  482 + font-size: 24px;
  483 + padding: 30px 0;
  484 + font-weight: bold;
  485 + }
  486 +
  487 + .tip-content {
  488 + color: #444;
  489 + font-size: 14px;
  490 + line-height: 24px;
  491 + }
  492 +
  493 + .tip-btn {
  494 + background: #000;
  495 + color: #fff;
  496 + min-width: 130px;
  497 + }
  498 +
  499 + .btns {
  500 + margin-top: 30px;
  501 + }
  502 +}
@@ -45,7 +45,7 @@ @@ -45,7 +45,7 @@
45 font-size: 12px; 45 font-size: 12px;
46 color: #333; 46 color: #333;
47 font-weight: 400; 47 font-weight: 400;
48 - margin-bottom: 10px; 48 + margin: 10px 0;
49 } 49 }
50 50
51 .courier-code { 51 .courier-code {
@@ -54,6 +54,10 @@ @@ -54,6 +54,10 @@
54 54
55 .express-edit-box { 55 .express-edit-box {
56 display: none; 56 display: none;
  57 +
  58 + select {
  59 + height: 21px;
  60 + }
57 } 61 }
58 62
59 button { 63 button {
@@ -68,6 +72,121 @@ @@ -68,6 +72,121 @@
68 72
69 .express-edit-box { 73 .express-edit-box {
70 display: block; 74 display: block;
  75 +
  76 + select {
  77 + height: 21px;
  78 + }
  79 + }
  80 + }
  81 +
  82 + .goods-bill {
  83 + table {
  84 + border-collapse: collapse;
  85 + width: 100%;
  86 + }
  87 +
  88 + thead {
  89 + height: 25px;
  90 + line-height: 25px;
  91 + background: #000;
  92 + padding: 2px 5px;
  93 + color: #fff;
  94 + }
  95 +
  96 + th,
  97 + td {
  98 + padding: 5px;
  99 + text-align: center;
  100 + border: 1px solid #e6e6e6;
  101 + }
  102 +
  103 + th {
  104 + border-color: #000;
  105 + }
  106 +
  107 + .product-info {
  108 + width: 314px;
  109 + }
  110 +
  111 + .good-price,
  112 + .num,
  113 + .sum {
  114 + width: 91px;
  115 + }
  116 +
  117 + .yoho-coin {
  118 + width: 100px;
  119 +
  120 + a {
  121 + display: inline-block;
  122 + width: 12px;
  123 + height: 12px;
  124 + background: resolve(home/coin-help.png);
  125 + vertical-align: text-top;
  126 + }
  127 + }
  128 +
  129 + .thumb-link {
  130 + float: left;
  131 + position: relative;
  132 + margin-left: 5px;
  133 + margin-right: 10px;
  134 + }
  135 +
  136 + .thumb {
  137 + display: block;
  138 + width: 60px;
  139 + height: 60px;
  140 + }
  141 +
  142 + .name-color-size {
  143 + float: left;
  144 + color: #999;
  145 + padding-top: 12px;
  146 + text-align: left;
  147 +
  148 + b {
  149 + display: inline-block;
  150 + vertical-align: bottom;
  151 + max-width: 130px;
  152 + overflow: hidden;
  153 + text-overflow: ellipsis;
  154 + white-space: nowrap;
  155 + font-style: normal;
  156 + font-weight: 400;
  157 + }
  158 + }
  159 +
  160 + .name {
  161 + display: block;
  162 + color: #468fa2;
  163 + line-height: 18px;
  164 + text-align: left;
  165 + max-width: 230px;
  166 +
  167 + @mixin ellipsis;
  168 + }
  169 +
  170 + .re-tips {
  171 + text-align: left;
  172 + padding-left: 10px;
  173 + color: #444;
  174 + min-height: 15px;
  175 + font-size: 13px;
  176 +
  177 + .icon-tip-help {
  178 + font-size: 15px;
  179 + color: #d1071f;
  180 + vertical-align: top;
  181 + margin-left: 5px;
  182 + cursor: pointer;
  183 + }
  184 + }
  185 +
  186 + p.line-through {
  187 + font-weight: normal;
  188 + text-decoration: line-through;
  189 + color: #9a9a9a;
71 } 190 }
72 } 191 }
73 192
@@ -110,4 +229,16 @@ @@ -110,4 +229,16 @@
110 display: none; 229 display: none;
111 } 230 }
112 } 231 }
  232 +
  233 + .cancel-return {
  234 + padding-left: 12px;
  235 +
  236 + a {
  237 + color: #fff;
  238 + border-radius: 4px;
  239 + padding: 4px 8px;
  240 + background: #000;
  241 + display: inline-block;
  242 + }
  243 + }
113 } 244 }