Merge branch 'develop' of http://git.dev.yoho.cn/web/yohobuy into develop
Showing
13 changed files
with
330 additions
and
11 deletions
@@ -608,7 +608,28 @@ | @@ -608,7 +608,28 @@ | ||
608 | //注册页 | 608 | //注册页 |
609 | { | 609 | { |
610 | countrys: [...], //区域列表 | 610 | countrys: [...], //区域列表 |
611 | - countryCode: '' //默认区号 | 611 | + countryCode: '' //默认区号 |
612 | + } | ||
613 | + | ||
614 | + //验证码 | ||
615 | + { | ||
616 | + areaCode: '', | ||
617 | + phoneNum: '' | ||
618 | + } | ||
619 | + | ||
620 | + //密码页 | ||
621 | + { | ||
622 | + ... //仅头部 | ||
623 | + } | ||
624 | + | ||
625 | +### 绑定手机号 | ||
626 | + | ||
627 | + //绑定页 | ||
628 | + { | ||
629 | + countrys: [...], //区域列表 | ||
630 | + areaCode: '', //默认区号 | ||
631 | + sourceType: 'qq', //用户在登录页选择的第三方登录平台 | ||
632 | + openId: '' //第三方登录平台id,用于绑定手机号 | ||
612 | } | 633 | } |
613 | 634 | ||
614 | //验证码 | 635 | //验证码 |
@@ -92,7 +92,7 @@ class BindData | @@ -92,7 +92,7 @@ class BindData | ||
92 | $param['area'] = $area; | 92 | $param['area'] = $area; |
93 | if (!empty($password)) | 93 | if (!empty($password)) |
94 | { | 94 | { |
95 | - $param['passport'] = $password; | 95 | + $param['password'] = $password; |
96 | } | 96 | } |
97 | 97 | ||
98 | $param['client_secret'] = Sign::getSign($param); | 98 | $param['client_secret'] = Sign::getSign($param); |
static/js/passport/bind/bind.js
0 → 100644
1 | +/** | ||
2 | + * 注册 | ||
3 | + * @author: xuqi<qi.xu@yoho.cn> | ||
4 | + * @date: 2015/10/8 | ||
5 | + */ | ||
6 | +var $ = require('jquery'); | ||
7 | + | ||
8 | +var $phoneNum = $('#phone-num'), | ||
9 | + $countrySelect = $('#country-select'), | ||
10 | + $areaCode = $('#area-code'), | ||
11 | + $openId = $('#openId'), | ||
12 | + $nickname = $('#nickname'), | ||
13 | + $sourceType = $('#sourceType'), | ||
14 | + $btnNext = $('#btn-next'); | ||
15 | + | ||
16 | +var api = require('../api'), | ||
17 | + tip = require('../../plugin/tip'), | ||
18 | + dialog = require('../../me/dialog'); | ||
19 | + | ||
20 | +var trim = $.trim; | ||
21 | +var showErrTip = tip.show; | ||
22 | + | ||
23 | +function nextStep(url, mobileNo, areaCode) { | ||
24 | + $.ajax({ | ||
25 | + type: 'POST', | ||
26 | + url: '/passport/bind/sendBindMsg', | ||
27 | + data: { | ||
28 | + phoneNum: mobileNo, | ||
29 | + areaCode: areaCode.replace('+', '') | ||
30 | + }, | ||
31 | + success: function(res) { | ||
32 | + console.log(res.data); | ||
33 | + location.href = url; | ||
34 | + }, | ||
35 | + error: function() { | ||
36 | + tip.show('出错了,请重试!'); | ||
37 | + } | ||
38 | + }); | ||
39 | +} | ||
40 | + | ||
41 | +api.selectCssHack($('#country-select')); | ||
42 | + | ||
43 | +api.bindClearEvt(); | ||
44 | + | ||
45 | +$phoneNum.bind('input', function() { | ||
46 | + if (trim($phoneNum.val()) === '') { | ||
47 | + $btnNext.addClass('disable'); | ||
48 | + } else { | ||
49 | + $btnNext.removeClass('disable'); | ||
50 | + } | ||
51 | +}); | ||
52 | + | ||
53 | +$countrySelect.change(function() { | ||
54 | + $areaCode.text($countrySelect.val()); | ||
55 | +}); | ||
56 | + | ||
57 | +$btnNext.on('touchstart', function() { | ||
58 | + var pn = trim($phoneNum.val()), | ||
59 | + openId = trim($openId.val()), | ||
60 | + nickname = trim($nickname.val()), | ||
61 | + sourceType = trim($sourceType.val()), | ||
62 | + areaCode = $countrySelect.val(); | ||
63 | + | ||
64 | + if ($btnNext.hasClass('disable')) { | ||
65 | + return; | ||
66 | + } | ||
67 | + | ||
68 | + if (api.phoneRegx[areaCode].test(pn)) { | ||
69 | + $.ajax({ | ||
70 | + url: '/passport/bind/bindCheck', | ||
71 | + type: 'POST', | ||
72 | + data: { | ||
73 | + areaCode: areaCode.replace('+', ''), | ||
74 | + phoneNum: pn, | ||
75 | + openId: openId, | ||
76 | + sourceType: sourceType, | ||
77 | + nickname: nickname | ||
78 | + }, | ||
79 | + success: function(res) { | ||
80 | + console.log(res); | ||
81 | + | ||
82 | + //res : { | ||
83 | + // code: 'xxx', | ||
84 | + // data: { | ||
85 | + // isReg: 0, | ||
86 | + // next: 'xxxx' | ||
87 | + // }, | ||
88 | + // message: 'xxxx', | ||
89 | + //} | ||
90 | + | ||
91 | + | ||
92 | + if (res.code === 200) { | ||
93 | + if (res.data.isReg === 1) { | ||
94 | + dialog.showDialog({ | ||
95 | + dialogText: '该手机号已注册过有货\n' + pn + ',确定绑定吗?', | ||
96 | + hasFooter: { | ||
97 | + leftBtnText: '更换号码', | ||
98 | + rightBtnText: '继续绑定' | ||
99 | + } | ||
100 | + }, function() { | ||
101 | + nextStep(res.data.next, pn, areaCode); | ||
102 | + }); | ||
103 | + } else { | ||
104 | + nextStep(res.data.next, pn, areaCode); | ||
105 | + } | ||
106 | + } else { | ||
107 | + showErrTip(res.message); | ||
108 | + } | ||
109 | + } | ||
110 | + }); | ||
111 | + } else { | ||
112 | + showErrTip('手机号格式不正确,请重新输入'); | ||
113 | + } | ||
114 | +}); |
static/js/passport/bind/code.js
0 → 100644
static/js/passport/bind/password.js
0 → 100644
1 | +/** | ||
2 | + * 注册-密码 | ||
3 | + * @author: xuqi<qi.xu@yoho.cn> | ||
4 | + * @date: 2015/10/8 | ||
5 | + */ | ||
6 | +var $ = require('jquery'); | ||
7 | + | ||
8 | +var $pwd = $('#pwd'), | ||
9 | + $btnSure = $('#btn-sure'); | ||
10 | + | ||
11 | +var api = require('../api'); | ||
12 | +var tip = require('../../plugin/tip'); | ||
13 | + | ||
14 | +var trim = $.trim; | ||
15 | +var showErrTip = tip.show; | ||
16 | + | ||
17 | +var nickname = $('#nickname').val(), | ||
18 | + sourceType = $('#sourceType').val(), | ||
19 | + openId = $('#openId').val(), | ||
20 | + phoneNum = $('#phone-num').val(), | ||
21 | + areaCode = $('#area-code').val().replace('+', ''); | ||
22 | + | ||
23 | +function startBind(password) { | ||
24 | + $.ajax({ | ||
25 | + url: '/passport/bind/bindMobile', | ||
26 | + type: 'post', | ||
27 | + data: { | ||
28 | + areaCode: areaCode.replace('+', ''), | ||
29 | + phoneNum: phoneNum, | ||
30 | + openId: openId, | ||
31 | + sourceType: sourceType, | ||
32 | + nickname: nickname, | ||
33 | + password: password | ||
34 | + }, | ||
35 | + success: function(res) { | ||
36 | + if (res.code === 200) { | ||
37 | + tip.show('登录成功'); | ||
38 | + setTimeout(function() { | ||
39 | + location.href = res.data.refer; | ||
40 | + }, 2000); | ||
41 | + } else { | ||
42 | + tip.show(res.message); | ||
43 | + } | ||
44 | + }, | ||
45 | + error: function(err) { | ||
46 | + tip.show('登录失败,请重试!'); | ||
47 | + } | ||
48 | + }); | ||
49 | + } | ||
50 | + | ||
51 | +api.bindEyesEvt({ | ||
52 | + status: 'open' //默认眼睛打开 | ||
53 | +}); | ||
54 | + | ||
55 | +$pwd.bind('input', function() { | ||
56 | + if (trim($pwd.val()) === '') { | ||
57 | + $btnSure.addClass('disable'); | ||
58 | + } else { | ||
59 | + $btnSure.removeClass('disable'); | ||
60 | + } | ||
61 | +}); | ||
62 | + | ||
63 | +$btnSure.on('touchstart', function() { | ||
64 | + var pwd = trim($pwd.val()); | ||
65 | + | ||
66 | + if ($btnSure.hasClass('disable')) { | ||
67 | + return; | ||
68 | + } | ||
69 | + | ||
70 | + if (api.pwdValidate(pwd) === false) { | ||
71 | + showErrTip('密码6-20位,请重新输入'); | ||
72 | + } else { | ||
73 | + startBind(pwd); | ||
74 | + } | ||
75 | +}); |
@@ -5,10 +5,14 @@ | @@ -5,10 +5,14 @@ | ||
5 | */ | 5 | */ |
6 | var $ = require('jquery'); | 6 | var $ = require('jquery'); |
7 | 7 | ||
8 | -module.exports = function(useInRegister) { | 8 | +module.exports = function(useInRegister, useForBind) { |
9 | var $captcha = $('#captcha'), | 9 | var $captcha = $('#captcha'), |
10 | $btnNext = $('#btn-next'), | 10 | $btnNext = $('#btn-next'), |
11 | $captchaTip = $('#captcha-tip'), | 11 | $captchaTip = $('#captcha-tip'), |
12 | + isReg = parseInt($('#isReg').val()), | ||
13 | + nickname = $('#nickname').val(), | ||
14 | + sourceType = $('#sourceType').val(), | ||
15 | + openId = $('#openId').val(), | ||
12 | phoneNum = $('#phone-num').val(), | 16 | phoneNum = $('#phone-num').val(), |
13 | areaCode = $('#area-code').val().replace('+', ''); | 17 | areaCode = $('#area-code').val().replace('+', ''); |
14 | 18 | ||
@@ -20,6 +24,34 @@ module.exports = function(useInRegister) { | @@ -20,6 +24,34 @@ module.exports = function(useInRegister) { | ||
20 | 24 | ||
21 | var urlMid = useInRegister ? 'reg' : 'back'; | 25 | var urlMid = useInRegister ? 'reg' : 'back'; |
22 | 26 | ||
27 | + function startBind() { | ||
28 | + $.ajax({ | ||
29 | + url: '/passport/bind/bindMobile', | ||
30 | + type: 'post', | ||
31 | + data: { | ||
32 | + areaCode: areaCode.replace('+', ''), | ||
33 | + phoneNum: phoneNum, | ||
34 | + openId: openId, | ||
35 | + sourceType: sourceType, | ||
36 | + nickname: nickname, | ||
37 | + password: '' | ||
38 | + }, | ||
39 | + success: function(res) { | ||
40 | + if (res.code === 200) { | ||
41 | + tip.show('登录成功'); | ||
42 | + setTimeout(function() { | ||
43 | + location.href = res.data.refer; | ||
44 | + }, 2000); | ||
45 | + } else { | ||
46 | + tip.show(res.message); | ||
47 | + } | ||
48 | + }, | ||
49 | + error: function(err) { | ||
50 | + tip.show('登录失败,请重试!'); | ||
51 | + } | ||
52 | + }); | ||
53 | + } | ||
54 | + | ||
23 | function countDown() { | 55 | function countDown() { |
24 | var count = 59, | 56 | var count = 59, |
25 | itime; | 57 | itime; |
@@ -52,7 +84,7 @@ module.exports = function(useInRegister) { | @@ -52,7 +84,7 @@ module.exports = function(useInRegister) { | ||
52 | 84 | ||
53 | $.ajax({ | 85 | $.ajax({ |
54 | type: 'POST', | 86 | type: 'POST', |
55 | - url: '/passport/' + urlMid + '/sendcode', | 87 | + url: useForBind ? '/passport/bind/sendBindMsg' : '/passport/' + urlMid + '/sendcode', |
56 | data: { | 88 | data: { |
57 | phoneNum: phoneNum, | 89 | phoneNum: phoneNum, |
58 | areaCode: areaCode | 90 | areaCode: areaCode |
@@ -77,7 +109,7 @@ module.exports = function(useInRegister) { | @@ -77,7 +109,7 @@ module.exports = function(useInRegister) { | ||
77 | 109 | ||
78 | $.ajax({ | 110 | $.ajax({ |
79 | type: 'POST', | 111 | type: 'POST', |
80 | - url: '/passport/' + urlMid + '/verifycode', | 112 | + url: useForBind ? '/passport/bind/checkBindMsg' : '/passport/' + urlMid + '/verifycode', |
81 | data: { | 113 | data: { |
82 | phoneNum: phoneNum, | 114 | phoneNum: phoneNum, |
83 | areaCode: areaCode, | 115 | areaCode: areaCode, |
@@ -86,15 +118,26 @@ module.exports = function(useInRegister) { | @@ -86,15 +118,26 @@ module.exports = function(useInRegister) { | ||
86 | }, | 118 | }, |
87 | success: function(data) { | 119 | success: function(data) { |
88 | if (data.code === 200) { | 120 | if (data.code === 200) { |
89 | - location.href = data.data; | 121 | + if (useForBind) { |
122 | + if (isReg) { | ||
123 | + startBind(); | ||
124 | + } else { | ||
125 | + location.href = '/passport/bind/password?phoneNum=' + | ||
126 | + phoneNum + '&areaCode=' + areaCode + '&openId=' + | ||
127 | + openId + '&sourceType=' + sourceType + '&nickname=' + nickname; | ||
128 | + } | ||
129 | + } else { | ||
130 | + location.href = data.data; | ||
131 | + } | ||
90 | } else { | 132 | } else { |
91 | 133 | ||
92 | //验证码不正确,显示提示 | 134 | //验证码不正确,显示提示 |
93 | showErrTip(data.message); | 135 | showErrTip(data.message); |
94 | } | 136 | } |
137 | + | ||
95 | } | 138 | } |
96 | }); | 139 | }); |
97 | }); | 140 | }); |
98 | 141 | ||
99 | countDown(); | 142 | countDown(); |
100 | -}; | ||
143 | +}; |
@@ -3,3 +3,15 @@ | @@ -3,3 +3,15 @@ | ||
3 | color: #fff; | 3 | color: #fff; |
4 | font-size: 15px; | 4 | font-size: 15px; |
5 | } | 5 | } |
6 | + | ||
7 | + #yohood { | ||
8 | + background-image: image-url('yohood.png'); | ||
9 | + background-size: 40%; | ||
10 | + background-repeat: no-repeat; | ||
11 | + background-color: transparent; | ||
12 | + background-position-x: 10%; | ||
13 | + background-position-y: 40%; | ||
14 | + border: none; | ||
15 | + border-bottom: 4px solid #fff; | ||
16 | + | ||
17 | + } |
1 | +{{> layout/header}} | ||
2 | +<div class="reg-code-page passport-page yoho-page"> | ||
3 | + <input type="hidden" id="isReg" value="{{isReg}}"> | ||
4 | + <input type="hidden" id="openId" value="{{openId}}"> | ||
5 | + <input type="hidden" id="sourceType" value="{{sourceType}}"> | ||
6 | + <input type="hidden" id="nickname" value="{{nickname}}"> | ||
7 | + {{> passport/code}} | ||
8 | +</div> | ||
9 | +{{> layout/footer}} |
1 | {{> layout/header}} | 1 | {{> layout/header}} |
2 | <div class="bind-page passport-page yoho-page"> | 2 | <div class="bind-page passport-page yoho-page"> |
3 | + <input type="hidden" id="openId" value="{{openId}}"> | ||
4 | + <input type="hidden" id="sourceType" value="{{sourceType}}"> | ||
5 | + <input type="hidden" id="nickname" value="{{nickname}}"> | ||
3 | {{> passport/header}} | 6 | {{> passport/header}} |
4 | <div class="content"> | 7 | <div class="content"> |
5 | {{> passport/country_list}} | 8 | {{> passport/country_list}} |
@@ -8,7 +11,7 @@ | @@ -8,7 +11,7 @@ | ||
8 | <input id="phone-num" class="input phone-num" type="text" placeholder="手机号"> | 11 | <input id="phone-num" class="input phone-num" type="text" placeholder="手机号"> |
9 | </div> | 12 | </div> |
10 | <span id="btn-next" class="btn btn-next disable row">下一步</span> | 13 | <span id="btn-next" class="btn btn-next disable row">下一步</span> |
11 | - <p class="bind-tip">YOHO!Family账号可登录Yoho!Buy有货、YOHO!Boys、YOHO!Girls及SHOW</p> | 14 | + <p class="bind-tip">绑定手机号码后,可选择{{platform}}和手机号登录此帐号</p> |
12 | </div> | 15 | </div> |
13 | </div> | 16 | </div> |
14 | {{> layout/footer}} | 17 | {{> layout/footer}} |
1 | +{{> layout/header}} | ||
2 | +<div class="bind-password-page passport-page yoho-page"> | ||
3 | + <input type="hidden" id="openId" value="{{openId}}"> | ||
4 | + <input type="hidden" id="sourceType" value="{{sourceType}}"> | ||
5 | + <input type="hidden" id="nickname" value="{{nickname}}"> | ||
6 | + {{> passport/header}} | ||
7 | + <div class="content"> | ||
8 | + <div class="input-container row has-eye"> | ||
9 | + <input id="pwd" class="input pwd" type="text" placeholder="请输入密码" autocomplete="off" maxlength="20"> | ||
10 | + </div> | ||
11 | + <span id="btn-sure" class="btn btn-sure disable row">确定</span> | ||
12 | + </div> | ||
13 | + <input id="phone-num" type="hidden" value={{phoneNum}}> | ||
14 | + <input id="area-code" type="hidden" value={{areaCode}}> | ||
15 | + <input id="token" type="hidden" value={{token}}> | ||
16 | +</div> | ||
17 | +{{> layout/footer}} |
@@ -52,6 +52,22 @@ | @@ -52,6 +52,22 @@ | ||
52 | seajs.use('js/passport/register/password'); | 52 | seajs.use('js/passport/register/password'); |
53 | </script> | 53 | </script> |
54 | {{/if}} | 54 | {{/if}} |
55 | +{{!-- 绑定手机号 --}} | ||
56 | +{{#if bindIndex}} | ||
57 | +<script> | ||
58 | + seajs.use('js/passport/bind/bind'); | ||
59 | +</script> | ||
60 | +{{/if}} | ||
61 | +{{#if bindCode}} | ||
62 | +<script> | ||
63 | + seajs.use('js/passport/bind/code'); | ||
64 | +</script> | ||
65 | +{{/if}} | ||
66 | +{{#if bindPwd}} | ||
67 | +<script> | ||
68 | + seajs.use('js/passport/bind/password'); | ||
69 | +</script> | ||
70 | +{{/if}} | ||
55 | {{!-- 登陆 --}} | 71 | {{!-- 登陆 --}} |
56 | {{#if loginIndex}} | 72 | {{#if loginIndex}} |
57 | <script> | 73 | <script> |
@@ -168,7 +168,7 @@ class DetailModel | @@ -168,7 +168,7 @@ class DetailModel | ||
168 | foreach ($baseInfo['goodsList'] as $value) { | 168 | foreach ($baseInfo['goodsList'] as $value) { |
169 | $sizeList = array(); | 169 | $sizeList = array(); |
170 | $colorStorageNum = 0; | 170 | $colorStorageNum = 0; |
171 | - $sizeStorageStr = ''; // clear to empty | 171 | + $sizeStorageStr = ''; |
172 | 172 | ||
173 | // 商品分组 | 173 | // 商品分组 |
174 | if (isset($value['goodsImagesList'])) { | 174 | if (isset($value['goodsImagesList'])) { |
@@ -210,7 +210,7 @@ class DetailModel | @@ -210,7 +210,7 @@ class DetailModel | ||
210 | // 缩略图 | 210 | // 缩略图 |
211 | $thumbImageList[] = array('img' => Helpers::getImageUrl($value['colorImage'], 60, 60) ); | 211 | $thumbImageList[] = array('img' => Helpers::getImageUrl($value['colorImage'], 60, 60) ); |
212 | 212 | ||
213 | - // 统计每个尺码对应的各个颜色的库存量 | 213 | + // 统计尺码对应的各个颜色的库存量 |
214 | foreach ($sizeList as &$sizeArr) { | 214 | foreach ($sizeList as &$sizeArr) { |
215 | $sizeArr['colorNumStr'] = implode('/', array_values($colorStorageGroup[ $sizeArr['name'] ]) ); | 215 | $sizeArr['colorNumStr'] = implode('/', array_values($colorStorageGroup[ $sizeArr['name'] ]) ); |
216 | } | 216 | } |
@@ -86,6 +86,7 @@ class BindController extends AbstractAction | @@ -86,6 +86,7 @@ class BindController extends AbstractAction | ||
86 | $sourceType = $this->get('sourceType'); | 86 | $sourceType = $this->get('sourceType'); |
87 | $nickname = $this->get('nickname'); | 87 | $nickname = $this->get('nickname'); |
88 | $areaCode = $this->get('areaCode', '86'); | 88 | $areaCode = $this->get('areaCode', '86'); |
89 | + $phoneNum=$this->get('phoneNum'); | ||
89 | $data = array( | 90 | $data = array( |
90 | 'bindPwd'=>true,//js标识 | 91 | 'bindPwd'=>true,//js标识 |
91 | 'backUrl' => '/', // 返回的URL链接 | 92 | 'backUrl' => '/', // 返回的URL链接 |
@@ -94,7 +95,8 @@ class BindController extends AbstractAction | @@ -94,7 +95,8 @@ class BindController extends AbstractAction | ||
94 | 'sourceType' => $sourceType, // 第三方登录来源 | 95 | 'sourceType' => $sourceType, // 第三方登录来源 |
95 | 'openId' => $openId, // openId | 96 | 'openId' => $openId, // openId |
96 | 'nickname' => $nickname, //昵称 | 97 | 'nickname' => $nickname, //昵称 |
97 | - 'areaCode' => $areaCode //国别码 | 98 | + 'areaCode' => $areaCode, //国别码 |
99 | + 'phoneNum' => $phoneNum //国别码 | ||
98 | ); | 100 | ); |
99 | 101 | ||
100 | // 渲染模板 | 102 | // 渲染模板 |
-
Please register or login to post a comment