@@ -389,6 +389,23 @@ manual_first=Please slide to finish the jigsaw first. | |||||
verify_code_fail=Please input right verify code. | verify_code_fail=Please input right verify code. | ||||
bind_phone=Please Bind Your Phone. | bind_phone=Please Bind Your Phone. | ||||
bind_phone_fail=Fail to bind phone number, please try again later. | bind_phone_fail=Fail to bind phone number, please try again later. | ||||
phone_number=Phone number | |||||
drag_the_slider_to_fill_the_puzzle=Drag the slider to the right to fill the puzzle | |||||
mobile_phone_verification_code=Phone verification code | |||||
please_enter_SMS_verification_code=Please enter SMS verification code | |||||
get_verification_code=Get verification code | |||||
new_login_password=New login password | |||||
please_enter_new_password=Please enter new password | |||||
second_resend=S resend | |||||
please_bind_your_mobile_number=Please Bind Your Phone Number | |||||
submit=Submit | |||||
please_enter_the_correct_mobile_number=Please enter the correct phone number | |||||
please_enter_the_correct_mobile_phone_verification_code=Please enter the correct phone verification code | |||||
email_retrieve_password=Email retrieve password | |||||
mobile_number_retrieve_password=Phone number retrieve password | |||||
mobile_login=Mobile login | |||||
account_password_login=Account password login | |||||
cloud_brain_user_login=Cloud brain user login | |||||
[mail] | [mail] | ||||
@@ -393,9 +393,23 @@ manual_first=请先拖动滑块填充拼图。 | |||||
verify_code_fail=请输入正确的短信验证码。 | verify_code_fail=请输入正确的短信验证码。 | ||||
bind_phone=请绑定手机号。 | bind_phone=请绑定手机号。 | ||||
bind_phone_fail=绑定手机号失败,请稍后再试。 | bind_phone_fail=绑定手机号失败,请稍后再试。 | ||||
phone_number=手机号码 | |||||
drag_the_slider_to_fill_the_puzzle=向右拖动滑块填充拼图 | |||||
mobile_phone_verification_code=手机验证码 | |||||
please_enter_SMS_verification_code=请输入短信验证码 | |||||
get_verification_code=获取验证码 | |||||
new_login_password=新的登录密码 | |||||
please_enter_new_password=请输入新的密码 | |||||
second_resend=S后重发 | |||||
please_bind_your_mobile_number=请绑定手机号 | |||||
submit=提交 | |||||
please_enter_the_correct_mobile_number=请输入正确的手机号 | |||||
please_enter_the_correct_mobile_phone_verification_code=请输入正确格式的手机验证码 | |||||
email_retrieve_password=邮箱找回密码 | |||||
mobile_number_retrieve_password=手机号找回密码 | |||||
mobile_login=手机登录 | |||||
account_password_login=账号密码登录 | |||||
cloud_brain_user_login=云脑1用户登录 | |||||
[mail] | [mail] | ||||
@@ -5,8 +5,7 @@ | |||||
<form class="ui form ignore-dirty" action="" method=""> | <form class="ui form ignore-dirty" action="" method=""> | ||||
{{.CsrfTokenHtml}} | {{.CsrfTokenHtml}} | ||||
<h2 class="ui top attached header"> | <h2 class="ui top attached header"> | ||||
{{/*.i18n.Tr "auth.forgot_password_title"*/}} | |||||
请绑定手机号 | |||||
{{.i18n.Tr "phone.please_bind_your_mobile_number"}} | |||||
</h2> | </h2> | ||||
<div class="ui attached segment"> | <div class="ui attached segment"> | ||||
{{template "base/alert" .}} | {{template "base/alert" .}} | ||||
@@ -42,11 +41,11 @@ | |||||
if (phoneNumber && verifyCode) { | if (phoneNumber && verifyCode) { | ||||
e.preventDefault(); | e.preventDefault(); | ||||
if (!/^1[3578]\d{9}$/.test(phoneNumber)) { | if (!/^1[3578]\d{9}$/.test(phoneNumber)) { | ||||
bindPhoneEl.find('.ui.negative.message').show().find('p').text('请输入正确的手机号'); | |||||
bindPhoneEl.find('.ui.negative.message').show().find('p').text({{.i18n.Tr "phone.please_enter_the_correct_mobile_number"}}); | |||||
return; | return; | ||||
} | } | ||||
if (!/^\d{6}$/.test(verifyCode)) { | if (!/^\d{6}$/.test(verifyCode)) { | ||||
bindPhoneEl.find('.ui.negative.message').show().find('p').text('请输入正确格式的手机验证码'); | |||||
bindPhoneEl.find('.ui.negative.message').show().find('p').text({{.i18n.Tr "phone.please_enter_the_correct_mobile_phone_verification_code"}}); | |||||
return; | return; | ||||
} | } | ||||
$.ajax({ | $.ajax({ | ||||
@@ -54,8 +53,9 @@ | |||||
type: 'post', | type: 'post', | ||||
dataType: 'json', | dataType: 'json', | ||||
data: { | data: { | ||||
_csrf: bindPhoneEl.find('input[name="_csrf"]').val(), | |||||
phone_number: phoneNumber, | phone_number: phoneNumber, | ||||
verify_code: phoneNumber | |||||
verify_code: verifyCode | |||||
}, | }, | ||||
success: function(res) { | success: function(res) { | ||||
if (res && res.Code === 0) { | if (res && res.Code === 0) { | ||||
@@ -1,12 +1,10 @@ | |||||
{{template "base/head" .}} | {{template "base/head" .}} | ||||
<div class="ui secondary pointing tabular top attached borderless menu new-menu navbar"> | <div class="ui secondary pointing tabular top attached borderless menu new-menu navbar"> | ||||
<a class="item" rel="nofollow" href="{{AppSubUrl}}/user/forgot_password"> | <a class="item" rel="nofollow" href="{{AppSubUrl}}/user/forgot_password"> | ||||
{{/* 手机验证码登陆 .i18n.Tr "auth.login_userpass" */}} | |||||
邮箱找回密码 | |||||
{{.i18n.Tr "phone.email_retrieve_password"}} | |||||
</a> | </a> | ||||
<a class="active item" rel="nofollow" href="{{AppSubUrl}}/user/forgot_password?type=phone"> | <a class="active item" rel="nofollow" href="{{AppSubUrl}}/user/forgot_password?type=phone"> | ||||
{{/* .i18n.Tr "auth.login_userpass" */}} | |||||
手机号找回密码 | |||||
{{.i18n.Tr "phone.mobile_number_retrieve_password"}} | |||||
</a> | </a> | ||||
</div> | </div> | ||||
<div class="user forgot password"> | <div class="user forgot password"> | ||||
@@ -19,13 +17,12 @@ | |||||
</h2> | </h2> | ||||
<div class="ui attached segment"> | <div class="ui attached segment"> | ||||
{{template "base/alert" .}} | {{template "base/alert" .}} | ||||
{{if .EnablePhone }} | {{if .EnablePhone }} | ||||
<div style="display:flex;justify-content:center;"> | <div style="display:flex;justify-content:center;"> | ||||
<div class="use-type" usetype="3" style="width:491px;" showlabel="true" shownewpwd="true" autofocus="true"> | <div class="use-type" usetype="3" style="width:491px;" showlabel="true" shownewpwd="true" autofocus="true"> | ||||
{{template "user/auth/phone_verify" .}} | {{template "user/auth/phone_verify" .}} | ||||
</div> | </div> | ||||
</div> | |||||
</div> | |||||
<style> | <style> | ||||
.use-type ._label-c, .use-type .new-pass-word-wrap { | .use-type ._label-c, .use-type .new-pass-word-wrap { | ||||
display: flex; | display: flex; | ||||
@@ -36,9 +33,8 @@ | |||||
<div class="ui divider"></div> | <div class="ui divider"></div> | ||||
<div class="inline field"> | <div class="inline field"> | ||||
<label></label> | <label></label> | ||||
<button class="ui blue button">{{/*.i18n.Tr "auth.send_reset_mail"*/}}提交</button> | |||||
<button class="ui blue button">{{.i18n.Tr "phone.submit"}}</button> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</form> | </form> | ||||
</div> | </div> | ||||
@@ -157,7 +157,7 @@ | |||||
left: 0; | left: 0; | ||||
width: 51px; | width: 51px; | ||||
height: 51px; | height: 51px; | ||||
background-color: blue; | |||||
box-shadow: 0 0 4px rgb(35 173 255); | |||||
} | } | ||||
.slide-bar-c .verify-code-c { | .slide-bar-c .verify-code-c { | ||||
@@ -247,10 +247,11 @@ | |||||
outline: none; | outline: none; | ||||
} | } | ||||
</style> | </style> | ||||
<div class="phone-verify-code"> | <div class="phone-verify-code"> | ||||
<div class="phone-c"> | <div class="phone-c"> | ||||
<div class="phone-label _label-c required"> | <div class="phone-label _label-c required"> | ||||
<span class="_label">手机号码</span> | |||||
<span class="_label">{{.i18n.Tr "phone.phone_number"}}</span> | |||||
</div> | </div> | ||||
<div class="phone-area-c"> | <div class="phone-area-c"> | ||||
<select value="+86"> | <select value="+86"> | ||||
@@ -258,14 +259,14 @@ | |||||
</select> | </select> | ||||
</div> | </div> | ||||
<div class="field phone-num-c"> | <div class="field phone-num-c"> | ||||
<input class="phoneNumber" style="width:100% !important" name="phone_number" value="{{.phone_number}}" placeholder="手机号码" required autocomplete="off" /> | |||||
<input class="phoneNumber" style="width:100% !important" name="phone_number" value="{{.phone_number}}" placeholder="{{.i18n.Tr "phone.phone_number"}}" required autocomplete="off" /> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="slide-bar-wrap" style="display:flex;"> | <div class="slide-bar-wrap" style="display:flex;"> | ||||
<div class="slide-bar-label _label-c required" style=""></div> | <div class="slide-bar-label _label-c required" style=""></div> | ||||
<div class="slide-bar-c" style="flex:1;"> | <div class="slide-bar-c" style="flex:1;"> | ||||
<div class="slide-bar-bg"> | <div class="slide-bar-bg"> | ||||
<div class="slide-txt">向右拖动滑块填充拼图</div> | |||||
<div class="slide-txt">{{.i18n.Tr "phone.drag_the_slider_to_fill_the_puzzle"}}</div> | |||||
<div class="slide-bar"></div> | <div class="slide-bar"></div> | ||||
<div class="slide-trigger"></div> | <div class="slide-trigger"></div> | ||||
</div> | </div> | ||||
@@ -274,24 +275,23 @@ | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="verify-code-c"> | <div class="verify-code-c"> | ||||
<div class="verify-code-label _label-c required"> | <div class="verify-code-label _label-c required"> | ||||
<span class="_label">手机验证码</span> | |||||
<span class="_label">{{.i18n.Tr "phone.mobile_phone_verification_code"}}</span> | |||||
</div> | </div> | ||||
<div class="verify-code-num-c"> | <div class="verify-code-num-c"> | ||||
<input class="verifyCode" style="width:100% !important" name="verify_code" value="{{.verify_code}}" placeholder="请输入短信验证码" required autocomplete="off" /> | |||||
<input class="verifyCode" style="width:100% !important" name="verify_code" value="{{.verify_code}}" placeholder="{{.i18n.Tr "phone.please_enter_SMS_verification_code"}}" required autocomplete="off" /> | |||||
</div> | </div> | ||||
<div class="verify-code-send"> | <div class="verify-code-send"> | ||||
<div class="verify-code-send-btn __disabled">获取验证码</div> | |||||
<div class="verify-code-send-btn __disabled">{{.i18n.Tr "phone.get_verification_code"}}</div> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="new-pass-word-wrap"> | <div class="new-pass-word-wrap"> | ||||
<div class="new-pass-word-label _label-c required"> | <div class="new-pass-word-label _label-c required"> | ||||
<span class="_label">新的登录密码</span> | |||||
<span class="_label">{{.i18n.Tr "phone.new_login_password"}}</span> | |||||
</div> | </div> | ||||
<div class="new-pass-word-c"> | <div class="new-pass-word-c"> | ||||
<input class="newPassword" style="width:100% !important" name="password" type="password" placeholder="请输入新的密码" required autocomplete="off" /> | |||||
<input class="newPassword" style="width:100% !important" name="password" type="password" placeholder="{{.i18n.Tr "phone.please_enter_new_password"}}" required autocomplete="off" /> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<div class="new-pass-word-wrap"> | <div class="new-pass-word-wrap"> | ||||
@@ -310,7 +310,7 @@ | |||||
window.addEventListener('load', function () { | window.addEventListener('load', function () { | ||||
function PhoneVerifyCode(dom) { | function PhoneVerifyCode(dom) { | ||||
if (!dom) return; | if (!dom) return; | ||||
this.countDownNumber = 20; | |||||
this.countDownNumber = 120; | |||||
this.init(dom); | this.init(dom); | ||||
} | } | ||||
@@ -345,6 +345,10 @@ | |||||
if (autofocus) { | if (autofocus) { | ||||
this.dom.find('input.phoneNumber').focus(); | this.dom.find('input.phoneNumber').focus(); | ||||
} | } | ||||
var verifyCodeNoRequired = wrap.attr('verifycodenorequired'); | |||||
if (verifyCodeNoRequired) { | |||||
this.dom.find('input.verifyCode').removeAttr('required'); | |||||
} | |||||
}; | }; | ||||
PhoneVerifyCode.prototype.eventInit = function () { | PhoneVerifyCode.prototype.eventInit = function () { | ||||
@@ -452,7 +456,6 @@ | |||||
} else { | } else { | ||||
self.dom.find('.phone-num-c').removeClass('error'); | self.dom.find('.phone-num-c').removeClass('error'); | ||||
var useType = self.dom.closest('div.use-type').attr('usetype') || 0; | var useType = self.dom.closest('div.use-type').attr('usetype') || 0; | ||||
self.countDown(); | |||||
$.ajax({ | $.ajax({ | ||||
url: '/sendVerifyCode', | url: '/sendVerifyCode', | ||||
type: 'post', | type: 'post', | ||||
@@ -463,8 +466,17 @@ | |||||
slide_id: self.imgID, | slide_id: self.imgID, | ||||
}, | }, | ||||
success: function(res) { | success: function(res) { | ||||
if (res && res.code === 0) { | |||||
console.log(res); | |||||
if (res && res.Code === 0) { | |||||
self.countDown(); | |||||
} else { | |||||
$('body').toast({ | |||||
message: res.Message, | |||||
showProgress: 'bottom', | |||||
showIcon:'warning circle', | |||||
class: 'warning', | |||||
position: 'top right', | |||||
}); | |||||
self.refreshImages(); | |||||
} | } | ||||
}, | }, | ||||
error: function(err) { | error: function(err) { | ||||
@@ -507,14 +519,14 @@ | |||||
var self = this; | var self = this; | ||||
var sendBtnEl = this.dom.find('.verify-code-send-btn'); | var sendBtnEl = this.dom.find('.verify-code-send-btn'); | ||||
var count = this.countDownNumber; | var count = this.countDownNumber; | ||||
sendBtnEl.addClass('__disabled').text(`${count}S后重发`); | |||||
sendBtnEl.addClass('__disabled').text(`${count}{{.i18n.Tr "phone.second_resend"}}`); | |||||
this.canSendCode = false; | this.canSendCode = false; | ||||
this.countDownEnd = false; | this.countDownEnd = false; | ||||
var timer = setInterval(function () { | var timer = setInterval(function () { | ||||
count--; | count--; | ||||
sendBtnEl.addClass('__disabled').text(`${count}S后重发`); | |||||
sendBtnEl.addClass('__disabled').text(`${count}{{.i18n.Tr "phone.second_resend"}}`); | |||||
if (count <= 0) { | if (count <= 0) { | ||||
sendBtnEl.removeClass('__disabled').text(`获取验证码`); | |||||
sendBtnEl.removeClass('__disabled').text({{.i18n.Tr "phone.get_verification_code"}}); | |||||
clearInterval(timer); | clearInterval(timer); | ||||
self.canSendCode = true; | self.canSendCode = true; | ||||
self.countDownEnd = true; | self.countDownEnd = true; | ||||
@@ -1,16 +1,13 @@ | |||||
{{if or .EnableOpenIDSignIn .EnableSSPI .EnableCloudBrain}} | {{if or .EnableOpenIDSignIn .EnableSSPI .EnableCloudBrain}} | ||||
<div class="ui secondary pointing tabular top attached borderless menu new-menu navbar"> | <div class="ui secondary pointing tabular top attached borderless menu new-menu navbar"> | ||||
<a class="{{if .PageIsPhoneLogin}}active{{end}} item" rel="nofollow" href="{{AppSubUrl}}/user/login/phone"> | <a class="{{if .PageIsPhoneLogin}}active{{end}} item" rel="nofollow" href="{{AppSubUrl}}/user/login/phone"> | ||||
{{/* 手机验证码登陆 .i18n.Tr "auth.login_userpass" */}} | |||||
手机登录 | |||||
{{.i18n.Tr "phone.mobile_login"}} | |||||
</a> | </a> | ||||
<a class="{{if .PageIsLogin}}active{{end}} item" rel="nofollow" href="{{AppSubUrl}}/user/login"> | <a class="{{if .PageIsLogin}}active{{end}} item" rel="nofollow" href="{{AppSubUrl}}/user/login"> | ||||
{{/* .i18n.Tr "auth.login_userpass" */}} | |||||
账号密码登录 | |||||
{{.i18n.Tr "phone.account_password_login"}} | |||||
</a> | </a> | ||||
<a class="{{if .PageIsCloudBrainLogin}}active{{end}} item" rel="nofollow" href="{{AppSubUrl}}/user/login/cloud_brain"> | <a class="{{if .PageIsCloudBrainLogin}}active{{end}} item" rel="nofollow" href="{{AppSubUrl}}/user/login/cloud_brain"> | ||||
{{/* .i18n.Tr "auth.login_cloudbrain" */}} | |||||
云脑1用户登录 | |||||
{{.i18n.Tr "phone.cloud_brain_user_login"}} | |||||
</a> | </a> | ||||
{{if .EnableOpenIDSignIn}} | {{if .EnableOpenIDSignIn}} | ||||
<a class="{{if .PageIsLoginOpenID}}active{{end}} item" rel="nofollow" href="{{AppSubUrl}}/user/login/openid"> | <a class="{{if .PageIsLoginOpenID}}active{{end}} item" rel="nofollow" href="{{AppSubUrl}}/user/login/openid"> | ||||
@@ -35,8 +35,8 @@ | |||||
</div> | </div> | ||||
{{if .EnablePhone }} | {{if .EnablePhone }} | ||||
<div class="field required" style="width:391px;"> | <div class="field required" style="width:391px;"> | ||||
<label for="phone">{{/* .i18n.Tr "phone" */}} 手机号码</label> | |||||
<div class="use-type" usetype="2" ophonenumber="{{.SignedUser.PhoneNumber}}"> | |||||
<label for="phone">{{.i18n.Tr "phone.phone_number"}}</label> | |||||
<div class="use-type" usetype="2" ophonenumber="{{.SignedUser.PhoneNumber}}" verifycodenorequired="true"> | |||||
{{template "user/auth/phone_verify" .}} | {{template "user/auth/phone_verify" .}} | ||||
</div> | </div> | ||||
</div> | </div> | ||||