Authored by Lynnic

Merge branch 'develop' of git.dev.yoho.cn:web/yohobuy into develop

@@ -1250,13 +1250,23 @@ @@ -1250,13 +1250,23 @@
1250 ### 支付中心 1250 ### 支付中心
1251 1251
1252 { 1252 {
1253 - 'payAppInfo' : {  
1254 - 'appIcon' : 'http://static.yohobuy.com/images/icon.png',  
1255 - 'payLink' : '/weixin/pay/'  
1256 - 'app' : '微信支付',  
1257 - 'hint' : '需下载微信客户端',  
1258 - 'subHint' : '推荐使用'  
1259 - } 1253 + 'payAppInfo' : [
  1254 + {
  1255 + 'appIcon' : 'http://static.yohobuy.com/images/icon.png',
  1256 + 'payLink' : '/weixin/pay/',
  1257 + 'appId': 'weixin',
  1258 + 'app' : '微信支付',
  1259 + 'hint' : '需下载微信客户端',
  1260 + 'subHint' : '推荐使用'
  1261 + },{
  1262 + 'appIcon' : 'http://static.yohobuy.com/images/icon.png',
  1263 + 'payLink' : '/weixin/pay/',
  1264 + 'appId': 'baidu',
  1265 + 'app' : '百度支付',
  1266 + 'hint' : '需下载微信客户端',
  1267 + 'subHint' : '推荐使用'
  1268 + }
  1269 + ]
1260 } 1270 }
1261 1271
1262 ### 物流详情 1272 ### 物流详情
@@ -1266,9 +1276,14 @@ @@ -1266,9 +1276,14 @@
1266 'logisticUrl' : 'http://www.shunfeng.com', 1276 'logisticUrl' : 'http://www.shunfeng.com',
1267 'logisticCompany' : '顺丰', 1277 'logisticCompany' : '顺丰',
1268 'logisticNumber' : '1231231231', 1278 'logisticNumber' : '1231231231',
1269 - 'logisticDetail' : {  
1270 - 'status' : '南京市 派送中',  
1271 - 'date' : '2015-12-03'  
1272 - } 1279 + 'logisticDetail' : [
  1280 + {
  1281 + 'status' : '南京市 派送中',
  1282 + 'date' : '2015-12-03'
  1283 + }, {
  1284 + 'status' : '南京市 准备中',
  1285 + 'date' : '2015-12-03'
  1286 + }
  1287 + ]
1273 } 1288 }
1274 1289
@@ -65,42 +65,28 @@ class LoginData @@ -65,42 +65,28 @@ class LoginData
65 // 构建必传参数 65 // 构建必传参数
66 $param = Yohobuy::param(); 66 $param = Yohobuy::param();
67 67
  68 + $param['v'] = '4'; // 只有早期的V4版本才有直接生成UID
68 $param['method'] = 'app.passport.signinByOpenID'; 69 $param['method'] = 'app.passport.signinByOpenID';
69 $param['openId'] = $openId; 70 $param['openId'] = $openId;
70 $param['source_type'] = $sourceType; 71 $param['source_type'] = $sourceType;
  72 + $param['nickname'] = $nickname;
71 $param['client_secret'] = Sign::getSign($param); 73 $param['client_secret'] = Sign::getSign($param);
72 74
73 return Yohobuy::get(Yohobuy::API_URL, $param); 75 return Yohobuy::get(Yohobuy::API_URL, $param);
74 } 76 }
75 77
76 /** 78 /**
77 - * 写入SESSION会话 79 + * 登出SESSION会话
78 * 80 *
79 * @param int $uid 用户ID 81 * @param int $uid 用户ID
80 * @return array 82 * @return array
81 */ 83 */
82 - public static function signinSession($uid) 84 + public static function signoutSession($token)
83 { 85 {
84 $param = array(); 86 $param = array();
85 - $param['uid'] = $uid;  
86 - $param['token'] = md5($uid . '#@!@#');  
87 -  
88 - return Yohobuy::get(Yohobuy::API_URL_LOGINSESSION . 'Passport/session/index', $param);  
89 - }  
90 -  
91 - /**  
92 - * 写入SESSION会话  
93 - *  
94 - * @param int $uid 用户ID  
95 - * @return array  
96 - */  
97 - public static function checkSession($uid)  
98 - {  
99 - $param = array();  
100 - $param['uid'] = $uid;  
101 - $param['token'] = md5($uid . '#@!@#'); 87 + $param['token'] = $token;
102 88
103 - return Yohobuy::get(Yohobuy::API_URL_LOGINSESSION . 'Passport/session/val', $param); 89 + return Yohobuy::get(Yohobuy::API_URL_LOGINSESSION . 'Passport/session/logout', $param);
104 } 90 }
105 91
106 } 92 }
@@ -165,7 +165,7 @@ class RegData @@ -165,7 +165,7 @@ class RegData
165 $param['password'] = $password; 165 $param['password'] = $password;
166 $param['client_secret'] = Sign::getSign($param); 166 $param['client_secret'] = Sign::getSign($param);
167 167
168 - return Yohobuy::post(Yohobuy::API_URL, $param, true); 168 + return Yohobuy::post(Yohobuy::API_URL, $param);
169 } 169 }
170 170
171 } 171 }
@@ -542,5 +542,21 @@ class Helpers @@ -542,5 +542,21 @@ class Helpers
542 542
543 return $vipLevel; 543 return $vipLevel;
544 } 544 }
  545 +
  546 + /**
  547 + * 同步用户的会话
  548 + *
  549 + * 转向老的PHP服务器上处理, 因购物车相关的操作会依赖SESSION
  550 + *
  551 + * @param int $uid 用户ID
  552 + * @param string $refer 访问来源
  553 + * @param string $callback 回调方法名
  554 + * @return string
  555 + */
  556 + public static function syncUserSession($uid, $refer = '', $callback='call')
  557 + {
  558 + return 'http://m1.yohobuy.com/Passport/session/index?callback=' . $callback
  559 + . '&sign=' . md5($uid . 'Js8Yn0!EwPM45-ws') . '&uid=' . $uid . '&go=' . $refer;
  560 + }
545 561
546 } 562 }
@@ -49,8 +49,8 @@ abstract class Factory @@ -49,8 +49,8 @@ abstract class Factory
49 { 49 {
50 // require dirname(__FILE__) . DS . $apiName . DS . 'Call.class.php'; 50 // require dirname(__FILE__) . DS . $apiName . DS . 'Call.class.php';
51 51
52 - $apiNameCase = ucfirst($apiName);  
53 - $apiClass = "Plugin\Partner\\{$apiNameCase}\\Call"; 52 + //$apiNameCase = ucfirst($apiName);
  53 + $apiClass = "Plugin\Partner\\{$apiName}\Call";
54 54
55 self::$apiObjs[$apiName] = new $apiClass(); 55 self::$apiObjs[$apiName] = new $apiClass();
56 self::$apiObjs[$apiName]->apiName = $apiName; 56 self::$apiObjs[$apiName]->apiName = $apiName;
@@ -77,7 +77,7 @@ class Call extends Factory @@ -77,7 +77,7 @@ class Call extends Factory
77 77
78 if (is_array($token) && isset($token['uid'])) 78 if (is_array($token) && isset($token['uid']))
79 { 79 {
80 - $this->client = new SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']); 80 + $this->client = new \SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']);
81 81
82 $userInfo = $this->client->show_user_by_id($token['uid']); 82 $userInfo = $this->client->show_user_by_id($token['uid']);
83 83
@@ -108,7 +108,7 @@ class Call extends Factory @@ -108,7 +108,7 @@ class Call extends Factory
108 108
109 if (is_array($token) && isset($token['access_token'])) 109 if (is_array($token) && isset($token['access_token']))
110 { 110 {
111 - $this->client = new SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']); 111 + $this->client = new \SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']);
112 112
113 $result = $this->client->friends_by_id($params['uid'], $params['cursor'], $params['count']); 113 $result = $this->client->friends_by_id($params['uid'], $params['cursor'], $params['count']);
114 114
@@ -133,7 +133,7 @@ class Call extends Factory @@ -133,7 +133,7 @@ class Call extends Factory
133 133
134 if (is_array($token) && isset($token['access_token'])) 134 if (is_array($token) && isset($token['access_token']))
135 { 135 {
136 - $this->client = new SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']); 136 + $this->client = new \SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']);
137 137
138 $result = $this->client->bilateral($params['uid'], $params['page'], $params['count']); 138 $result = $this->client->bilateral($params['uid'], $params['page'], $params['count']);
139 139
@@ -163,7 +163,7 @@ class Call extends Factory @@ -163,7 +163,7 @@ class Call extends Factory
163 { 163 {
164 $content .= $link; 164 $content .= $link;
165 165
166 - $this->client = new SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']); 166 + $this->client = new \SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']);
167 167
168 $response = $this->client->upload($content, $image); 168 $response = $this->client->upload($content, $image);
169 169
@@ -190,7 +190,7 @@ class Call extends Factory @@ -190,7 +190,7 @@ class Call extends Factory
190 190
191 if (is_array($token) && isset($token['access_token'])) 191 if (is_array($token) && isset($token['access_token']))
192 { 192 {
193 - $this->client = new SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']); 193 + $this->client = new \SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']);
194 194
195 if ($uid !== null) 195 if ($uid !== null)
196 { 196 {
@@ -218,7 +218,7 @@ class Call extends Factory @@ -218,7 +218,7 @@ class Call extends Factory
218 218
219 if (is_array($token) && isset($token['access_token']) && is_string($content)) 219 if (is_array($token) && isset($token['access_token']) && is_string($content))
220 { 220 {
221 - $this->client = new SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']); 221 + $this->client = new \SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']);
222 222
223 $this->client->update($content); 223 $this->client->update($content);
224 } 224 }
@@ -238,7 +238,7 @@ class Call extends Factory @@ -238,7 +238,7 @@ class Call extends Factory
238 { 238 {
239 if (is_array($token) && isset($token['access_token']) && isset($uid)) 239 if (is_array($token) && isset($token['access_token']) && isset($uid))
240 { 240 {
241 - $this->client = new SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']); 241 + $this->client = new \SaeTClientV2($this->apiConfig['appId'], $this->apiConfig['appKey'], $token['access_token']);
242 $this->client->send_dm_by_id($uid, $content, $id); 242 $this->client->send_dm_by_id($uid, $content, $id);
243 } 243 }
244 } 244 }
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 defined('SITE_MAIN') || define('SITE_MAIN', $_SERVER['HTTP_HOST']); 2 defined('SITE_MAIN') || define('SITE_MAIN', $_SERVER['HTTP_HOST']);
3 3
4 return array( 4 return array(
5 - 'appId' => '2707954749',  
6 - 'appKey' => '431730e25a8a0983964a740731c3cb7d', 5 + 'appId' => '3739328910',
  6 + 'appKey' => '9d44cded26d048e23089e5e975c93df1',
7 'appCallbackUrl' => SITE_MAIN . '/passport/login/sinacallback', 7 'appCallbackUrl' => SITE_MAIN . '/passport/login/sinacallback',
8 ); 8 );
@@ -17,3 +17,4 @@ require('./browse-record'); @@ -17,3 +17,4 @@ require('./browse-record');
17 require('./address-act'); 17 require('./address-act');
18 require('./logistic'); 18 require('./logistic');
19 require('./pay'); 19 require('./pay');
  20 +require('./personal-details');
@@ -18,13 +18,14 @@ var introUrl = $('#introUrl').val(), @@ -18,13 +18,14 @@ var introUrl = $('#introUrl').val(),
18 var sizeSwiper, 18 var sizeSwiper,
19 refSwiper; 19 refSwiper;
20 20
21 -require('../recommend-for-you.js');  
22 -  
23 //判断是否要显示向左滑动提示 21 //判断是否要显示向左滑动提示
24 function hiddenTips($ele) { 22 function hiddenTips($ele) {
  23 + var offsetContainer,
  24 + offsetLastColumn;
  25 +
25 if ($ele.length > 0) { 26 if ($ele.length > 0) {
26 - var offsetContainer = $ele[0].getBoundingClientRect().right;  
27 - var offsetLastColumn = $ele.find('.swiper-slide:last-child')[0].getBoundingClientRect().right; 27 + offsetContainer = $ele[0].getBoundingClientRect().right;
  28 + offsetLastColumn = $ele.find('.swiper-slide:last-child')[0].getBoundingClientRect().right;
28 29
29 30
30 if (offsetLastColumn - offsetContainer < 0) { 31 if (offsetLastColumn - offsetContainer < 0) {
@@ -17,6 +17,7 @@ var goodsDiscountEl = document.getElementById('goodsDiscount'), @@ -17,6 +17,7 @@ var goodsDiscountEl = document.getElementById('goodsDiscount'),
17 17
18 require('./desc'); 18 require('./desc');
19 require('./comments-consults'); 19 require('./comments-consults');
  20 +require('../recommend-for-you-product-desc');
20 21
21 //add extra marign-bottom for footer to show the yoho copyright 22 //add extra marign-bottom for footer to show the yoho copyright
22 function showFooter() { 23 function showFooter() {
@@ -43,7 +44,8 @@ goodsSwiper = new Swiper('.banner-swiper', { @@ -43,7 +44,8 @@ goodsSwiper = new Swiper('.banner-swiper', {
43 paginationClickable: true, 44 paginationClickable: true,
44 pagination: '.banner-top .pagination-inner', 45 pagination: '.banner-top .pagination-inner',
45 nextButton: '.my-swiper-button-next', 46 nextButton: '.my-swiper-button-next',
46 - prevButton: '.my-swiper-button-prev' 47 + prevButton: '.my-swiper-button-prev',
  48 + spaceBetween: 3
47 }); 49 });
48 50
49 51
@@ -69,4 +71,3 @@ if (goodsDiscountHammer) { @@ -69,4 +71,3 @@ if (goodsDiscountHammer) {
69 71
70 72
71 require('./like'); 73 require('./like');
72 -  
1 -/**  
2 - * 商品详情 --滚动页面加载  
3 - * @author: Lynnic  
4 - * @date: 2015/11/25  
5 - */  
6 -  
7 -// var $ = require('jquery'),  
8 -// loading = require('../../plugin/loading'),  
9 -// tip = require('../../plugin/tip');  
10 -  
11 -// var loadMoreUrl = $('#loadMoreUrl').val(),  
12 -// $commentsDiv = $('#goods-comments'),  
13 -// $consultsDiv = $('#goods-consults'),  
14 -// winH = $(window).height(),  
15 -// searching = false,  
16 -// end = false;  
17 -  
18 -// var jsonObj;  
19 -  
20 -// //插入评论列表底部  
21 -// function insertCommentsDiv(json) {  
22 -// var html = '';  
23 -// var i;  
24 -  
25 -  
26 -// for (i = 0; i < json.length; i++) {  
27 -// html += '<div class="comment-item">';  
28 -// html += '<span class="user-name">' + json[i].userName + '</span>';  
29 -// html += '<span class="goods-spec">' + json[i].desc + '</span>';  
30 -// html += '<span class="goods-spec">' + json[i].content + '</span>';  
31 -// html += '<span class="goods-spec">' + json[i].time + '</span>';  
32 -// }  
33 -// $commentsDiv.append(html);  
34 -// }  
35 -  
36 -// //插入咨询列表底部  
37 -// function insertConsultsDiv(json) {  
38 -// var html = '';  
39 -// var i;  
40 -  
41 -  
42 -// for (i = 0; i < json.length; i++) {  
43 -// html += '<div class="consult-item"> ';  
44 -// html += '<div class="question"> ';  
45 -// html += '<span class="iconfont">&#xe639;</span> ';  
46 -// html += '<p> ';  
47 -// html += json[i].question + '<br> ';  
48 -// html += '<span class="time">' + json[i].time + '</span> ';  
49 -// html += '</p> ';  
50 -// html += '</div> ';  
51 -  
52 -// html += '<div class="answer"> ';  
53 -// html += '<span class="iconfont">&#xe63c;</span> ';  
54 -// html += '<p>' + json[i].answer + '</p> ';  
55 -// html += '</div> ';  
56 -// html += '</div> ';  
57 -// }  
58 -// $consultsDiv.append(html);  
59 -// }  
60 -  
61 -// function search() {  
62 -// if (searching || end) {  
63 -// return;  
64 -// }  
65 -// searching = true;  
66 -  
67 -// loading.showLoadingMask();  
68 -  
69 -// $.ajax({  
70 -// type: 'GET',  
71 -// url: loadMoreUrl,  
72 -// success: function(data) {  
73 -// if (data.length > 0) {  
74 -// jsonObj = JSON.parse(data);  
75 -// if ($commentsDiv.length > 0) {  
76 -// insertCommentsDiv(jsonObj);  
77 -// } else if ($consultsDiv.length > 0) {  
78 -// insertConsultsDiv(jsonObj);  
79 -// }  
80 -// }  
81 -// searching = false;  
82 -// end = true;  
83 -// loading.hideLoadingMask();  
84 -// },  
85 -// error: function() {  
86 -// tip.show('网络断开连接了~');  
87 -// searching = false;  
88 -// loading.hideLoadingMask();  
89 -// }  
90 -// });  
91 -// }  
92 -  
93 -  
94 -// function scrollHandler() {  
95 -// if (!end || $(window).scrollTop() + winH >= $(document).height() - 50) {  
96 -// search();  
97 -// }  
98 -// }  
99 -  
100 -// //srcoll to load more  
101 -// $(window).scroll(function() {  
102 -// window.requestAnimationFrame(scrollHandler);  
103 -// });  
@@ -8,5 +8,6 @@ require('./newsale/newarrival'); @@ -8,5 +8,6 @@ require('./newsale/newarrival');
8 require('./newsale/discount'); 8 require('./newsale/discount');
9 require('./list'); 9 require('./list');
10 require('./detail/detail'); 10 require('./detail/detail');
11 -require('./detail/loadmore');  
12 -require('./detail/consultform');  
  11 +require('./detail/consultform');
  12 +require('./newsale/hot-rank');
  13 +
  1 +/**
  2 + * 为您优选
  3 + * @author: liangzhifeng<zhifeng.liang@yoho.cn>
  4 + * @date: 2015/11/16
  5 + */
  6 +
  7 +
  8 +var Swiper = require('yoho.iswiper'),
  9 + $ = require('jquery');
  10 +
  11 +var recommendSwiper,
  12 + $recommendForYou = $('.recommend-for-you'),
  13 + preferenceUrl = $('#preferenceUrl').val();
  14 +
  15 +if (preferenceUrl) {
  16 + $.get(preferenceUrl).then(function(html) {
  17 + $recommendForYou.html(html).show();
  18 + if ($('#swiper-recommend').length) {
  19 + recommendSwiper = new Swiper('#swiper-recommend', {
  20 + slidesPerView: 'auto',
  21 + grabCursor: true,
  22 + slideElement: 'a',
  23 + lazyLoading: true,
  24 + watchSlidesVisibility: true
  25 + });
  26 + }
  27 + }).fail(function() {
  28 + $recommendForYou.hide();
  29 + });
  30 +}
@@ -24,7 +24,7 @@ @@ -24,7 +24,7 @@
24 width: pxToRem(126px); 24 width: pxToRem(126px);
25 height: pxToRem(126px); 25 height: pxToRem(126px);
26 border-radius: 50%; 26 border-radius: 50%;
27 - border: pxToRem(6px) solid #a7a8a9; 27 + border: pxToRem(6px) solid #a7a8a9;
28 background-image: image-url("me/index/user-avatar.png"); 28 background-image: image-url("me/index/user-avatar.png");
29 background-size: 100%; 29 background-size: 100%;
30 } 30 }
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 } 46 }
47 47
48 .vip-3 { 48 .vip-3 {
49 - @include rem-sprite($vip, vip-3); 49 + @include rem-sprite($vip, vip-3);
50 } 50 }
51 51
52 .vip-2 { 52 .vip-2 {
@@ -91,7 +91,7 @@ @@ -91,7 +91,7 @@
91 font-size: pxToRem(22px); 91 font-size: pxToRem(22px);
92 line-height: pxToRem(38px); 92 line-height: pxToRem(38px);
93 width: pxToRem(213px); 93 width: pxToRem(213px);
94 - 94 +
95 &:after { 95 &:after {
96 content: ''; 96 content: '';
97 position: absolute; 97 position: absolute;
@@ -153,16 +153,17 @@ @@ -153,16 +153,17 @@
153 153
154 .num { 154 .num {
155 position: absolute; 155 position: absolute;
156 - padding: 0 pxToRem(8px);  
157 - top: 0;  
158 - right: pxToRem(40px);  
159 - min-width: pxToRem(16px);  
160 - font-size: pxToRem(24px);  
161 - line-height: pxToRem(32px); 156 + top: pxToRem(-24px);
  157 + right: pxToRem(36px);
  158 + width: pxToRem(72px);
  159 + height: pxToRem(72px);
  160 + font-size: pxToRem(40px);
  161 + line-height: pxToRem(72px);
162 color: #fff; 162 color: #fff;
163 - background: #F03D35; 163 + background: #f03d35;
164 text-align: center; 164 text-align: center;
165 - border-radius: pxToRem(20px); 165 + border-radius: 50%;
  166 + @include transform(scale(0.5));
166 } 167 }
167 } 168 }
168 169
@@ -184,7 +185,7 @@ @@ -184,7 +185,7 @@
184 padding: 0 pxToRem(30px); 185 padding: 0 pxToRem(30px);
185 font-size: pxToRem(32px); 186 font-size: pxToRem(32px);
186 line-height: pxToRem(88px); 187 line-height: pxToRem(88px);
187 - 188 +
188 &.highlight { 189 &.highlight {
189 background: #eee; 190 background: #eee;
190 } 191 }
@@ -214,4 +215,4 @@ @@ -214,4 +215,4 @@
214 float: right; 215 float: right;
215 } 216 }
216 } 217 }
217 -}  
  218 +}
@@ -13,10 +13,14 @@ @@ -13,10 +13,14 @@
13 .basic-info { 13 .basic-info {
14 padding-top: 30rem / $pxConvertRem; 14 padding-top: 30rem / $pxConvertRem;
15 padding-bottom: 25rem / $pxConvertRem; 15 padding-bottom: 25rem / $pxConvertRem;
16 -  
17 .user-name { 16 .user-name {
  17 + max-width: 240rem / $pxConvertRem;
  18 + text-overflow:ellipsis;
  19 + white-space:nowrap;
18 font-size: 25rem / $pxConvertRem; 20 font-size: 25rem / $pxConvertRem;
19 margin-right: 0.5rem; 21 margin-right: 0.5rem;
  22 + display: inline-block;
  23 + overflow: hidden;
20 } 24 }
21 25
22 .vip-icon { 26 .vip-icon {
@@ -44,22 +44,22 @@ @@ -44,22 +44,22 @@
44 <a class="type-item" href="/home/order?type=2"> 44 <a class="type-item" href="/home/order?type=2">
45 <span class="iconfont">&#xe634;</span> 45 <span class="iconfont">&#xe634;</span>
46 <br>待付款 46 <br>待付款
47 - {{#if pendingPaymentCount}}  
48 - <span class="num">{{pendingPaymentCount}}</span> 47 + {{#if wait_pay_num}}
  48 + <span class="num">{{wait_pay_num}}</span>
49 {{/if}} 49 {{/if}}
50 </a> 50 </a>
51 <a class="type-item" href="/home/order?type=3"> 51 <a class="type-item" href="/home/order?type=3">
52 <span class="iconfont">&#xe63b;</span> 52 <span class="iconfont">&#xe63b;</span>
53 <br>待发货 53 <br>待发货
54 - {{#if dueOutGoodsCount}}  
55 - <span class="num">{{dueOutGoodsCount}}</span> 54 + {{#if wait_cargo_num}}
  55 + <span class="num">{{wait_cargo_num}}</span>
56 {{/if}} 56 {{/if}}
57 </a> 57 </a>
58 <a class="type-item" href="/home/order?type=4"> 58 <a class="type-item" href="/home/order?type=4">
59 <span class="iconfont">&#xe633;</span> 59 <span class="iconfont">&#xe633;</span>
60 <br>待收货 60 <br>待收货
61 - {{#if dueInGoodsCount}}  
62 - <span class="num">{{dueInGoodsCount}}</span> 61 + {{#if send_cargo_num}}
  62 + <span class="num">{{send_cargo_num}}</span>
63 {{/if}} 63 {{/if}}
64 </a> 64 </a>
65 </div> 65 </div>
@@ -144,6 +144,9 @@ @@ -144,6 +144,9 @@
144 {{#if id}} 144 {{#if id}}
145 <input id="productId" type="hidden" value="{{id}}"> 145 <input id="productId" type="hidden" value="{{id}}">
146 {{/if}} 146 {{/if}}
147 - 147 + {{#if preferenceUrl}}
  148 + <input id="preferenceUrl" type="hidden" value="{{preferenceUrl}}">
  149 + {{/if}}
  150 +
148 </div> 151 </div>
149 {{> layout/footer}} 152 {{> layout/footer}}
@@ -46,7 +46,8 @@ class HomeController extends AbstractAction @@ -46,7 +46,8 @@ class HomeController extends AbstractAction
46 $data = array( 46 $data = array(
47 'myIndexPage' => true, 47 'myIndexPage' => true,
48 'showDownloadApp' => true, 48 'showDownloadApp' => true,
49 - 'pageFooter' => true 49 + 'pageFooter' => true,
  50 + 'cartUrl' => Helpers::url('/cart/index/index', null),
50 ); 51 );
51 $uid = $this->getUid(true); 52 $uid = $this->getUid(true);
52 if ($uid) { 53 if ($uid) {
@@ -23,7 +23,7 @@ class OrderModel @@ -23,7 +23,7 @@ class OrderModel
23 { 23 {
24 $result = array(); 24 $result = array();
25 //调用接口获得数据 25 //调用接口获得数据
26 - $data = OrderData::getOrderData($type, $page, $limit, $gender, $yh_channel, 3444485); 26 + $data = OrderData::getOrderData($type, $page, $limit, $gender, $yh_channel, $uid);
27 // 判断是否还有数据, 没有数据则返回空 27 // 判断是否还有数据, 没有数据则返回空
28 if (isset($data['data']['page_total']) && $page > $data['data']['page_total']) { 28 if (isset($data['data']['page_total']) && $page > $data['data']['page_total']) {
29 return $result; 29 return $result;
@@ -62,10 +62,9 @@ class UserModel @@ -62,10 +62,9 @@ class UserModel
62 'brand_favorite_total', 62 'brand_favorite_total',
63 'product_favorite_total', 63 'product_favorite_total',
64 'product_browse', 64 'product_browse',
65 - 'dueInGoodsCount',  
66 - 'dueOutGoodsCount',  
67 - 'pendingPaymentCount',  
68 - 'refundGoodsCount' 65 + 'send_cargo_num',
  66 + 'wait_cargo_num',
  67 + 'wait_pay_num',
69 ); 68 );
70 foreach ($infoNumData['data'] as $key => &$val) { 69 foreach ($infoNumData['data'] as $key => &$val) {
71 70
@@ -211,9 +211,12 @@ class DetailModel @@ -211,9 +211,12 @@ class DetailModel
211 211
212 // 悬浮的购物车信息 212 // 悬浮的购物车信息
213 $result['cartInfo'] = array( 213 $result['cartInfo'] = array(
214 - 'cartUrl' => Helpers::url('/product/buy_' . $productId . '_' . $goodsId . '.html'), 214 + 'cartUrl' => Helpers::url('/cart/index/index', null), // 购物车链接
  215 + 'addToCartUrl' => Helpers::url('/product/buy_' . $productId . '_' . $goodsId . '.html'), // 加入购物车链接
215 'numInCart' => 0, 216 'numInCart' => 0,
216 - 'goodsInstore' => $baseInfo['storage'], 217 + 'goodsInstore' => $baseInfo['storage'], // 库存量
  218 + 'soldOut' => $baseInfo['storage'] == 0, // 已售磬
  219 + 'notForSale' => $baseInfo['attribute'] == 2, // 非卖品
217 ); 220 );
218 221
219 // 是否收藏 222 // 是否收藏
@@ -16,11 +16,13 @@ class LoginController extends AbstractAction @@ -16,11 +16,13 @@ class LoginController extends AbstractAction
16 * 登录页 16 * 登录页
17 */ 17 */
18 public function indexAction() 18 public function indexAction()
19 - { 19 + {
20 $this->setTitle('登录'); 20 $this->setTitle('登录');
21 21
22 - $refer = $this->get('refer', SITE_MAIN . '/?go=1');  
23 - $this->setCookie('refer', $refer); 22 + $refer = $this->get('refer');
  23 + if (!empty($refer)) {
  24 + $this->setCookie('refer', $refer);
  25 + }
24 26
25 $data = array( 27 $data = array(
26 'loginIndex' => true, // 模板中使用JS的标识 28 'loginIndex' => true, // 模板中使用JS的标识
@@ -47,8 +49,10 @@ class LoginController extends AbstractAction @@ -47,8 +49,10 @@ class LoginController extends AbstractAction
47 { 49 {
48 $this->setTitle('国际账号登录'); 50 $this->setTitle('国际账号登录');
49 51
50 - $refer = $this->get('refer', SITE_MAIN . '/?go=1');  
51 - $this->setCookie('refer', $refer); 52 + $refer = $this->get('refer');
  53 + if (!empty($refer)) {
  54 + $this->setCookie('refer', $refer);
  55 + }
52 56
53 $data = array(); 57 $data = array();
54 $data['loginInternational'] = true; // 模板中使用JS的标识 58 $data['loginInternational'] = true; // 模板中使用JS的标识
@@ -63,14 +67,17 @@ class LoginController extends AbstractAction @@ -63,14 +67,17 @@ class LoginController extends AbstractAction
63 67
64 /** 68 /**
65 * 退出 69 * 退出
66 - *  
67 - * @todo  
68 */ 70 */
69 public function outAction() 71 public function outAction()
70 { 72 {
71 $this->setCookie('_UID', ''); 73 $this->setCookie('_UID', '');
72 74
73 - headers_sent() || header('Location: /'); 75 + $refer = $this->server('HTTP_REFERER', SITE_MAIN);
  76 + $token = $this->get('token');
  77 +
  78 + LoginData::signoutSession($token);
  79 +
  80 + $this->go($refer);
74 } 81 }
75 82
76 /** 83 /**
@@ -115,12 +122,12 @@ class LoginController extends AbstractAction @@ -115,12 +122,12 @@ class LoginController extends AbstractAction
115 $refer = $this->getCookie('refer'); 122 $refer = $this->getCookie('refer');
116 if (empty($refer)) { 123 if (empty($refer)) {
117 $refer = SITE_MAIN . '/?go=1'; 124 $refer = SITE_MAIN . '/?go=1';
  125 + } else {
  126 + $refer = rawurldecode($refer);
118 } 127 }
119 - $data['data'] = array(  
120 - // 为了异步调用老系统的SESSION会话  
121 - 'session' => 'http://m1.yohobuy.com/Passport/session/index?callback=call&uid=' . $data['data']['uid'] . '&sign=' . md5($data['data']['uid'] . 'Js8Yn0!EwPM45-ws'),  
122 - 'href' => rawurldecode($refer),  
123 - ); 128 + $data['data']['session'] = Helpers::syncUserSession($data['data']['uid']);
  129 + $data['data']['href'] = $refer;
  130 +
124 } while (false); 131 } while (false);
125 132
126 $this->echoJson($data); 133 $this->echoJson($data);
@@ -131,10 +138,6 @@ class LoginController extends AbstractAction @@ -131,10 +138,6 @@ class LoginController extends AbstractAction
131 */ 138 */
132 public function alipayAction() 139 public function alipayAction()
133 { 140 {
134 - $redirect = $this->_request->getServer('HTTP_REFERER', '');  
135 - if ($redirect != '') {  
136 - $this->setCookie('alipay_redirect', $redirect);  
137 - }  
138 Factory::create('alipay')->getAuthorizeUrl(); 141 Factory::create('alipay')->getAuthorizeUrl();
139 142
140 exit(); 143 exit();
@@ -145,10 +148,6 @@ class LoginController extends AbstractAction @@ -145,10 +148,6 @@ class LoginController extends AbstractAction
145 */ 148 */
146 public function qqAction() 149 public function qqAction()
147 { 150 {
148 - $redirect = $this->_request->getServer('HTTP_REFERER', '');  
149 - if ($redirect != '') {  
150 - $this->setCookie('qq_redirect', $redirect);  
151 - }  
152 Factory::create('qqconnect')->getAuthorizeUrl(); 151 Factory::create('qqconnect')->getAuthorizeUrl();
153 152
154 exit(); 153 exit();
@@ -159,13 +158,7 @@ class LoginController extends AbstractAction @@ -159,13 +158,7 @@ class LoginController extends AbstractAction
159 */ 158 */
160 public function sinaAction() 159 public function sinaAction()
161 { 160 {
162 - $redirect = $this->_request->getServer('HTTP_REFERER', '');  
163 - if ($redirect != '') {  
164 - $this->setCookie('sina_redirect', $redirect);  
165 - }  
166 - header('Location:' . Factory::create('sinaweibo')->getAuthorizeUrl());  
167 -  
168 - exit(); 161 + $this->go(Factory::create('sinaweibo')->getAuthorizeUrl());
169 } 162 }
170 163
171 /** 164 /**
@@ -173,30 +166,27 @@ class LoginController extends AbstractAction @@ -173,30 +166,27 @@ class LoginController extends AbstractAction
173 */ 166 */
174 public function alipaycallbackAction() 167 public function alipaycallbackAction()
175 { 168 {
176 - $nickname = '';  
177 - $alipay = Factory::create('alipay');  
178 - $access = $alipay->getAccessToken();  
179 -  
180 - if (!isset($_GET['real_name'])) {  
181 - /* 获取支付宝用户的详细信息 */  
182 - $userInfo = $alipay->getUserInfo($access);  
183 - if ($userInfo && $userInfo['is_success'] === 'T' && isset($userInfo['response']['user_info']['user_name'])) {  
184 - $nickname = $userInfo['response']['user_info']['user_name'];  
185 - // $alipayEmail = $userInfo['response']['user_info']['email'];  
186 - } 169 + $realName = $this->_request->get('real_name');
  170 + $email = $this->_request->get('email');
  171 + $userId = $this->_request->get('user_id');
  172 +
  173 + $result = array();
  174 + if (isset($realName, $email, $userId)) {
  175 + $result = LoginData::signinByOpenID($realName, $userId, 'alipay');
  176 + }
  177 +
  178 + $refer = $this->getCookie('refer');
  179 + if (empty($refer)) {
  180 + $refer = SITE_MAIN . '/?go=1';
187 } else { 181 } else {
188 - $nickname = $_GET['real_name'];  
189 - // $alipayEmail = isset($_GET['email']) ? $_GET['email'] : ''; 182 + $refer = rawurldecode($refer);
190 } 183 }
191 -  
192 - $result = LoginData::signinByOpenID($nickname, $access['user_id'], 'qq');  
193 -  
194 - if ($result['code'] == 200) {  
195 - $redirect = $this->_request->getCookie('alipay_redirect');  
196 - $redirect && $this->redirect($redirect); 184 +
  185 + if ($result['code'] == 200 && !empty($result['data']['uid'])) {
  186 + $this->go(Helpers::syncUserSession($result['data']['uid'], $refer));
  187 + } else {
  188 + $this->go($refer);
197 } 189 }
198 -  
199 - $this->redirect('/');  
200 } 190 }
201 191
202 /** 192 /**
@@ -209,16 +199,23 @@ class LoginController extends AbstractAction @@ -209,16 +199,23 @@ class LoginController extends AbstractAction
209 /* 获取QQ腾讯用户的详细信息 */ 199 /* 获取QQ腾讯用户的详细信息 */
210 $partnerInfo = $qqconnect->getUserInfo($access); 200 $partnerInfo = $qqconnect->getUserInfo($access);
211 201
  202 + $result = array();
212 if ($partnerInfo && is_array($partnerInfo)) { 203 if ($partnerInfo && is_array($partnerInfo)) {
213 - $result = LoginData::signinByOpenID($partnerInfo['nickname'], $access['openid'], 'qq');  
214 -  
215 - if ($result['code'] == 200) {  
216 - $redirect = $this->_request->getCookie('qq_redirect');  
217 - $redirect && $this->redirect($redirect);  
218 - } 204 + $result = LoginData::signinByOpenID($partnerInfo['nickname'], $access['openid'], 'qq');
219 } 205 }
220 206
221 - $this->redirect('/'); 207 + $refer = $this->getCookie('refer');
  208 + if (empty($refer)) {
  209 + $refer = SITE_MAIN . '/?go=1';
  210 + } else {
  211 + $refer = rawurldecode($refer);
  212 + }
  213 +
  214 + if ($result['code'] == 200 && !empty($result['data']['uid'])) {
  215 + $this->go(Helpers::syncUserSession($result['data']['uid'], $refer));
  216 + } else {
  217 + $this->go($refer);
  218 + }
222 } 219 }
223 220
224 /** 221 /**
@@ -226,21 +223,29 @@ class LoginController extends AbstractAction @@ -226,21 +223,29 @@ class LoginController extends AbstractAction
226 */ 223 */
227 public function sinacallbackAction() 224 public function sinacallbackAction()
228 { 225 {
229 - $sina = Factory::create('sina'); 226 + $sina = Factory::create('sinaweibo');
230 $access = $sina->getAccessToken(); 227 $access = $sina->getAccessToken();
231 /* 获取QQ腾讯用户的详细信息 */ 228 /* 获取QQ腾讯用户的详细信息 */
232 $partnerInfo = $sina->getUserInfo($access); 229 $partnerInfo = $sina->getUserInfo($access);
233 230
  231 + $result = array();
  232 +
234 if ($partnerInfo && is_array($partnerInfo)) { 233 if ($partnerInfo && is_array($partnerInfo)) {
235 $result = LoginData::signinByOpenID($partnerInfo['screen_name'], $access['uid'], 'sina'); 234 $result = LoginData::signinByOpenID($partnerInfo['screen_name'], $access['uid'], 'sina');
236 -  
237 - if ($result['code'] == 200) {  
238 - $redirect = $this->_request->getCookie('sina_redirect');  
239 - $redirect && $this->redirect($redirect);  
240 - }  
241 } 235 }
242 236
243 - $this->redirect('/'); 237 + $refer = $this->getCookie('refer');
  238 + if (empty($refer)) {
  239 + $refer = SITE_MAIN . '/?go=1';
  240 + } else {
  241 + $refer = rawurldecode($refer);
  242 + }
  243 +
  244 + if ($result['code'] == 200 && !empty($result['data']['uid'])) {
  245 + $this->go(Helpers::syncUserSession($result['data']['uid'], $refer));
  246 + } else {
  247 + $this->go($refer);
  248 + }
244 } 249 }
245 250
246 } 251 }
@@ -133,7 +133,7 @@ class RegController extends AbstractAction @@ -133,7 +133,7 @@ class RegController extends AbstractAction
133 /* 返回跳转到验证页面的链接 */ 133 /* 返回跳转到验证页面的链接 */
134 if ($data['code'] == 200) { 134 if ($data['code'] == 200) {
135 $token = Helpers::makeToken($mobile); 135 $token = Helpers::makeToken($mobile);
136 - $data['data'] = '/passport/reg/code?token=' . $token . '&phoneNum=' . $mobile . '&areaCode=' . $area; 136 + $data['data'] = Helpers::url('/passport/reg/code', array('token' => $token, 'phoneNum' => $mobile, 'areaCode' => $area));
137 } 137 }
138 } while (false); 138 } while (false);
139 139
@@ -176,7 +176,7 @@ class RegController extends AbstractAction @@ -176,7 +176,7 @@ class RegController extends AbstractAction
176 /* 返回跳转到设置密码的链接 */ 176 /* 返回跳转到设置密码的链接 */
177 if ($data['code'] == 200) { 177 if ($data['code'] == 200) {
178 $token = Helpers::makeToken($mobile); 178 $token = Helpers::makeToken($mobile);
179 - $data['data'] = '/passport/reg/password?token=' . $token . '&phoneNum=' . $mobile . '&areaCode=' . $area; 179 + $data['data'] = Helpers::url('/passport/reg/password', array('token' => $token, 'phoneNum' => $mobile, 'areaCode' => $area));
180 } else if ($data['code'] == 404) { 180 } else if ($data['code'] == 404) {
181 $data['message'] = '验证码错误'; //统一验证提示 181 $data['message'] = '验证码错误'; //统一验证提示
182 } 182 }
@@ -259,22 +259,20 @@ class RegController extends AbstractAction @@ -259,22 +259,20 @@ class RegController extends AbstractAction
259 259
260 /* 验证注册的标识码是否有效 */ 260 /* 验证注册的标识码是否有效 */
261 $data = RegData::regMobile($area, $mobile, $password); 261 $data = RegData::regMobile($area, $mobile, $password);
262 - if (!isset($data['code'])) { 262 + if (!isset($data['code']) || $data['code'] != 200) {
263 break; 263 break;
264 } 264 }
265 265
266 /* 返回跳转到来源页面 */ 266 /* 返回跳转到来源页面 */
267 - if ($data['code'] == 200) {  
268 - $refer = $this->getCookie('refer');  
269 - if (empty($refer)) {  
270 - $refer = SITE_MAIN . '/?go=1';  
271 - }  
272 - $data['data'] = array(  
273 - // 为了异步调用老系统的SESSION会话  
274 - 'session' => 'http://m1.yohobuy.com/Passport/session/index?uid=' . $data['data']['uid'] . '&sign=' . md5($data['data']['uid'] . 'Js8Yn0!EwPM45-ws'),  
275 - 'href' => rawurldecode($refer),  
276 - ); 267 + $refer = $this->getCookie('refer');
  268 + if (empty($refer)) {
  269 + $refer = SITE_MAIN . '/?go=1';
  270 + } else {
  271 + $refer = rawurldecode($refer);
277 } 272 }
  273 + $data['data']['session'] = Helpers::syncUserSession($data['data']['uid']);
  274 + $data['data']['href'] = $refer;
  275 +
278 } while (false); 276 } while (false);
279 277
280 $this->echoJson($data); 278 $this->echoJson($data);
@@ -40,6 +40,13 @@ routes.interational.route.module = Passport @@ -40,6 +40,13 @@ routes.interational.route.module = Passport
40 routes.interational.route.controller = Login 40 routes.interational.route.controller = Login
41 routes.interational.route.action = International 41 routes.interational.route.action = International
42 42
  43 +; 登录页
  44 +routes.logout.type = "rewrite"
  45 +routes.logout.match = "/passport/signout/index"
  46 +routes.logout.route.module = Passport
  47 +routes.logout.route.controller = Login
  48 +routes.logout.route.action = out
  49 +
43 ; 找回密码(手机号) 50 ; 找回密码(手机号)
44 routes.phoneback.type = "rewrite" 51 routes.phoneback.type = "rewrite"
45 routes.phoneback.match = "/phoneback.html" 52 routes.phoneback.match = "/phoneback.html"