Authored by 毕凯

Merge branch 'feature/loginIp' into 'release/5.6'

开发完成



See merge request !472
@@ -504,7 +504,13 @@ exports.detail = (req, res) => { @@ -504,7 +504,13 @@ exports.detail = (req, res) => {
504 isQuanYi: true 504 isQuanYi: true
505 }; 505 };
506 } 506 }
507 - options.isApp = req.__USER__.isApp; 507 +
  508 + if (req.yoho.isApp || req.yoho.isWechat) {
  509 + options.isShowHeader = false;
  510 + } else {
  511 + options.isShowHeader = true;
  512 + }
  513 +
508 res.render('detail', options); 514 res.render('detail', options);
509 }; 515 };
510 516
1 -{{#unless isApp}} 1 +{{#if isShowHeader}}
2 <header class="yoho-header"> 2 <header class="yoho-header">
3 <a href="javascript:history.go(-1);" class="iconfont nav-back close"></a> 3 <a href="javascript:history.go(-1);" class="iconfont nav-back close"></a>
4 <p class="nav-title">{{title}}</p> 4 <p class="nav-title">{{title}}</p>
5 </header> 5 </header>
6 -{{/unless}} 6 +{{/if}}
7 {{#isQuanYi}} 7 {{#isQuanYi}}
8 <div class="mobile-container"> 8 <div class="mobile-container">
9 <div class="mobile-wrap yoho-page student"> 9 <div class="mobile-wrap yoho-page student">
10 <section class='s-text'> 10 <section class='s-text'>
11 - <h6>权益1:新品立享9折</h6>  
12 - <p>1、学生购买指定原价新品时,可立即享受9折优惠,与VIP折扣不可同时享受。</p>  
13 - <h6>权益2:每1元返1个有货币</h6>  
14 - <p>1、学生购买指定商品时,以商品的实际成交金额计算,每1元返1个有货币;</p>  
15 - <p>2、返有货币时间:确认收货7日后,系统将自动将对应数量的有货币返至购买账户;</p> 11 + <h6><b>权益一:</b>认证立赠100有货币</h6>
  12 + <p>认证成功,立即赠送100有货币。</p>
  13 + <h6><b>权益二:</b>新品立享9折</h6>
  14 + <p>学生购买指定原价新品时,可立即享受9折优惠,此折扣与VIP折扣不可同时享受。</p>
  15 + <h6><b>权益三:</b>每1元返1个有货币</h6>
  16 + <p>1、学生购买指定商品时,每1元返1个有货币(以商品的实际成交金额计算);</p>
  17 + <p>2、有货币返还时间:确认收货7日后,系统自动将对应数量的有货币返还至购买账户;</p>
16 <p>3、有货币有效期:获得当日至次年12月31日,逾期自动作废;</p> 18 <p>3、有货币有效期:获得当日至次年12月31日,逾期自动作废;</p>
17 <p>4、查看有货币:登录后,点击“个人中心”在“我的有货币”中可以查看有货币余额及明细。</p> 19 <p>4、查看有货币:登录后,点击“个人中心”在“我的有货币”中可以查看有货币余额及明细。</p>
18 - <h6>权益3:免单抽奖</h6>  
19 - <p>1、每月将在累计购物金额最高的学校中,抽取3名幸运学生用户,获得免单资格;</p>  
20 - <p>2、免单用户名单将在每月第1个工作日公布在有货微信公众号上,可关注【有货YOHOBUY】;</p>  
21 - <p>3、免单用户将在中奖次日获得与实付金额等额的现金券,使用时间:中奖当月。</p>  
22 - <h6>权益4:学生专享活动</h6>  
23 - <p>1、每月不定期的开展学生专享活动,可打开有货APP推送,及时查收学生专享活动通知。</p> 20 + <h6><b>权益四:</b>分期付款</h6>
  21 + <p>开通有货分期后,可享受部分商品30天延后付款,最长6个月的分期付款,开启任性购物模式。</p>
24 <h6></h6> 22 <h6></h6>
25 </section> 23 </section>
26 </div> 24 </div>
@@ -30,10 +28,26 @@ @@ -30,10 +28,26 @@
30 <div class="mobile-container"> 28 <div class="mobile-container">
31 <div class="mobile-wrap yoho-page student"> 29 <div class="mobile-wrap yoho-page student">
32 <section class='s-text'> 30 <section class='s-text'>
33 - <h6>认证协议</h6>  
34 - <p>1、全日制大学及硕士博士研究生</p>  
35 - <p>2、学校在可选范围内,有部分学校可能暂未收录,后期会尽快添加</p>  
36 - <p>3、每个学号只能认证一个有货账户</p> 31 + <h6>认证资格说明</h6>
  32 + <p>1、全日制大学本科、研究生、博士;</p>
  33 + <p>2、学校在可选范围之内,可能有部分学校暂未被收录,后期会尽快添加;</p>
  34 + <p>3、每个学号只能认证一个有货账户;</p>
  35 + </section>
  36 +
  37 + <section class='s-text'>
  38 + <h6>特权详细说明</h6>
  39 + <p><b>权益一:</b>认证立赠100有货币</p>
  40 + <p>认证成功,立即赠送100有货币。</p><br>
  41 + <p><b>权益二:</b>新品立享9折</p>
  42 + <p>学生购买指定原价新品时,可立即享受9折优惠,此折扣与VIP折扣不可同时享受。</p><br>
  43 + <p><b>权益三:</b>每1元返1个有货币</p>
  44 + <p>1、学生购买指定商品时,每1元返1个有货币(以商品的实际成交金额计算);</p>
  45 + <p>2、有货币返还时间:确认收货7日后,系统自动将对应数量的有货币返还至购买账户;</p>
  46 + <p>3、有货币有效期:获得当日至次年12月31日,逾期自动作废;</p>
  47 + <p>4、查看有货币:登录后,点击“个人中心”在“我的有货币”中可以查看有货币余额及明细。</p><br>
  48 + <p><b>权益四:</b>分期付款</p>
  49 + <p>开通有货分期后,可享受部分商品30天延后付款,最长6个月的分期付款,开启任性购物模式。</p>
  50 + <h6></h6>
37 </section> 51 </section>
38 </div> 52 </div>
39 </div> 53 </div>
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 <input type="checkbox" id="checkbox" class="regular-checkbox" style="visibility: hidden;"> 37 <input type="checkbox" id="checkbox" class="regular-checkbox" style="visibility: hidden;">
38 <label class="checkbox icon-s-checked iconfont" for="checkbox"> 38 <label class="checkbox icon-s-checked iconfont" for="checkbox">
39 </label> 39 </label>
40 - 同意<a class="s-blue" href='//m.yohobuy.com/activity/student/detail/renzhen?openby:yohobuy={"action":"go.h5","params":{"islogin":"N","url":"{{http}}//m.yohobuy.com/activity/student/detail/renzhen"}}'>Yoho!Buy有货学生认证协议</a> 40 + 同意<a class="s-blue" href='//m.yohobuy.com/activity/student/detail/renzhen'>Yoho!Buy有货学生认证协议</a>
41 </section> 41 </section>
42 <a class="s-submit" href="javascript:void(0);">立即认证</a> 42 <a class="s-submit" href="javascript:void(0);">立即认证</a>
43 </div> 43 </div>
@@ -68,6 +68,8 @@ passport.use(new LocalStrategy({ @@ -68,6 +68,8 @@ passport.use(new LocalStrategy({
68 AuthHelper.signinAes(area, username, password, shoppingKey, clientIp).then((result) => { 68 AuthHelper.signinAes(area, username, password, shoppingKey, clientIp).then((result) => {
69 if (result.code && result.code === 200 && result.data.uid) { 69 if (result.code && result.code === 200 && result.data.uid) {
70 done(null, result.data); 70 done(null, result.data);
  71 + } if (result.code && result.code === 4189) {
  72 + done({code: 4189}, null);
71 } else { 73 } else {
72 done('账号或密码不正确', null); 74 done('账号或密码不正确', null);
73 } 75 }
@@ -184,16 +184,25 @@ const local = { @@ -184,16 +184,25 @@ const local = {
184 184
185 passport.authenticate('local', (err, user) => { 185 passport.authenticate('local', (err, user) => {
186 if (err || !user) { 186 if (err || !user) {
187 - let obj = {  
188 - code: 400,  
189 - message: err || '登录出错请重试',  
190 - data: '',  
191 - captchaShow: true  
192 - };  
193 -  
194 - cache.set(`loginErrorIp:${req.yoho.clientIp}`, true, 3600).catch(log.error);  
195 -  
196 - res.json(obj); 187 + if (err.code === 4189) {
  188 + let obj = {
  189 + code: 4189,
  190 + message: err || '登录出错请重试',
  191 + url: '//m.yohobuy.com/passport/sms_login'
  192 + };
  193 +
  194 + return res.json(obj);
  195 + } else {
  196 + let obj = {
  197 + code: 400,
  198 + message: err || '登录出错请重试',
  199 + data: '',
  200 + captchaShow: true
  201 + };
  202 +
  203 + cache.set(`loginErrorIp:${req.yoho.clientIp}`, true, 3600).catch(log.error);
  204 + return res.json(obj);
  205 + }
197 } else { 206 } else {
198 let refer = req.cookies.refer; 207 let refer = req.cookies.refer;
199 208
@@ -16,4 +16,4 @@ @@ -16,4 +16,4 @@
16 </div> 16 </div>
17 <script> 17 <script>
18 var countdown = {{countdown}}; 18 var countdown = {{countdown}};
19 -</script>  
  19 +</script>
@@ -23,7 +23,7 @@ const domains = { @@ -23,7 +23,7 @@ const domains = {
23 23
24 module.exports = { 24 module.exports = {
25 app: 'h5', 25 app: 'h5',
26 - appVersion: '5.5.2', // 调用api的版本 26 + appVersion: '5.6.0', // 调用api的版本
27 port: 6001, 27 port: 6001,
28 siteUrl: '//m.yohobuy.com', 28 siteUrl: '//m.yohobuy.com',
29 assetUrl: '//127.0.0.1:5001', 29 assetUrl: '//127.0.0.1:5001',
@@ -96,6 +96,10 @@ function loginAuth(params, acc) { @@ -96,6 +96,10 @@ function loginAuth(params, acc) {
96 showErrTip('登录成功'); 96 showErrTip('登录成功');
97 location.href = res.href; 97 location.href = res.href;
98 $loginBtn.text('登录成功'); 98 $loginBtn.text('登录成功');
  99 + } else if (data.code === 4189) {
  100 + localStorage.loginJumpUrl = $('#account').val();
  101 + localStorage.loginJump = 'true';
  102 + location.href = data.url;
99 } else { 103 } else {
100 $captcha.data('userverify', data.captchaShow); 104 $captcha.data('userverify', data.captchaShow);
101 if (data.captchaShow) { 105 if (data.captchaShow) {
@@ -174,3 +174,10 @@ page = { @@ -174,3 +174,10 @@ page = {
174 $(function() { 174 $(function() {
175 page.init(); 175 page.init();
176 }); 176 });
  177 +
  178 +// 多次登录失败跳短信认证填充手机号
  179 +if (localStorage.loginJump) {
  180 + $('.sms-login .title').text('身份验证');
  181 + $('.sms-login-msg').before('<p class="sms-login-msg">您的账号存在安全隐患需要进行身份验证</p>');
  182 + localStorage.removeItem('loginJump');
  183 +}
@@ -147,3 +147,7 @@ page = { @@ -147,3 +147,7 @@ page = {
147 $(function() { 147 $(function() {
148 page.init(); 148 page.init();
149 }); 149 });
  150 +
  151 +// 多次登录失败跳短信认证填充手机号
  152 +$('#phone-num').val(localStorage.loginJumpUrl);
  153 +localStorage.removeItem('loginJumpUrl');
@@ -594,9 +594,13 @@ @@ -594,9 +594,13 @@
594 594
595 h6 { 595 h6 {
596 font-size: 34px; 596 font-size: 34px;
597 - margin-top: 60px; 597 + margin-top: 40px;
598 margin-bottom: 30px; 598 margin-bottom: 30px;
599 } 599 }
  600 +
  601 + b {
  602 + font-weight: 700;
  603 + }
600 } 604 }
601 } 605 }
602 606
@@ -622,7 +626,7 @@ @@ -622,7 +626,7 @@
622 .s-dialog-content { 626 .s-dialog-content {
623 max-height: 460px; 627 max-height: 460px;
624 max-width: 540px; 628 max-width: 540px;
625 - overflow-y: scroll; 629 + overflow-y: scroll;
626 text-align: left; 630 text-align: left;
627 color: #444; 631 color: #444;
628 font-family: 'PingFangSC-Regular', 'helvetica', 'Arial', '黑体'; 632 font-family: 'PingFangSC-Regular', 'helvetica', 'Arial', '黑体';