Authored by 毕凯

Merge branch 'release/6.5.2' into gray

1 <div class="feature-page yoho-page" data-id="{{activity_id}}"> 1 <div class="feature-page yoho-page" data-id="{{activity_id}}">
2 {{#unless content.visiable}} 2 {{#unless content.visiable}}
3 - <div class="over">  
4 - <p>此活动已结束</p>  
5 - <p>稍后自动跳转更多其他精彩活动...</p>  
6 - </div>  
7 - {{else}}  
8 - {{#content.webShare}}  
9 - <input id="shareLink" type="hidden" value="{{url}}">  
10 - <input id="shareDesc" type="hidden" value="{{content}}">  
11 - <input id="shareImg" type="hidden" value="{{pic}}">  
12 - <input id="shareTitle" type="hidden" value="{{title}}">  
13 - {{/content.webShare}}  
14 - {{#content.floors}}  
15 - {{#isEqualOr type 'sidebar'}}  
16 - {{! 侧悬浮}}  
17 - <div id="sidebar" pageid="{{param.sidebarPageId}}"></div>  
18 - {{/isEqualOr}}  
19 - {{#isEqualOr type '' 'common_floor' 'fix'}}  
20 - {{! 普通楼层 顶悬浮}}  
21 - <div {{#if param.anchorname}}id="{{param.anchorname}}"{{/if}} {{#if param.tabname}}tabname="{{param.tabname}}"{{/if}} {{#if id}}data-id="{{id}}"{{/if}} class="floor {{type}} {{#if hide}}hide{{/if}}"  
22 - style="{{#if param.bgcolor}}background-color:{{param.bgcolor}}{{/if}}">  
23 - {{#if param.bgimg}}  
24 - {{#isLazyLoad type @index}}  
25 - <img class="lazy" data-original="{{image2 param.bgimg q=85}}"> 3 + <div class="over">
  4 + <p>此活动已结束</p>
  5 + <p>稍后自动跳转更多其他精彩活动...</p>
  6 + </div>
  7 + {{else}}
  8 + {{#content.webShare}}
  9 + <input id="shareLink" type="hidden" value="{{url}}">
  10 + <input id="shareDesc" type="hidden" value="{{content}}">
  11 + <input id="shareImg" type="hidden" value="{{pic}}">
  12 + <input id="shareTitle" type="hidden" value="{{title}}">
  13 + {{/content.webShare}}
  14 + {{#content.floors}}
  15 + {{#isEqualOr type 'sidebar'}}
  16 + {{! 侧悬浮}}
  17 + {{#isEqualOr param.linkTarget '1' '3'}}
  18 + <a href="{{param.sidebarPageId}}" class="sidebar-link" target="_blank">
  19 + <img src="{{param.icon}}">
  20 + </a>
  21 + {{/isEqualOr}}
  22 + {{#isEqualOr param.linkTarget '2'}}
  23 + <div id="sidebar" pageid="{{param.sidebarPageId}}">
  24 + <img src="{{param.icon}}">
  25 + </div>
  26 + {{/isEqualOr}}
  27 + {{/isEqualOr}}
  28 + {{#isEqualOr type '' 'common_floor' 'fix'}}
  29 + {{! 普通楼层 顶悬浮}}
  30 + <div {{#if param.anchorname}} id="{{param.anchorname}}" {{/if}} {{#if param.tabname}} tabname="{{param.tabname}}" {{/if}}
  31 + {{#if id}} data-id="{{id}}" {{/if}} class="floor {{type}} {{#if hide}}hide{{/if}}" style="{{#if param.bgcolor}}background-color:{{param.bgcolor}}{{/if}}">
  32 + {{#if param.bgimg}}
  33 + {{#isLazyLoad type @index}}
  34 + <img class="lazy" data-original="{{image2 param.bgimg q=85}}">
26 {{else}} 35 {{else}}
27 <img src="{{image2 param.bgimg q=85}}"> 36 <img src="{{image2 param.bgimg q=85}}">
28 - {{/isLazyLoad}}  
29 - {{/if}}  
30 - {{#component}}  
31 - {{#isEqualOr type 'link'}}  
32 - {{! 普通组件}}  
33 - <a class="anchor {{#if modalImg}}modalimg{{/if}}" style="{{styleFormat this percent=1}}" href="{{#if url}}{{url}}{{else}}javascript:void(0);{{/if}}" fp="{{getAnalysis ../this @index}}"></a>  
34 - {{#if modalImg}}  
35 - <div class="modal">  
36 - <span class="modal-close"></span>  
37 - <img class="modal-img lazy" data-original="{{image2 modalImg q=85}}">  
38 - </div>  
39 - {{/if}}  
40 - {{/isEqualOr}} 37 + {{/isLazyLoad}}
  38 + {{/if}}
  39 + {{#component}}
  40 + {{#isEqualOr type 'link'}}
  41 + {{! 普通组件}}
  42 + <a class="anchor {{#if modalImg}}modalimg{{/if}}" style="{{styleFormat this percent=1}}" href="{{#if url}}{{url}}{{else}}javascript:void(0);{{/if}}"
  43 + {{#isEqualOr linkTarget '3'}} target="_blank" {{/isEqualOr}} fp="{{getAnalysis ../this @index}}"></a>
  44 + {{#if modalImg}}
  45 + <div class="modal">
  46 + <span class="modal-close"></span>
  47 + <img class="modal-img lazy" data-original="{{image2 modalImg q=85}}">
  48 + </div>
  49 + {{/if}}
  50 + {{/isEqualOr}}
41 51
42 - {{#isEqualOr type 'coupon'}}  
43 - {{! 优惠券}}  
44 - <a class="anchor yoho-conpon" style="{{styleFormat this percent=1}}" data-persenal-enable="{{persenal_enable}}" data-token="{{token}}" href="{{#if url}}{{url}}{{else}}javascript:void(0);{{/if}}"  
45 - fp="{{getAnalysis ../this @index}}"></a>  
46 - {{/isEqualOr}} 52 + {{#isEqualOr type 'coupon'}}
  53 + {{! 优惠券}}
  54 + <a class="anchor yoho-conpon" style="{{styleFormat this percent=1}}" data-persenal-enable="{{persenal_enable}}" data-token="{{token}}"
  55 + href="{{#if url}}{{url}}{{else}}javascript:void(0);{{/if}}" fp="{{getAnalysis ../this @index}}"></a>
  56 + {{/isEqualOr}}
47 57
48 - {{#isEqualOr type 'yohoCoin'}}  
49 - {{! 有货币}}  
50 - <a class="anchor yoho-coin" style="{{styleFormat this percent=1}}" data-token="{{token}}" href="{{#if url}}{{url}}{{else}}javascript:void(0);{{/if}}" fp="{{getAnalysis ../this @index}}"></a>  
51 - {{/isEqualOr}} 58 + {{#isEqualOr type 'yohoCoin'}}
  59 + {{! 有货币}}
  60 + <a class="anchor yoho-coin" style="{{styleFormat this percent=1}}" data-token="{{token}}" href="{{#if url}}{{url}}{{else}}javascript:void(0);{{/if}}"
  61 + fp="{{getAnalysis ../this @index}}"></a>
  62 + {{/isEqualOr}}
52 63
53 - {{#isEqualOr type 'video'}}  
54 - {{! 视频}}  
55 - <a class="anchor video-bg" style="{{styleFormat this percent=1}}" href="{{#if url}}{{url}}{{else}}javascript:void(0);{{/if}}" fp="{{getAnalysis ../this @index}}"></a>  
56 - <div class="video-android-close hide"></div>  
57 - <div class="video-android-bg hide"></div>  
58 - <video class="video" controls loop preload="meta" name="media">  
59 - <source src="{{videoSrc}}">  
60 - </video>  
61 - {{/isEqualOr}} 64 + {{#isEqualOr type 'video'}}
  65 + {{! 视频}}
  66 + <a class="anchor video-bg" style="{{styleFormat this percent=1}}" href="{{#if url}}{{url}}{{else}}javascript:void(0);{{/if}}"
  67 + fp="{{getAnalysis ../this @index}}"></a>
  68 + <div class="video-android-close hide"></div>
  69 + <div class="video-android-bg hide"></div>
  70 + <video class="video" controls loop preload="meta" name="media">
  71 + <source src="{{videoSrc}}">
  72 + </video>
  73 + {{/isEqualOr}}
62 74
63 - {{#isEqualOr type 'marquee' 'swiper'}}  
64 - {{! 轮播/滑动}}  
65 - <div class="swiper-container {{type}}" data-loop="{{loop}}" {{#if spaceBetween}}data-spacebetween="{{spaceBetween}}"{{/if}} {{#if autoplay}}data-autoplay="{{autoplay}}"{{/if}}>  
66 - <div class="swiper-wrapper">  
67 - {{#list}}  
68 - <div class="swiper-slide" style="{{styleFormat this percent=1}}">  
69 - <img src="{{image2 src q=85}}">  
70 - <a class="anchor" href="{{#if link}}{{link}}{{else}}javascript:void(0);{{/if}}" fp="{{getAnalysis ../../this @index}}"></a>  
71 - </div>  
72 - {{/list}} 75 + {{#isEqualOr type 'marquee' 'swiper'}}
  76 + {{! 轮播/滑动}}
  77 + <div class="swiper-container {{type}}" data-loop="{{loop}}" {{#if spaceBetween}} data-spacebetween="{{spaceBetween}}" {{/if}}
  78 + {{#if autoplay}} data-autoplay="{{autoplay}}" {{/if}}>
  79 + <div class="swiper-wrapper">
  80 + {{#list}}
  81 + <div class="swiper-slide" style="{{styleFormat this percent=1}}">
  82 + <img src="{{image2 src q=85}}">
  83 + <a class="anchor" href="{{#if link}}{{link}}{{else}}javascript:void(0);{{/if}}" fp="{{getAnalysis ../../this @index}}"></a>
  84 + </div>
  85 + {{/list}}
  86 + </div>
  87 + {{#isEqualOr type 'marquee'}}
  88 + <div class="swiper-pagination"></div>
  89 + {{/isEqualOr}}
73 </div> 90 </div>
74 - {{#isEqualOr type 'marquee'}}  
75 - <div class="swiper-pagination"></div>  
76 - {{/isEqualOr}}  
77 - </div>  
78 - {{/isEqualOr}} 91 + {{/isEqualOr}}
79 92
80 - {{#isEqualOr type 'tab'}}  
81 - {{! tab}}  
82 - <div class="tab-container">  
83 - {{#repeat count}}  
84 - <a class="anchor {{#if @first}}active{{/if}}" tab={{tabName @index ../tabnames}} style="{{tabStyle @index ../count}}"></a>  
85 - {{/repeat}}  
86 - </div>  
87 - {{/isEqualOr}} 93 + {{#isEqualOr type 'tab'}}
  94 + {{! tab}}
  95 + <div class="tab-container">
  96 + {{#repeat count}}
  97 + <a class="anchor {{#if @first}}active{{/if}}" tab= {{tabName @index ../tabnames}} style="{{tabStyle @index ../count}}"></a>
  98 + {{/repeat}}
  99 + </div>
  100 + {{/isEqualOr}}
88 101
89 - {{#isEqualOr type 'shopGroup'}}  
90 - {{!-- 店铺组 --}}  
91 - {{> feature/shop-group}}  
92 - {{/isEqualOr}} 102 + {{#isEqualOr type 'shopGroup'}}
  103 + {{!-- 店铺组 --}}
  104 + {{> feature/shop-group}}
  105 + {{/isEqualOr}}
93 106
94 - {{#isEqualOr type 'productGroup'}}  
95 - {{! 商品池}}  
96 - {{#isEqualOr newStyle '1'}}  
97 - {{> feature/product-new-style}}  
98 - {{^}}  
99 - {{> feature/product-old-style}} 107 + {{#isEqualOr type 'productGroup'}}
  108 + {{! 商品池}}
  109 + {{#isEqualOr newStyle '1'}}
  110 + {{> feature/product-new-style}} {{^}} {{> feature/product-old-style}}
  111 + {{/isEqualOr}}
100 {{/isEqualOr}} 112 {{/isEqualOr}}
101 - {{/isEqualOr}}  
102 - {{/component}}  
103 - </div>  
104 - {{/isEqualOr}}  
105 - {{#isEqualOr type 'bottombar'}}  
106 - <div class="floor common_floor" style="width:100%;height:{{height}}rem"></div>  
107 - {{> feature/bottom-fix}}  
108 - {{/isEqualOr}}  
109 - {{/content.floors}} 113 + {{/component}}
  114 + </div>
  115 + {{/isEqualOr}}
  116 + {{#isEqualOr type 'bottombar'}}
  117 + <div class="floor common_floor" style="width:100%;height:{{height}}rem"></div>
  118 + {{> feature/bottom-fix}}
  119 + {{/isEqualOr}}
  120 + {{/content.floors}}
110 {{/unless}} 121 {{/unless}}
111 </div> 122 </div>
1 -{{#if content.thumbnail}}  
2 -<img class="sidebar-img" src="{{image2 content.thumbnail q=85}}">  
3 -{{/if}}  
4 <div class="sidebar"> 1 <div class="sidebar">
5 <div class="sidebar-content"> 2 <div class="sidebar-content">
6 {{#content.floors}} 3 {{#content.floors}}
@@ -8,13 +8,17 @@ @@ -8,13 +8,17 @@
8 {{/if}} 8 {{/if}}
9 <div class="show-area" id="bottomShowArea"> 9 <div class="show-area" id="bottomShowArea">
10 {{#component}} 10 {{#component}}
11 - <div class="per-show hide" style="width: {{width}}%;left:{{left}}%;bottom:{{../height}}rem" id="bottomShow{{url}}-{{@index}}"></div> 11 + <div class="per-show hide" style="width: {{width}}%;left:{{left}}%;bottom:{{../height}}rem"{{#isEqualOr linkTarget '2'}} id="bottomShow{{url}}-{{@index}}"{{/isEqualOr}}></div>
12 {{/component}} 12 {{/component}}
13 </div> 13 </div>
14 <div class="click-area" id="bottomFixClickArea" style="height:{{height}}rem"> 14 <div class="click-area" id="bottomFixClickArea" style="height:{{height}}rem">
15 {{#component}} 15 {{#component}}
16 - <div class="per-click" style="width: {{width}}%;height:{{height}}%" data-url="{{url}}" id="bottomClick{{url}}-{{@index}}">  
17 - </div> 16 + {{#isEqualOr linkTarget '1' '3'}}
  17 + <a href="{{url}}" target="_blank" class="per-click" style="width: {{width}}%;height:{{height}}%"></a>
  18 + {{/isEqualOr}}
  19 + {{#isEqualOr linkTarget '2'}}
  20 + <div class="per-click" style="width: {{width}}%;height:{{height}}%" data-url="{{url}}" id="bottomClick{{url}}-{{@index}}"></div>
  21 + {{/isEqualOr}}
18 {{/component}} 22 {{/component}}
19 </div> 23 </div>
20 </div> 24 </div>
@@ -25,10 +25,10 @@ @@ -25,10 +25,10 @@
25 <a class="second-part"> 25 <a class="second-part">
26 <div class="new-brand-div"> 26 <div class="new-brand-div">
27 {{#isEqualOr ../showSalePrice '1'}} 27 {{#isEqualOr ../showSalePrice '1'}}
28 - <div class="new-price" style="{{#if ../salePriceBgColor}}background:{{../salePriceBgColor}};{{/if}}">  
29 - <span class="sale-price" {{#if ../fontColor}} style="color:{{../fontColor}};" {{/if}}>¥{{saleprice}}</span> 28 + <div class="new-price" style="{{#if ../salePriceBgColor}}background:{{../salePriceBgColor}};{{/if}}{{#if ../priceFontColor}}color:{{../priceFontColor}};{{/if}}">
  29 + <span class="sale-price"{{#if ../fontColor}} style="color:{{../fontColor}};" {{/if}}>¥{{saleprice}}</span>
30 {{#if marketprice}} 30 {{#if marketprice}}
31 - <span class="market-price">¥{{marketprice}}</span> 31 + <span class="market-price"{{#if ../fontColor}} style="color:{{../fontColor}};" {{/if}}>¥{{marketprice}}</span>
32 {{/if}} 32 {{/if}}
33 </div> 33 </div>
34 {{/isEqualOr}} 34 {{/isEqualOr}}
@@ -64,9 +64,9 @@ @@ -64,9 +64,9 @@
64 <a class="second-part"> 64 <a class="second-part">
65 <div class="new-brand-div"> 65 <div class="new-brand-div">
66 {{#isEqualOr showSalePrice '1'}} 66 {{#isEqualOr showSalePrice '1'}}
67 - <div class="new-price" style="{{#if salePriceBgColor}}background:{{salePriceBgColor}};{{/if}}">  
68 - <span class="sale-price" {{#if fontColor}} style="color:{{fontColor}};" {{/if}}></span>  
69 - <span class="market-price"></span> 67 + <div class="new-price" style="{{#if salePriceBgColor}}background:{{salePriceBgColor}};{{/if}}{{#if ../priceFontColor}}color:{{../priceFontColor}};{{/if}}">
  68 + <span class="sale-price"{{#if fontColor}} style="color:{{fontColor}};" {{/if}}></span>
  69 + <span class="market-price"{{#if fontColor}} style="color:{{fontColor}};" {{/if}}></span>
70 </div> 70 </div>
71 {{/isEqualOr}} 71 {{/isEqualOr}}
72 {{#isEqualOr showVipPrice '1'}} 72 {{#isEqualOr showVipPrice '1'}}
@@ -23,9 +23,9 @@ @@ -23,9 +23,9 @@
23 <div class="product-detail-text"> 23 <div class="product-detail-text">
24 {{#isEqualOr ../showSalePrice '1'}} 24 {{#isEqualOr ../showSalePrice '1'}}
25 <div class="price" style="{{#if ../salePriceBgColor}}background:{{../salePriceBgColor}};{{/if}}"> 25 <div class="price" style="{{#if ../salePriceBgColor}}background:{{../salePriceBgColor}};{{/if}}">
26 - <span class="sale-price" {{#if ../fontColor}} style="color:{{../fontColor}};" {{/if}}>¥{{saleprice}}</span> 26 + <span class="sale-price"{{#if ../fontColor}} style="color:{{../fontColor}};" {{/if}}>¥{{saleprice}}</span>
27 {{#if marketprice}} 27 {{#if marketprice}}
28 - <span class="market-price">¥{{marketprice}}</span> 28 + <span class="market-price"{{#if ../fontColor}} style="color:{{../fontColor}};" {{/if}}>¥{{marketprice}}</span>
29 {{/if}} 29 {{/if}}
30 </div> 30 </div>
31 {{/isEqualOr}} 31 {{/isEqualOr}}
@@ -65,8 +65,8 @@ @@ -65,8 +65,8 @@
65 <div class="product-detail-text"> 65 <div class="product-detail-text">
66 {{#isEqualOr showSalePrice '1'}} 66 {{#isEqualOr showSalePrice '1'}}
67 <div class="price" style="{{#if salePriceBgColor}}background:{{salePriceBgColor}};{{/if}}"> 67 <div class="price" style="{{#if salePriceBgColor}}background:{{salePriceBgColor}};{{/if}}">
68 - <span class="sale-price" {{#if fontColor}} style="color:{{fontColor}};" {{/if}}></span>  
69 - <span class="market-price"></span> 68 + <span class="sale-price"{{#if fontColor}} style="color:{{fontColor}};" {{/if}}></span>
  69 + <span class="market-price"{{#if fontColor}} style="color:{{fontColor}};" {{/if}}></span>
70 </div> 70 </div>
71 {{/isEqualOr}} 71 {{/isEqualOr}}
72 {{#isEqualOr showVipPrice '1'}} 72 {{#isEqualOr showVipPrice '1'}}
@@ -304,7 +304,7 @@ class cartModel extends global.yoho.BaseModel { @@ -304,7 +304,7 @@ class cartModel extends global.yoho.BaseModel {
304 orderCode: orderCode, 304 orderCode: orderCode,
305 sessionKey: sessionKey 305 sessionKey: sessionKey
306 }).then(result => { 306 }).then(result => {
307 - return paymentProcess.transformJit(_.get(result, 'data.package_list', [])); 307 + return paymentProcess.transformJit(_.get(result, 'data.package_info.package_list', []));
308 }); 308 });
309 } 309 }
310 310
@@ -53,6 +53,7 @@ exports.orderDetailData = (req, res, next) => { @@ -53,6 +53,7 @@ exports.orderDetailData = (req, res, next) => {
53 pageFooter: true, 53 pageFooter: true,
54 orderDetail: orderDetail, 54 orderDetail: orderDetail,
55 refundReason: refundReason, 55 refundReason: refundReason,
  56 + width750: true,
56 localCss: true, 57 localCss: true,
57 }); 58 });
58 }).catch(next); 59 }).catch(next);
@@ -3,7 +3,6 @@ @@ -3,7 +3,6 @@
3 const _ = require('lodash'); 3 const _ = require('lodash');
4 const moment = require('moment'); 4 const moment = require('moment');
5 const camelCase = global.yoho.camelCase; 5 const camelCase = global.yoho.camelCase;
6 -const family = global.yoho.FamilyAPI;  
7 const service = global.yoho.ServiceAPI; 6 const service = global.yoho.ServiceAPI;
8 const resourcesProcess = require(`${global.utils}/resources-process`); 7 const resourcesProcess = require(`${global.utils}/resources-process`);
9 const helpers = global.yoho.helpers; 8 const helpers = global.yoho.helpers;
@@ -19,10 +18,18 @@ class familyModel extends global.yoho.BaseModel { @@ -19,10 +18,18 @@ class familyModel extends global.yoho.BaseModel {
19 */ 18 */
20 _userData(uid) { 19 _userData(uid) {
21 if (uid) { 20 if (uid) {
22 - return family.get('user/getUserInfo.json', {  
23 - uid: uid  
24 - }, {  
25 - code: 200 21 + let options = {
  22 + data: {
  23 + method: 'app.family.userinfo',
  24 + uid: uid
  25 + },
  26 + param: {
  27 + code: 200
  28 + }
  29 + };
  30 +
  31 + return this.get(options).then(result => {
  32 + return result;
26 }); 33 });
27 } else { 34 } else {
28 return Promise.resolve({}); 35 return Promise.resolve({});
@@ -34,10 +41,18 @@ class familyModel extends global.yoho.BaseModel { @@ -34,10 +41,18 @@ class familyModel extends global.yoho.BaseModel {
34 */ 41 */
35 _getCode(uid) { 42 _getCode(uid) {
36 if (uid) { 43 if (uid) {
37 - return family.get('user/getInvitecode', {  
38 - uid: uid  
39 - }, {  
40 - code: 200 44 + let options = {
  45 + data: {
  46 + method: 'app.family.invitecode',
  47 + uid: uid
  48 + },
  49 + param: {
  50 + code: 200
  51 + }
  52 + };
  53 +
  54 + return this.get(options).then(result => {
  55 + return result;
41 }); 56 });
42 } else { 57 } else {
43 return Promise.resolve({}); 58 return Promise.resolve({});
@@ -102,11 +117,17 @@ class familyModel extends global.yoho.BaseModel { @@ -102,11 +117,17 @@ class familyModel extends global.yoho.BaseModel {
102 * 获取APP列表 117 * 获取APP列表
103 */ 118 */
104 _getAppList(uid) { 119 _getAppList(uid) {
105 - return family.get('vip/getUserVipInfo', {  
106 - uid: uid  
107 - }, {  
108 - code: 200  
109 - }).then((result => { 120 + let options = {
  121 + data: {
  122 + method: 'app.family.uservip',
  123 + uid: uid
  124 + },
  125 + param: {
  126 + code: 200
  127 + }
  128 + };
  129 +
  130 + return this.get(options).then((result => {
110 if (result && result.data && result.code === 200) { 131 if (result && result.data && result.code === 200) {
111 let loginList = []; 132 let loginList = [];
112 let noLoginList = []; 133 let noLoginList = [];
@@ -143,11 +164,17 @@ class familyModel extends global.yoho.BaseModel { @@ -143,11 +164,17 @@ class familyModel extends global.yoho.BaseModel {
143 *查询各个体系成长等级信息及等级特权 164 *查询各个体系成长等级信息及等级特权
144 */ 165 */
145 _getVipInfo(udid) { 166 _getVipInfo(udid) {
146 - return family.get('vip/getVipInfo.json', {  
147 - udid: udid  
148 - }, {  
149 - code: 200  
150 - }).then((result) => { 167 + let options = {
  168 + data: {
  169 + method: 'app.family.vipinfo',
  170 + udid: udid
  171 + },
  172 + param: {
  173 + code: 200
  174 + }
  175 + };
  176 +
  177 + return this.get(options).then((result) => {
151 178
152 if (_.get(result, 'data.mars.vipLevelList', []).length > 0) { 179 if (_.get(result, 'data.mars.vipLevelList', []).length > 0) {
153 _.forEach(_.get(result, 'data.mars.vipLevelList', []), function(val) { 180 _.forEach(_.get(result, 'data.mars.vipLevelList', []), function(val) {
@@ -163,12 +190,18 @@ class familyModel extends global.yoho.BaseModel { @@ -163,12 +190,18 @@ class familyModel extends global.yoho.BaseModel {
163 *查询当前用户各个体系成长等级信息及等级特权 190 *查询当前用户各个体系成长等级信息及等级特权
164 */ 191 */
165 _getUserVipInfo(udid, uid) { 192 _getUserVipInfo(udid, uid) {
166 - return family.get('vip/getUserVipInfo.json', {  
167 - udid: udid,  
168 - uid: uid  
169 - }, {  
170 - code: 200  
171 - }).then((result) => { 193 + let options = {
  194 + data: {
  195 + method: 'app.family.uservip',
  196 + udid: udid,
  197 + uid: uid
  198 + },
  199 + param: {
  200 + code: 200
  201 + }
  202 + };
  203 +
  204 + return this.get(options).then((result) => {
172 if (result && result.data) { 205 if (result && result.data) {
173 return result.data; 206 return result.data;
174 } else { 207 } else {
@@ -408,11 +441,17 @@ class familyModel extends global.yoho.BaseModel { @@ -408,11 +441,17 @@ class familyModel extends global.yoho.BaseModel {
408 * 积分乐园数据 441 * 积分乐园数据
409 */ 442 */
410 integralCharts(uid) { 443 integralCharts(uid) {
411 - return family.get('user/getUserCoin', {  
412 - uid: uid  
413 - }, {  
414 - code: 200  
415 - }).then((result) => { 444 + let options = {
  445 + data: {
  446 + method: 'app.family.usercoin',
  447 + uid: uid
  448 + },
  449 + param: {
  450 + code: 200
  451 + }
  452 + };
  453 +
  454 + return this.get(options).then((result) => {
416 let chartsData = {}; 455 let chartsData = {};
417 let list = []; 456 let list = [];
418 let colorList = []; 457 let colorList = [];
@@ -509,17 +548,23 @@ class familyModel extends global.yoho.BaseModel { @@ -509,17 +548,23 @@ class familyModel extends global.yoho.BaseModel {
509 } 548 }
510 549
511 getCoinData(params) { 550 getCoinData(params) {
512 - return family.get('user/getYohoCoinLog', {  
513 - uid: params.uid,  
514 - source: params.source || -1,  
515 - queryType: params.queryType || 0,  
516 - beginTime: params.beginTime ? this.formatDay(parseInt(params.beginTime, 10)) : '',  
517 - endTime: params.endTime ? this.formatDay(parseInt(params.endTime, 10)) : '',  
518 - page: params.page || 1,  
519 - limit: params.limit || 10  
520 - }, {  
521 - code: 200  
522 - }).then(result => { 551 + let options = {
  552 + data: {
  553 + method: 'app.family.coinlog',
  554 + uid: params.uid,
  555 + source: params.source || -1,
  556 + queryType: params.queryType || 0,
  557 + beginTime: params.beginTime ? this.formatDay(parseInt(params.beginTime, 10)) : '',
  558 + endTime: params.endTime ? this.formatDay(parseInt(params.endTime, 10)) : '',
  559 + page: params.page || 1,
  560 + limit: params.limit || 10
  561 + },
  562 + param: {
  563 + code: 200
  564 + }
  565 + };
  566 +
  567 + return this.get(options).then(result => {
523 let resu = { 568 let resu = {
524 coinList: [] 569 coinList: []
525 }; 570 };
@@ -543,11 +588,15 @@ class familyModel extends global.yoho.BaseModel { @@ -543,11 +588,15 @@ class familyModel extends global.yoho.BaseModel {
543 * 设置我的潮流口令 588 * 设置我的潮流口令
544 */ 589 */
545 setTrendWord(uid, trendWord) { 590 setTrendWord(uid, trendWord) {
546 - return family.get('user/updateInviteCode', {  
547 - uid: uid,  
548 - trendWord: trendWord  
549 - }).then((result) => { 591 + let options = {
  592 + data: {
  593 + method: 'app.family.updateinvitecode',
  594 + uid: uid,
  595 + trendWord: trendWord
  596 + }
  597 + };
550 598
  599 + return this.get(options).then((result) => {
551 return result; 600 return result;
552 }); 601 });
553 } 602 }
@@ -636,28 +685,42 @@ class familyModel extends global.yoho.BaseModel { @@ -636,28 +685,42 @@ class familyModel extends global.yoho.BaseModel {
636 } 685 }
637 686
638 modify(params) { 687 modify(params) {
639 - return family.get('user/updateUserInfo.json', {  
640 - uid: params.uid,  
641 - nickName: params.nickName,  
642 - gender: params.gender,  
643 - birthday: params.birthday,  
644 - height: params.height,  
645 - weight: params.weight,  
646 - province: params.province,  
647 - city: params.city  
648 - }).then(result => { 688 + let options = {
  689 + data: {
  690 + method: 'app.family.updateuser',
  691 + uid: params.uid,
  692 + nickName: params.nickName,
  693 + gender: params.gender,
  694 + birthday: params.birthday,
  695 + height: params.height,
  696 + weight: params.weight,
  697 + province: params.province,
  698 + city: params.city
  699 + },
  700 + param: {
  701 + code: 200
  702 + }
  703 + };
  704 +
  705 + return this.get(options).then(result => {
649 return result; 706 return result;
650 }); 707 });
651 } 708 }
652 709
653 getCity(params) { 710 getCity(params) {
654 - return family.get('area/provinces', {  
655 - uid: params.uid,  
656 - id: params.id  
657 - }, {  
658 - cache: true,  
659 - code: 200  
660 - }).then(result => { 711 + let options = {
  712 + data: {
  713 + method: 'app.family.province',
  714 + uid: params.uid,
  715 + id: params.id
  716 + },
  717 + param: {
  718 + cache: true,
  719 + code: 200
  720 + }
  721 + };
  722 +
  723 + return this.get(options).then(result => {
661 let resu = { 724 let resu = {
662 cityList: [] 725 cityList: []
663 }; 726 };
@@ -678,15 +741,21 @@ class familyModel extends global.yoho.BaseModel { @@ -678,15 +741,21 @@ class familyModel extends global.yoho.BaseModel {
678 } 741 }
679 742
680 getList(params) { 743 getList(params) {
681 - return family.get('shop/getShopProducts.json', {  
682 - uid: params.uid,  
683 - type: params.type,  
684 - page: params.page || 1,  
685 - limit: params.limit || 20,  
686 - city_id: params.cityId  
687 - }, {  
688 - code: 200  
689 - }).then(result => { 744 + let options = {
  745 + data: {
  746 + method: 'app.family.shopproducts',
  747 + uid: params.uid,
  748 + type: params.type,
  749 + page: params.page || 1,
  750 + limit: params.limit || 20,
  751 + city_id: params.cityId
  752 + },
  753 + param: {
  754 + code: 200
  755 + }
  756 + };
  757 +
  758 + return this.get(options).then(result => {
690 let resu = { 759 let resu = {
691 list: [] 760 list: []
692 }; 761 };
@@ -734,11 +803,17 @@ class familyModel extends global.yoho.BaseModel { @@ -734,11 +803,17 @@ class familyModel extends global.yoho.BaseModel {
734 } 803 }
735 804
736 coinMall(params) { 805 coinMall(params) {
737 - return family.get('user/getTotalCoin', {  
738 - uid: params.uid  
739 - }, {  
740 - code: 200  
741 - }).then(result => { 806 + let options = {
  807 + data: {
  808 + method: 'app.family.totalcoin',
  809 + uid: params.uid
  810 + },
  811 + param: {
  812 + code: 200
  813 + }
  814 + };
  815 +
  816 + return this.get(options).then(result => {
742 if (result && result.code === 200) { 817 if (result && result.code === 200) {
743 return result.data; 818 return result.data;
744 } else { 819 } else {
@@ -35,13 +35,9 @@ module.exports = class extends global.yoho.BaseModel { @@ -35,13 +35,9 @@ module.exports = class extends global.yoho.BaseModel {
35 _assignExpressInfo(showLogistics, order) { 35 _assignExpressInfo(showLogistics, order) {
36 let data = {}; 36 let data = {};
37 37
38 - if (showLogistics && order.expressCompany && order.expressCompany.caption) {  
39 - data = {  
40 - logisticsUrl: helpers.urlFormat('/home/logistic', {order_code: order.orderCode}),  
41 - logisticsCompany: order.expressCompany.caption,  
42 - logisticsNum: order.expressNumber || ''  
43 - };  
44 - } 38 + data = {
  39 + logisticsUrl: helpers.urlFormat('/home/logistic', {order_code: order.orderCode})
  40 + };
45 41
46 return data; 42 return data;
47 } 43 }
@@ -57,9 +53,32 @@ module.exports = class extends global.yoho.BaseModel { @@ -57,9 +53,32 @@ module.exports = class extends global.yoho.BaseModel {
57 return {}; 53 return {};
58 } 54 }
59 55
60 - let attribute = _.parseInt(order.attribute); 56 + let attribute = _.parseInt(_.get(order, 'orderExtInfo.attribute'));
  57 +
  58 + order = _.assign(order, {
  59 + orderCode: _.get(order, 'orderExtInfo.orderCode')
  60 + });
61 61
62 if (attribute === 9 || attribute === 11) { 62 if (attribute === 9 || attribute === 11) {
  63 + // 定金预售拼接提示语
  64 + let countTime = 0;
  65 + let payAmount = 0;
  66 +
  67 + if (_.get(order, 'orderDetailInfo.ext.payLefttime') &&
  68 + parseInt(order.orderDetailInfo.ext.payLefttime, 10)) {
  69 + countTime = order.orderDetailInfo.ext.payLefttime * 1000;
  70 + }
  71 +
  72 + if (_.get(order, 'orderDetailInfo.key') === '203') { // 待支付尾款
  73 + payAmount = _.get(order, 'orderExtInfo.orderTailPayAmount');
  74 + order.orderDetailInfo.ext.desc = `你的商品已到货,您还需支付尾款<span>¥${payAmount}</span>
  75 + 请在<i class="hours new-hours hide">${countTime}</i>内完成支付。超时订单自动取消`;
  76 + } else if (_.get(order, 'orderDetailInfo.key') === '201') { // 待支付定金
  77 + payAmount = _.get(order, 'orderExtInfo.orderDepositAmount');
  78 + order.orderDetailInfo.ext.desc = `您需支付定金<span>¥${payAmount}</span>
  79 + 请在<i class="hours new-hours hide">${countTime}</i>内完成支付。超时订单自动取消`;
  80 + }
  81 +
63 /* 预售商品,不能进行任何操作 */ 82 /* 预售商品,不能进行任何操作 */
64 orderBtn.push({ 83 orderBtn.push({
65 isAdvance: true 84 isAdvance: true
@@ -68,9 +87,9 @@ module.exports = class extends global.yoho.BaseModel { @@ -68,9 +87,9 @@ module.exports = class extends global.yoho.BaseModel {
68 } 87 }
69 88
70 /* 倒计时时间 订单详情页倒计时不在同一级*/ 89 /* 倒计时时间 订单详情页倒计时不在同一级*/
71 - if (order.counterFlag === 'Y' && parseInt(order.payLefttime, 10)) { 90 + if (_.get(order, 'orderDetailInfo.ext.payLefttime') && parseInt(order.orderDetailInfo.ext.payLefttime, 10)) {
72 orderBtn.push({ 91 orderBtn.push({
73 - leftTimeTop: order.payLefttime * 1000 92 + leftTimeTop: order.orderDetailInfo.ext.payLefttime * 1000
74 }); 93 });
75 } 94 }
76 95
@@ -87,9 +106,9 @@ module.exports = class extends global.yoho.BaseModel { @@ -87,9 +106,9 @@ module.exports = class extends global.yoho.BaseModel {
87 link: helpers.urlFormat('/home/orders/addressModify', { 106 link: helpers.urlFormat('/home/orders/addressModify', {
88 relation: order.relateOrderCode === 'Y', // 判断是否有关联订单 107 relation: order.relateOrderCode === 'Y', // 判断是否有关联订单
89 orderCode: order.orderCode, 108 orderCode: order.orderCode,
90 - areaCode: _.get(order, 'deliveryAddress.areaCode', ''),  
91 - provinceAreaCode: order.isSupportChangeProvince !== 'Y' &&  
92 - _.get(order, 'deliveryAddress.provinceAreaCode', '') || ''// 如果不允许修改省 109 + areaCode: _.get(order, 'deliveryInfo.deliveryAddress.areaCode', ''),
  110 + provinceAreaCode: _.get(order, 'deliveryInfo.isSupportChangeProvince') !== 'Y' &&
  111 + _.get(order, 'deliveryInfo.deliveryAddress.provinceAreaCode', '') || ''// 如果不允许修改省
93 }) 112 })
94 }); 113 });
95 break; 114 break;
@@ -166,18 +185,31 @@ module.exports = class extends global.yoho.BaseModel { @@ -166,18 +185,31 @@ module.exports = class extends global.yoho.BaseModel {
166 let offlinestore; // 线下店订单 185 let offlinestore; // 线下店订单
167 let deliveryOffline; // 门店取货 186 let deliveryOffline; // 门店取货
168 187
169 - orderDetail = _.assign(orderDetail, status); 188 + orderDetail = _.assign(orderDetail, status, {orderCode: orderCode});
170 189
171 - if (parseInt(orderDetail.attribute, 10) === 3) { 190 + if (parseInt(_.get(orderDetail, 'orderExtInfo.attribute'), 10) === 3) {
172 orderDetail = _.assign(orderDetail, { 191 orderDetail = _.assign(orderDetail, {
173 isVirtual: true, 192 isVirtual: true,
174 - mobile: result.data.mobile 193 + mobile: _.get(orderDetail, 'deliveryInfo.mobile')
175 }); 194 });
176 } 195 }
177 196
178 - orderDetail = _.assign(orderDetail, {  
179 - addressAll: orderDetail.area + orderDetail.address  
180 - }); 197 + if (orderDetail.deliveryInfo) {
  198 + orderDetail = _.assign(orderDetail, {
  199 + addressAll: orderDetail.deliveryInfo.area + orderDetail.deliveryInfo.address
  200 + });
  201 + }
  202 +
  203 + if (orderDetail.links) {
  204 + _.forEach(orderDetail.links, (val) => {
  205 + if (val === 'getExpress') {
  206 + orderDetail = _.assign(orderDetail, {
  207 + expressUrl: helpers.urlFormat('/home/logistic', {order_code: orderCode})
  208 + });
  209 + return;
  210 + }
  211 + });
  212 + }
181 213
182 _.forEach(orderDetail.orderGoods, function(data) { 214 _.forEach(orderDetail.orderGoods, function(data) {
183 let obj = {}; 215 let obj = {};
@@ -244,9 +276,12 @@ module.exports = class extends global.yoho.BaseModel { @@ -244,9 +276,12 @@ module.exports = class extends global.yoho.BaseModel {
244 orderDetail.goods = goods; 276 orderDetail.goods = goods;
245 277
246 // 为支付的拆单配送信息 278 // 为支付的拆单配送信息
247 - if (orderDetail.isMultiPackage === 'Y') { 279 + if (orderDetail.packageInfo) {
248 orderDetail = _.assign(orderDetail, { 280 orderDetail = _.assign(orderDetail, {
249 - jitDetailUrl: helpers.urlFormat('/cart/index/new/jitDetail', {orderCode: orderCode}) 281 + jitDetailUrl: helpers.urlFormat('/cart/index/new/jitDetail', {
  282 + orderCode: orderCode
  283 + }),
  284 + packageTitle: _.get(orderDetail, 'packageInfo.packageTitle')
250 }); 285 });
251 } 286 }
252 287
@@ -333,8 +368,8 @@ module.exports = class extends global.yoho.BaseModel { @@ -333,8 +368,8 @@ module.exports = class extends global.yoho.BaseModel {
333 method: 'app.SpaceOrders.close', 368 method: 'app.SpaceOrders.close',
334 uid: uid, 369 uid: uid,
335 order_code: orderCode, 370 order_code: orderCode,
336 - reasonId: reasonId,  
337 - reasons: reason, 371 + reason_id: reasonId,
  372 + reason: reason,
338 gender: gender, 373 gender: gender,
339 yh_channel: channel 374 yh_channel: channel
340 } 375 }
@@ -3,6 +3,21 @@ @@ -3,6 +3,21 @@
3 3
4 {{> fraud}} 4 {{> fraud}}
5 5
  6 + <a class="base-status clearfix" {{#if expressUrl}}href="{{expressUrl}}"{{/if}}>
  7 + {{#if orderDetailInfo}}
  8 + {{#orderDetailInfo}}
  9 + <div class="status-c">
  10 + <div class="status-title">{{value}}</div>
  11 + <div class="status-body">{{{ext.desc}}}</div>
  12 + <div class="status-time">{{ext.pay_expire}}</div>
  13 + </div>
  14 + {{#if ../expressUrl}}
  15 + <span class="iconfont">&#xe614;</span>
  16 + {{/if}}
  17 + {{/orderDetailInfo}}
  18 + {{/if}}
  19 + </a>
  20 +
6 <div id="order-detail" data-id="{{orderCode}}"> 21 <div id="order-detail" data-id="{{orderCode}}">
7 {{#unless deliveryOffline}} 22 {{#unless deliveryOffline}}
8 {{#if isVirtual}} 23 {{#if isVirtual}}
@@ -17,8 +32,8 @@ @@ -17,8 +32,8 @@
17 <span class="iconfont">&#xe637;</span> 32 <span class="iconfont">&#xe637;</span>
18 <div class="beside-icon"> 33 <div class="beside-icon">
19 <p class="name-phone"> 34 <p class="name-phone">
20 - {{userName}}  
21 - <span>{{mobile}}</span> 35 + {{deliveryInfo.userName}}
  36 + <span>{{deliveryInfo.mobile}}</span>
22 </p> 37 </p>
23 <p class="address"> 38 <p class="address">
24 {{addressAll}} 39 {{addressAll}}
@@ -26,52 +41,7 @@ @@ -26,52 +41,7 @@
26 </div> 41 </div>
27 </section> 42 </section>
28 {{/if}} 43 {{/if}}
29 - <div class="range"></div>  
30 {{/unless}} 44 {{/unless}}
31 - <section class="order-status block">  
32 - <div class="status sub">  
33 - <span class="iconfont">&#xe632;</span>  
34 -  
35 - <p class="beside-icon sub-content">  
36 - <span class="sub-title">订单编号:{{orderCode}}</span>  
37 - <span >订单状态:{{statusStr}}</span>  
38 - <span>下单时间:<b class="createTime">{{createTime}}</b></span>  
39 - {{#if paymentName}}  
40 - <span>支付方式:{{paymentName}}</span>  
41 - {{/if}}  
42 - {{#if offlinestore}}  
43 - <span>下单门店: {{offlinestore}}</span>  
44 - {{/if}}  
45 - </p>  
46 - <a href="{{serviceUrl}}" target="_blank" class="iconfont icon-right">&#xe63c;</a>  
47 - </div>  
48 - {{# orderBtn}}  
49 - {{#if getExpress}}  
50 - <a class="logistics sub" href="{{logisticsUrl}}">  
51 - <span class="iconfont">&#xe630;</span>  
52 - <p class="beside-icon sub-content">  
53 - <span class="sub-title">物流信息</span>  
54 - <span>物流公司:{{logisticsCompany}}</span>  
55 - {{#if logisticsNum}}  
56 - <span>快递单号:{{logisticsNum}}</span>  
57 - {{/if}}  
58 - </p>  
59 - <span class="iconfont icon-right">&#xe614;</span>  
60 - </a>  
61 - {{/if}}  
62 - {{/orderBtn}}  
63 -  
64 - {{#if deliveryOffline}}  
65 - <div class="offline-delivery">  
66 - <span class="delivery-img"></span>  
67 - <p class="beside-left">  
68 -  
69 - <span class="delivery-title">配送信息</span>  
70 - <span class="delivery-content">配送方式:门店取货</span>  
71 - </p>  
72 - </div>  
73 - {{/if}}  
74 - </section>  
75 45
76 <section class="goods block"> 46 <section class="goods block">
77 {{> jit-more}} 47 {{> jit-more}}
@@ -81,17 +51,23 @@ @@ -81,17 +51,23 @@
81 {{/ goods}} 51 {{/ goods}}
82 </section> 52 </section>
83 53
  54 + {{#orderAmountInfo}}
84 <ul class="cost block"> 55 <ul class="cost block">
85 {{#each promotionFormulas}} 56 {{#each promotionFormulas}}
86 <li> {{promotion}}: 57 <li> {{promotion}}:
87 <span>{{promotionAmount}}</span> 58 <span>{{promotionAmount}}</span>
88 </li> 59 </li>
89 {{/each}} 60 {{/each}}
  61 + </ul>
  62 + <ul class="real-amount">
  63 + {{#realAmount}}
90 <li> 64 <li>
91 - {{#if isPayonline}}实付金额{{else}}应付金额{{/if}}  
92 - <span>{{amount}}</span> 65 + {{promotion}}:
  66 + <span>{{promotionAmount}}</span>
93 </li> 67 </li>
  68 + {{/realAmount}}
94 </ul> 69 </ul>
  70 + {{/orderAmountInfo}}
95 {{#if yohoGiveCoin}} 71 {{#if yohoGiveCoin}}
96 <p class="dollar"> 72 <p class="dollar">
97 <span class="bg-dollar"></span> 73 <span class="bg-dollar"></span>
@@ -140,6 +116,16 @@ @@ -140,6 +116,16 @@
140 {{!-- 申请售后退换货组件 --}} 116 {{!-- 申请售后退换货组件 --}}
141 {{> order-detail/refund-change-mask}} 117 {{> order-detail/refund-change-mask}}
142 118
  119 + {{#if orderBasicInfo}}
  120 +
  121 + <div class="info-table">
  122 + {{#orderBasicInfo}}
  123 + <div class="table-item">{{key}}{{value}}</div>
  124 + {{/orderBasicInfo}}
  125 + <a href="{{serviceUrl}}" target="_blank" class="iconfont">&#xe63c;</a>
  126 + </div>
  127 + {{/if}}
  128 +
143 {{/ orderDetail}} 129 {{/ orderDetail}}
144 130
145 {{!-- 申请退款原因 --}} 131 {{!-- 申请退款原因 --}}
@@ -13,36 +13,31 @@ const isTest = process.env.NODE_ENV === 'test'; @@ -13,36 +13,31 @@ const isTest = process.env.NODE_ENV === 'test';
13 13
14 const domains = { 14 const domains = {
15 15
16 - api: 'http://api.yoho.cn/',  
17 - service: 'http://service.yoho.cn/',  
18 - liveApi: 'http://testapi.live.yohops.com:9999/',  
19 - singleApi: 'http://api-test3.yohops.com:9999/', 16 + // api: 'http://api.yoho.cn/',
  17 + // service: 'http://service.yoho.cn/',
  18 + // liveApi: 'http://testapi.live.yohops.com:9999/',
20 19
21 // gray 20 // gray
22 - // singleApi: 'http://single.gray.yohops.com/',  
23 // api: 'http://apigray.yoho.cn/', 21 // api: 'http://apigray.yoho.cn/',
24 // service: 'http://apigray.yoho.cn/', 22 // service: 'http://apigray.yoho.cn/',
25 // platformApi: 'http://172.16.6.210:8088/', 23 // platformApi: 'http://172.16.6.210:8088/',
26 24
27 25
28 - // api: 'http://api-test3.yohops.com:9999/',  
29 - // service: 'http://service-test3.yohops.com:9999/',  
30 - // liveApi: 'http://testapi.live.yohops.com:9999/',  
31 - // singleApi: 'http://api-test3.yohops.com:9999/',  
32 - 26 + api: 'http://api-test3.yohops.com:9999/',
  27 + service: 'http://service-test3.yohops.com:9999/',
  28 + liveApi: 'http://testapi.live.yohops.com:9999/',
33 imSocket: 'ws://socket.yohobuy.com:10240', 29 imSocket: 'ws://socket.yohobuy.com:10240',
34 imCs: 'http://im.yohobuy.com/api', 30 imCs: 'http://im.yohobuy.com/api',
35 global: 'http://api-global.yohobuy.com', 31 global: 'http://api-global.yohobuy.com',
36 store: 'http://192.168.102.47:8080/portal-gateway/', 32 store: 'http://192.168.102.47:8080/portal-gateway/',
37 platformApi: 'http://192.168.102.48:8088/', 33 platformApi: 'http://192.168.102.48:8088/',
38 extstore: 'http://extstore-test1.yohops.com', 34 extstore: 'http://extstore-test1.yohops.com',
39 - family: 'http://192.168.103.73:8096/uic/',  
40 yohoNowApi: 'http://yohonow-test.yohops.com:9999/' 35 yohoNowApi: 'http://yohonow-test.yohops.com:9999/'
41 }; 36 };
42 37
43 module.exports = { 38 module.exports = {
44 app: 'h5', 39 app: 'h5',
45 - appVersion: '6.4.0', // 调用api的版本 40 + appVersion: '6.5.2', // 调用api的版本
46 appName: 'yohobuywap-node', 41 appName: 'yohobuywap-node',
47 port: 6001, 42 port: 6001,
48 siteUrl: '//m.yohobuy.com', 43 siteUrl: '//m.yohobuy.com',
@@ -163,12 +158,10 @@ if (isProduction) { @@ -163,12 +158,10 @@ if (isProduction) {
163 global: 'http://api-global.yohobuy.com', 158 global: 'http://api-global.yohobuy.com',
164 store: 'http://openstore.yohobuy.com', 159 store: 'http://openstore.yohobuy.com',
165 liveApi: 'http://api.live.yoho.cn/', 160 liveApi: 'http://api.live.yoho.cn/',
166 - singleApi: 'http://single.yoho.cn/',  
167 imSocket: 'wss://imsocket.yohobuy.com:443', 161 imSocket: 'wss://imsocket.yohobuy.com:443',
168 imCs: 'https://imhttp.yohobuy.com/api', 162 imCs: 'https://imhttp.yohobuy.com/api',
169 platformApi: 'http://api.platform.yohoops.org', 163 platformApi: 'http://api.platform.yohoops.org',
170 extstore: 'http://extstore.yohobuy.com', 164 extstore: 'http://extstore.yohobuy.com',
171 - family: 'http://uic.yohoops.org/uic/',  
172 yohoNowApi: 'http://new.yohoboys.com/' 165 yohoNowApi: 'http://new.yohoboys.com/'
173 }, 166 },
174 memcache: { 167 memcache: {
@@ -272,12 +265,10 @@ if (isProduction) { @@ -272,12 +265,10 @@ if (isProduction) {
272 global: process.env.TEST_GLOBAL || 'http://global-test-soa.yohops.com:9999/', 265 global: process.env.TEST_GLOBAL || 'http://global-test-soa.yohops.com:9999/',
273 store: process.env.TEST_STORE || 'http://192.168.102.210:8080/portal-gateway/wechat/', 266 store: process.env.TEST_STORE || 'http://192.168.102.210:8080/portal-gateway/wechat/',
274 liveApi: process.env.TEST_LIVE || 'http://testapi.live.yohops.com:9999/', 267 liveApi: process.env.TEST_LIVE || 'http://testapi.live.yohops.com:9999/',
275 - singleApi: process.env.TEST_SINGLE || 'http://api-test1.yohops.com:9999/',  
276 imSocket: process.env.TEST_IM_SOCKET || 'ws://socket.yohobuy.com:10240', 268 imSocket: process.env.TEST_IM_SOCKET || 'ws://socket.yohobuy.com:10240',
277 imCs: process.env.TEST_IM_CS || 'http://im.yohobuy.com/api', 269 imCs: process.env.TEST_IM_CS || 'http://im.yohobuy.com/api',
278 platformApi: 'http://192.168.102.48:8088/', 270 platformApi: 'http://192.168.102.48:8088/',
279 extstore: 'http://extstore-test1.yohops.com', 271 extstore: 'http://extstore-test1.yohops.com',
280 - family: 'http://192.168.102.31:8096/uic/',  
281 yohoNowApi: process.env.YOHO_NOW_API || 'http://yohonow-test.yohops.com:9999/' 272 yohoNowApi: process.env.YOHO_NOW_API || 'http://yohonow-test.yohops.com:9999/'
282 }, 273 },
283 memcache: { 274 memcache: {
1 { 1 {
2 "name": "yohobuywap-node", 2 "name": "yohobuywap-node",
3 - "version": "6.5.4", 3 + "version": "6.5.20",
4 "private": true, 4 "private": true,
5 "description": "A New Yohobuy Project With Express", 5 "description": "A New Yohobuy Project With Express",
6 "repository": { 6 "repository": {
@@ -28,6 +28,8 @@ let $sureClose = $('.order-opt').find('.cancel'); // 取消订单按钮 @@ -28,6 +28,8 @@ let $sureClose = $('.order-opt').find('.cancel'); // 取消订单按钮
28 let $sureRefund = $('.order-opt').find('.refund'); // 申请退款按钮 28 let $sureRefund = $('.order-opt').find('.refund'); // 申请退款按钮
29 let $refundChangeMask = $('.refund-change-mask'); // 退换货选择组件 29 let $refundChangeMask = $('.refund-change-mask'); // 退换货选择组件
30 30
  31 +let $newHours = $('.new-hours').length > 0 ? true : false; // 新的倒计时格式标示
  32 +
31 require('common'); 33 require('common');
32 require('plugin/modal.alert'); 34 require('plugin/modal.alert');
33 35
@@ -66,10 +68,19 @@ function downCount(options) { @@ -66,10 +68,19 @@ function downCount(options) {
66 68
67 // set to DOM 69 // set to DOM
68 $countdownContainer.removeClass('hide'); 70 $countdownContainer.removeClass('hide');
  71 + $('.new-hours').removeClass('hide');
69 if (hours === '00') { 72 if (hours === '00') {
70 - $countDownHours.text('剩余' + minutes + ':' + seconds); 73 + if ($newHours) {
  74 + $countDownHours.text(minutes + '分' + seconds + '秒');
  75 + } else {
  76 + $countDownHours.text('剩余' + minutes + ':' + seconds);
  77 + }
71 } else { 78 } else {
72 - $countDownHours.text('剩余' + hours + ':' + minutes + ':' + seconds); 79 + if ($newHours) {
  80 + $countDownHours.text(hours + '时' + minutes + '分' + seconds + '秒');
  81 + } else {
  82 + $countDownHours.text('剩余' + hours + ':' + minutes + ':' + seconds);
  83 + }
73 } 84 }
74 85
75 difference -= 1000; 86 difference -= 1000;
@@ -106,6 +106,15 @@ class ProductListWithFilter { @@ -106,6 +106,15 @@ class ProductListWithFilter {
106 }); 106 });
107 } 107 }
108 108
  109 + /**
  110 + * 重置
  111 + */
  112 + reset() {
  113 + filter.resetFilter();
  114 + this.page = 0;
  115 + this.view.container.html('');
  116 + }
  117 +
109 dataRender(result) { 118 dataRender(result) {
110 119
111 // 去掉正在加载 120 // 去掉正在加载
@@ -30,12 +30,14 @@ Tab.prototype.getallgoods = function() { // 显示筛选 TAB @@ -30,12 +30,14 @@ Tab.prototype.getallgoods = function() { // 显示筛选 TAB
30 $listNav.find('.default').addClass('active'); 30 $listNav.find('.default').addClass('active');
31 $filterBox.css('display', 'block'); 31 $filterBox.css('display', 'block');
32 $('.filter-mask').addClass('hide'); 32 $('.filter-mask').addClass('hide');
  33 + productListWithFilter.reset();
33 productListWithFilter.getGoodsList({type: 'default', page: 1}); 34 productListWithFilter.getGoodsList({type: 'default', page: 1});
34 productListWithFilter.scrollActived = true; 35 productListWithFilter.scrollActived = true;
35 }; 36 };
36 Tab.prototype.getnewgoods = function() { 37 Tab.prototype.getnewgoods = function() {
37 $filterBox.css('display', 'none'); 38 $filterBox.css('display', 'none');
38 $('.filter-mask').addClass('hide'); 39 $('.filter-mask').addClass('hide');
  40 + productListWithFilter.reset();
39 productListWithFilter.getGoodsList({type: 'new', page: 1}); 41 productListWithFilter.getGoodsList({type: 'new', page: 1});
40 productListWithFilter.scrollActived = true; 42 productListWithFilter.scrollActived = true;
41 }; 43 };
1 -/*  
2 - * @Author: Targaryen  
3 - * @Date: 2017-03-24 13:43:55  
4 - * @Last Modified by: Targaryen  
5 - * @Last Modified time: 2017-06-20 09:50:01  
6 - */  
7 -  
8 -/** *****************************  
9 - * 红人店铺使用的全部商品页面碎片  
10 - *******************************/  
11 -  
12 -const filter = require('../../plugin/filter');  
13 -const lazyLoad = require('yoho-jquery-lazyload');  
14 -  
15 -let noResultHbs = require('product/search/no-result-new.hbs');  
16 -  
17 -let $goodsContainer = $('#goods-container');  
18 -let $container = $goodsContainer.children('.default-goods'); // 承载商品列表的容器  
19 -let $listNav = $('#list-nav'); // 筛选项列表  
20 -let $pre = $listNav.find('.active'); // 记录进入筛选前的active项,初始为选中项  
21 -let $allGoodsTabPage = $(document.getElementById('all-goods'));  
22 -let $filterBody = $('.filter-body');  
23 -let $dropList = $('.drop-list');  
24 -  
25 -const shopId = $('#shopId').val();  
26 -  
27 -let navInfo = {  
28 - price: {  
29 - order: 1,  
30 - end: false  
31 - },  
32 - discount: {  
33 - order: 1,  
34 - end: false  
35 - },  
36 - default: {  
37 - order: 0,  
38 - end: false,  
39 - type: 'default'  
40 - },  
41 - new: {  
42 - order: 0,  
43 - end: false  
44 - },  
45 - sale: {  
46 - order: 0,  
47 - end: false  
48 - },  
49 - popularity: {  
50 - order: 0,  
51 - end: false  
52 - }  
53 -};  
54 -  
55 -let beforeScroll = document.body.scrollTop; // 滚动前位置记录  
56 -let navType = 'default'; // 目前激活的导航页面  
57 -let defaultOpt = Object.assign({}, navInfo.default, {shop_id: shopId}); // 默认参数  
58 -let onSearching = false; // 是否正在搜索  
59 -let isScrollLoad = false; // 是否是滚动加载  
60 -let page = 1; // 页码  
61 -let nav;  
62 -let $firstText = $('.first-li-more').find('.nav-txt');  
63 -let $thisLi = '';  
64 -  
65 -// 物料商品列表标记  
66 -if ($('#material-flag').val() === 'material') {  
67 - let material = true;  
68 -  
69 - if ($('.first-li-more').hasClass('active')) {  
70 - page = 2; // 已在服务端渲染第一页  
71 - }  
72 - Object.assign(defaultOpt, {  
73 - material: material,  
74 - unionType: window.queryString.union_type  
75 - });  
76 -}  
77 -  
78 -/**  
79 - * 处理筛选参数  
80 - */  
81 -const handleChoseFilter = function() {  
82 - $.each($filterBody.find('.chosed'), function(index, elem) {  
83 - let choseOpt = {};  
84 -  
85 - choseOpt[$(elem).parent().data('type')] = $(elem).data('id');  
86 - Object.assign(defaultOpt, choseOpt);  
87 - });  
88 -};  
89 -  
90 -/**  
91 - * 获取商品列表  
92 - */  
93 -const getGoodsList = params => {  
94 - handleChoseFilter();  
95 -  
96 - if (!onSearching) {  
97 - Object.assign(defaultOpt, {  
98 - page: page++  
99 - });  
100 - }  
101 -  
102 - // 有参数,参数优先,滚动加载相关参数重置  
103 - if (params && !params.filtering) {  
104 - Object.assign(defaultOpt, params);  
105 - if (params.page) {  
106 - page = params.page + 1;  
107 - }  
108 - isScrollLoad = false;  
109 - beforeScroll = document.body.scrollTop;  
110 - }  
111 -  
112 - if (nav && nav.end) {  
113 - return false;  
114 - }  
115 -  
116 - if (!onSearching) {  
117 - onSearching = true;  
118 -  
119 - $.ajax({  
120 - type: 'GET',  
121 - url: location.protocol + '//m.yohobuy.com/product/search/search',  
122 - data: defaultOpt,  
123 - xhrFields: {  
124 - withCredentials: true  
125 - },  
126 - beforeSend: function() {  
127 - if ($('.no-result-new').length > 0) {  
128 - $('.no-result-new').remove();  
129 - }  
130 - $container.append('<div class="search-divide">正在加载...</div>');  
131 - },  
132 - success: function(result) {  
133 - // 去掉正在加载  
134 - $('.search-divide').remove();  
135 -  
136 - let noResult = !result || result.length < 1 || (result.list && result.list.length < 1);  
137 -  
138 -  
139 - // 没有结果输出没有结果页面  
140 - if (noResult) {  
141 - if (isScrollLoad) {  
142 - $container.append('<div class="search-divide">没有更多内容了...</div>');  
143 - } else {  
144 - $container.html(noResultHbs());  
145 - }  
146 -  
147 - if (nav) {  
148 - nav.end = true;  
149 - }  
150 -  
151 - onSearching = false;  
152 - return false;  
153 - }  
154 -  
155 - if (isScrollLoad) {  
156 - $container.append(result);  
157 - } else {  
158 - $container.html(result);  
159 - }  
160 -  
161 - lazyLoad($container.find('img[class=lazy]').not('img[src]'));  
162 -  
163 - onSearching = false;  
164 - },  
165 - error: function() {  
166 - let $divide = $('.search-divide');  
167 -  
168 - $divide.text('加载失败,点击重试');  
169 - $divide.one('click', function() {  
170 - $divide.text('正在加载...');  
171 - getGoodsList();  
172 - });  
173 - onSearching = false;  
174 - }  
175 - });  
176 - }  
177 -};  
178 -  
179 -/**  
180 - * 加载筛选数据  
181 - */  
182 -const getFilter = function() {  
183 - $.ajax({  
184 - type: 'GET',  
185 - url: location.protocol + '//m.yohobuy.com/product/search/filter',  
186 - data: defaultOpt,  
187 - success: function(data) {  
188 - if (!data) {  
189 - return false;  
190 - }  
191 -  
192 - $goodsContainer.append(data);  
193 -  
194 - // 初始化filter&注册filter回调  
195 - filter.initFilter({  
196 - fCbFn: getGoodsList,  
197 - hCbFn: function() {  
198 -  
199 - // 切换active状态到$pre上  
200 - $pre.addClass('active');  
201 - $pre.siblings('.filter').removeClass('active');  
202 - }  
203 - });  
204 -  
205 - $filterBody = $('.filter-body');  
206 - }  
207 - });  
208 -};  
209 -  
210 -$listNav.bind('contextmenu', function() {  
211 - return false;  
212 -});  
213 -  
214 -const popularityFilter = function(thisLi, type) {  
215 - if (thisLi.hasClass('active')) {  
216 - $dropList.hide();  
217 - return false;  
218 - }  
219 - $thisLi.addClass('active').siblings('li').removeClass('active');  
220 -  
221 - defaultOpt.type = type;  
222 -  
223 - nav = navInfo[type];  
224 -  
225 - if (thisLi.hasClass('asc')) {  
226 - nav.order = 1;  
227 - } else {  
228 - nav.order = 0;  
229 - }  
230 -  
231 - Object.assign(defaultOpt, nav);  
232 - getGoodsList();  
233 - $dropList.hide();  
234 -};  
235 -  
236 -$listNav.on('touchend touchcancel', function(e) {  
237 - page = 1;  
238 - beforeScroll = $(window).scrollTop();  
239 - isScrollLoad = false;  
240 -  
241 - let $this = $(e.target).closest('li'); // 被点击的 Tab  
242 - let $active;  
243 -  
244 - // 默认列表增加人气筛选  
245 - if ($this.hasClass('first-li-more') && $this.hasClass('active')) {  
246 - $this.siblings('.active').removeClass('active');  
247 - $this.addClass('active');  
248 - $dropList.toggle();  
249 - $dropList.find('.default').on('touchend touchcancel', function() {  
250 - $thisLi = $(this);  
251 - $firstText.html('默认');  
252 - popularityFilter($thisLi, 'default');  
253 - return false;  
254 - });  
255 - $dropList.find('.discount').on('touchend touchcancel', function() {  
256 - $thisLi = $(this);  
257 - $firstText.html($(this).data('text'));  
258 - popularityFilter($thisLi, 'discount');  
259 - $('.first-li-more').removeClass('new default sale discount').addClass('discount');  
260 - return false;  
261 - });  
262 - } else if ($this.hasClass('filter')) { // 筛选面板  
263 - $dropList.css('display', 'none');  
264 -  
265 - // 筛选面板切换状态  
266 - if ($this.hasClass('active')) {  
267 - filter.hideFilter();  
268 -  
269 - // 点击筛选前的 active 项恢复 active  
270 - $pre.addClass('active');  
271 - $this.removeClass('active');  
272 - } else {  
273 - $pre = $this.siblings('.active');  
274 -  
275 - $pre.removeClass('active');  
276 - $this.addClass('active');  
277 -  
278 - filter.showFilter();  
279 - }  
280 - } else { // 排序改变  
281 - $dropList.css('display', 'none');  
282 - if ($this.hasClass('new')) {  
283 - navType = 'new';  
284 - } else if ($this.hasClass('price')) {  
285 - navType = 'price';  
286 - } else if ($this.hasClass('discount')) {  
287 - navType = 'discount';  
288 - } else if ($this.hasClass('default')) {  
289 - navType = 'default';  
290 - } else if ($this.hasClass('sale')) {  
291 - navType = 'sale';  
292 - } else if ($this.hasClass('popularity')) {  
293 - navType = 'popularity';  
294 - }  
295 -  
296 - // 更新当前排序:默认、最新、价格、折扣  
297 - nav = navInfo[navType];  
298 -  
299 - if ($this.hasClass('active')) {  
300 -  
301 - // 默认、最新无排序切换  
302 - if ($this.hasClass('default') || $this.hasClass('new') || $this.hasClass('popularity')) {  
303 - return false;  
304 - }  
305 -  
306 - if ($this.hasClass('price') || $this.hasClass('discount')) {  
307 -  
308 - // 价格或折扣切换排序状态  
309 - $this.find('.icon > .iconfont').toggleClass('cur');  
310 - $pre = $this; // 更新 pre 为当前项  
311 - nav.order = nav.order === 0 ? 1 : 0; // 切换排序  
312 - }  
313 - } else {  
314 - $active = $this.siblings('.active');  
315 -  
316 - $pre = $this; // $pre为除筛选导航的其他导航项,若当前active的为筛选,则把$pre置为当前点击项  
317 -  
318 - if ($active.hasClass('filter')) {  
319 -  
320 - // 若之前active项为筛选,则隐藏筛选面板  
321 - filter.hideFilter();  
322 - }  
323 -  
324 - $active.removeClass('active');  
325 - $this.addClass('active');  
326 - }  
327 -  
328 - /* 排序条件更新 */  
329 - defaultOpt.type = navType;  
330 - Object.assign(defaultOpt, nav);  
331 -  
332 - getGoodsList();  
333 - }  
334 -});  
335 -  
336 -  
337 -/**  
338 - * 当scroll到1/2$goodsContainer高度后继续请求下一页数据  
339 - */  
340 -const scrollHandler = function() {  
341 - if ($allGoodsTabPage.hasClass('active') && $(window).scrollTop() > $goodsContainer.height() * 0.6) {  
342 - isScrollLoad = true;  
343 - getGoodsList();  
344 - }  
345 -};  
346 -  
347 -/**  
348 - * 滚动加载  
349 - */  
350 -$(window).scroll(function() {  
351 - setTimeout(function() {  
352 - let afterScroll = document.body.scrollTop;  
353 -  
354 - if (afterScroll - beforeScroll > 0) {  
355 - window.requestAnimationFrame(scrollHandler);  
356 - beforeScroll = afterScroll;  
357 - } else {  
358 - return false;  
359 - }  
360 - }, 5);  
361 -});  
362 -  
363 -module.exports = {  
364 - getGoodsList,  
365 - getFilter  
366 -};  
@@ -240,6 +240,22 @@ li { @@ -240,6 +240,22 @@ li {
240 transform: translateX(-50%); 240 transform: translateX(-50%);
241 } 241 }
242 242
  243 +.feature-page .sidebar-link {
  244 + position: fixed;
  245 + display: block;
  246 + top: 50%;
  247 + right: 0;
  248 + width: 150px;
  249 + height: 150px;
  250 + margin-top: -75px;
  251 + z-index: 999;
  252 +
  253 + img {
  254 + width: 150px;
  255 + height: 150px;
  256 + }
  257 +}
  258 +
243 .feature-page .sidebar { 259 .feature-page .sidebar {
244 position: fixed; 260 position: fixed;
245 width: 100%; 261 width: 100%;
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 background: #fff; 2 background: #fff;
3 display: block; 3 display: block;
4 padding: 20px 30px; 4 padding: 20px 30px;
5 - margin-bottom: 30px; 5 + margin-bottom: 20px;
6 border-bottom: 1px solid #e0e0e0; 6 border-bottom: 1px solid #e0e0e0;
7 7
8 .tip-title { 8 .tip-title {
@@ -113,14 +113,6 @@ @@ -113,14 +113,6 @@
113 line-height: 1.5; 113 line-height: 1.5;
114 } 114 }
115 115
116 - .range {  
117 - background-image: resolve("home/rang.png");  
118 - background-size: cover;  
119 - width: 640px;  
120 - height: 20px;  
121 - background-color: #fff;  
122 - }  
123 -  
124 .beside-icon { 116 .beside-icon {
125 margin-left: 60px; 117 margin-left: 60px;
126 } 118 }
@@ -171,27 +163,25 @@ @@ -171,27 +163,25 @@
171 span { 163 span {
172 float: right; 164 float: right;
173 } 165 }
174 -  
175 - &:last-child span {  
176 - color: #f00;  
177 - }  
178 } 166 }
179 } 167 }
180 168
181 .dollar { 169 .dollar {
  170 + margin: 20px 0;
182 background: #fff; 171 background: #fff;
183 - padding: 0.5rem 0.75rem;  
184 - height: 1.5rem;  
185 - line-height: 0.5rem; 172 + padding: 0 30px;
  173 + height: 88px;
  174 + line-height: 88px;
186 font-size: 0.7rem; 175 font-size: 0.7rem;
187 176
188 .bg-dollar { 177 .bg-dollar {
189 display: inline-block; 178 display: inline-block;
190 - width: 0.6rem;  
191 - height: 0.6rem;  
192 - background: url("/home/yoho-coin/dollar.png") center center; 179 + width: 36px;
  180 + height: 36px;
  181 + background: resolve("home/yoho-coin/yoho_icon.png");
193 background-size: 100% 100%; 182 background-size: 100% 100%;
194 - vertical-align: middle; 183 + vertical-align: sub;
  184 + margin-right: 5px;
195 } 185 }
196 } 186 }
197 187
@@ -405,6 +405,7 @@ @@ -405,6 +405,7 @@
405 color: #f00; 405 color: #f00;
406 float: right; 406 float: right;
407 margin-right: 30px; 407 margin-right: 30px;
  408 + margin-top: 40px;
408 } 409 }
409 } 410 }
410 411
@@ -98,7 +98,7 @@ @@ -98,7 +98,7 @@
98 98
99 .gallery { 99 .gallery {
100 .code-copy { 100 .code-copy {
101 - top: -624px; 101 + top: -628px;
102 left: 335px; 102 left: 335px;
103 } 103 }
104 } 104 }
@@ -2,3 +2,4 @@ @@ -2,3 +2,4 @@
2 @import "order"; 2 @import "order";
3 @import "order-detail"; 3 @import "order-detail";
4 @import "fraud"; 4 @import "fraud";
  5 +@import "orderDetail/order-detail-new";
  1 +.base-status {
  2 + background-color: #fff;
  3 + padding: 30px;
  4 + margin-bottom: 20px;
  5 + display: flex;
  6 + align-items: center;
  7 +
  8 + .status-c {
  9 + float: left;
  10 + width: 640px;
  11 + }
  12 +
  13 + .status-title {
  14 + font-size: 34px;
  15 + color: #444;
  16 + line-height: 48px;
  17 + margin-bottom: 10px;
  18 + }
  19 +
  20 + .status-body {
  21 + font-size: 28px;
  22 + color: #b0b0b0;
  23 + line-height: 40px;
  24 + margin-bottom: 5px;
  25 +
  26 + span {
  27 + color: #e01;
  28 + }
  29 + }
  30 +
  31 + .status-time {
  32 + font-size: 24px;
  33 + color: #b0b0b0;
  34 + line-height: 34px;
  35 + }
  36 +
  37 + .iconfont {
  38 + margin-left: 30px;
  39 + width: 20px;
  40 + float: right;
  41 + color: #e0e0e0;
  42 + font-size: 32px;
  43 + }
  44 +}
  45 +
  46 +.info-table {
  47 + margin: 20px 0;
  48 + padding: 30px 0 30px 30px;
  49 + background-color: #fff;
  50 + position: relative;
  51 +
  52 + .table-item {
  53 + line-height: 50px;
  54 + font-size: 28px;
  55 + color: #444;
  56 + }
  57 +
  58 + .iconfont {
  59 + position: absolute;
  60 + top: 30px;
  61 + right: 30px;
  62 + font-size: 40px;
  63 + }
  64 +}
  65 +
  66 +.real-amount {
  67 + background-color: #fff;
  68 +
  69 + li {
  70 + margin-left: 30px;
  71 + padding-right: 30px;
  72 + font-size: 28px;
  73 + border-top: solid 1px #e0e0e0;
  74 + line-height: 80px;
  75 +
  76 + span {
  77 + float: right;
  78 + }
  79 +
  80 + &:last-child span {
  81 + color: #f00;
  82 + }
  83 + }
  84 +}