@@ -1,278 +1,4 @@ | |||
<style> | |||
.__phone-verify-code { | |||
max-width: 519px; | |||
} | |||
.__phone-verify-code ._label-c { | |||
display: flex; | |||
justify-content: fixed-start; | |||
align-items: center; | |||
width: 100px; | |||
display: none; | |||
} | |||
.__phone-verify-code ._label-c ._label { | |||
font-size: 13px; | |||
font-weight: 700; | |||
color: rgba(0,0,0,.87); | |||
} | |||
.__phone-verify-code ._label-c.required ._label:after { | |||
margin: -0.2em 0 0 0.2em; | |||
content: '*'; | |||
color: #db2828; | |||
display: inline-block; | |||
vertical-align: top; | |||
} | |||
.__phone-verify-code .phone-c { | |||
display: flex; | |||
margin: 0 0 1em; | |||
} | |||
.__phone-verify-code .phone-c .phone-area-c { | |||
height: 38px; | |||
width: 80px; | |||
margin-right: 10px; | |||
border-radius: 2px; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
box-sizing: border-box; | |||
} | |||
.__phone-verify-code .phone-c .phone-area-c select { | |||
outline: none; | |||
} | |||
.__phone-verify-code .phone-c .phone-num-c { | |||
height: 38px; | |||
flex: 1; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
box-sizing: border-box; | |||
position: relative; | |||
} | |||
.__phone-verify-code .phone-c .phone-num-c input { | |||
height: 100%; | |||
width: 100% !important; | |||
padding: 9.5px 14px; | |||
box-sizing: border-box; | |||
outline: none; | |||
} | |||
.__phone-verify-code .phone-c .modify-phone-number { | |||
position: absolute; | |||
left: 100%; | |||
width: 200px; | |||
height: 100%; | |||
margin-left: 10px; | |||
display: none; | |||
} | |||
.__phone-verify-code .phone-c .modify-phone-number a { | |||
font-weight: 400; | |||
font-size: 14px; | |||
color: rgba(0, 102, 255, 1); | |||
} | |||
.__phone-verify-code .slide-bar-wrap { | |||
display: flex; | |||
height: 38px; | |||
margin: 0 0 1em; | |||
justify-content: center; | |||
align-items: center; | |||
position: relative; | |||
} | |||
.__phone-verify-code .slide-bar-c { | |||
flex: 1; | |||
display: flex; | |||
height: 38px; | |||
justify-content: center; | |||
align-items: center; | |||
position: relative; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg { | |||
height: 34px; | |||
flex: 1; | |||
background-color: rgb(245, 245, 246); | |||
border: 1px solid rgb(225, 227, 230); | |||
border-radius: 2px; | |||
position: relative; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-txt { | |||
position: absolute; | |||
width: 100%; | |||
height: 100%; | |||
display: flex; | |||
user-select: none; | |||
justify-content: center; | |||
align-items: center; | |||
color: #cdcacb; | |||
font-size: 14px; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-bar { | |||
position: absolute; | |||
width: 38px; | |||
height: 34px; | |||
background-color: #d1e9fe; | |||
border: 1px solid #1991fa; | |||
border-radius: 2px; | |||
box-sizing: border-box; | |||
top: -1px; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-bar.sucess { | |||
background-color: #d2f4ef; | |||
border: 1px solid #52ccba; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-bar.error { | |||
border-color: #f57a7a; | |||
background-color: #fce1e1; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-trigger { | |||
position: absolute; | |||
width: 38px; | |||
height: 34px; | |||
background-color: #1991fa; | |||
border-radius: 2px; | |||
cursor: pointer; | |||
top: -1px; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-trigger .icon { | |||
font-size: 16px; | |||
color: white; | |||
margin: 0; | |||
height: 16px; | |||
width: 16px; | |||
margin-top: -5px; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-trigger.sucess { | |||
background-color: #52ccba; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-trigger.error { | |||
background-color: #f57a7a; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-image-big { | |||
position: absolute; | |||
width: 391px; | |||
height: 196px; | |||
top: 36px; | |||
left: 0; | |||
border-radius: 2px; | |||
z-index: 100; | |||
display: none; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-image-small { | |||
position: absolute; | |||
left: 0; | |||
width: 51px; | |||
height: 51px; | |||
box-shadow: 0 0 4px rgb(35 173 255); | |||
} | |||
.__phone-verify-code .slide-bar-c .verify-code-c { | |||
display: flex; | |||
height: 38px; | |||
} | |||
.__phone-verify-code .verify-code-c { | |||
display: flex; | |||
height: 38px; | |||
margin: 0 0 1em; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
.__phone-verify-code .verify-code-c .verify-code-num-c { | |||
flex: 1; | |||
height: 38px; | |||
box-sizing: border-box; | |||
justify-content: center; | |||
align-items: center; | |||
display: flex; | |||
} | |||
.__phone-verify-code .verify-code-c .verify-code-num-c input { | |||
height: 100%; | |||
width: 100% !important; | |||
padding: 9.5px 14px; | |||
box-sizing: border-box; | |||
outline: none; | |||
} | |||
.__phone-verify-code .verify-code-c .verify-code-send { | |||
display: flex; | |||
width: 120px; | |||
height: 38px; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
.__phone-verify-code .verify-code-c .verify-code-send .verify-code-send-btn { | |||
height: 100%; | |||
width: 100%; | |||
margin-left: 10px; | |||
border: 1px solid #398dee; | |||
background-color: #398dee; | |||
color: white; | |||
border-radius: 2px; | |||
box-sizing: border-box; | |||
cursor: pointer; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
.__phone-verify-code .verify-code-c .verify-code-send .verify-code-send-btn.__disabled { | |||
border: 1px solid #ddd; | |||
background-color: #ddd; | |||
cursor: not-allowed; | |||
} | |||
.__phone-verify-code .new-pass-word-wrap { | |||
display: flex; | |||
height: 38px; | |||
margin: 0 0 1em; | |||
justify-content: center; | |||
align-items: center; | |||
display: none; | |||
} | |||
.__phone-verify-code .new-pass-word-wrap .new-pass-word-c { | |||
flex: 1; | |||
height: 38px; | |||
box-sizing: border-box; | |||
justify-content: center; | |||
align-items: center; | |||
display: flex; | |||
} | |||
.__phone-verify-code .new-pass-word-wrap .new-pass-word-c input { | |||
height: 100%; | |||
width: 100% !important; | |||
padding: 9.5px 14px; | |||
box-sizing: border-box; | |||
outline: none; | |||
} | |||
</style> | |||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/_phoneverify.css?v={{MD5 AppVer}}" /> | |||
<div class="__phone-verify-code"> | |||
<div class="phone-c"> | |||
<div class="phone-label _label-c required"> | |||
@@ -334,264 +60,16 @@ | |||
</div> | |||
</div> | |||
</div> | |||
<script src="{{StaticUrlPrefix}}/js/phoneverify.js?v={{MD5 AppVer}}" type="text/javascript"></script> | |||
<script> | |||
(function() { | |||
window.addEventListener('load', function () { | |||
function PhoneVerifyCode(dom) { | |||
if (!dom) return; | |||
this.countDownNumber = 120; | |||
this.init(dom); | |||
} | |||
PhoneVerifyCode.prototype.init = function (dom) { | |||
if (!dom) return; | |||
this.dom = $(dom); | |||
this.isMoving = false; | |||
this.verifySucess = false; | |||
this.canSendCode = false; | |||
this.countDownEnd = false; | |||
this.imgID = ''; | |||
this.eventInit(); | |||
this.refreshImages(); | |||
var wrap = this.dom.closest('div.use-type'); | |||
var readonly = wrap.attr('readonly'); | |||
if (readonly) { | |||
this.dom.find('.phone-area-c select').attr('disabled', true); | |||
this.dom.find('.phone-num-c input').attr('disabled', true); | |||
this.dom.find('.slide-bar-wrap').hide(); | |||
this.dom.find('.verify-code-c').hide(); | |||
this.dom.find('.modify-phone-number').show(); | |||
} | |||
var oldPhoneNum = wrap.attr('ophonenumber'); | |||
if (oldPhoneNum) { | |||
this.dom.find('input.phoneNumber').val(oldPhoneNum); | |||
} | |||
var showlabel = wrap.attr('showlabel'); | |||
if (showlabel) { | |||
this.dom.find('._label-c ').show(); | |||
} else { | |||
this.dom.find('._label-c ').hide(); | |||
} | |||
var showNewpwd = wrap.attr('shownewpwd'); | |||
if (showNewpwd) { | |||
this.dom.find('.new-pass-word-wrap').show(); | |||
} else { | |||
this.dom.find('.new-pass-word-wrap').remove(); | |||
} | |||
var autofocus = wrap.attr('autofocus'); | |||
if (autofocus) { | |||
this.dom.find('input.phoneNumber').focus(); | |||
} | |||
var verifyCodeNoRequired = wrap.attr('verifycodenorequired'); | |||
if (verifyCodeNoRequired) { | |||
this.dom.find('input.verifyCode').removeAttr('required'); | |||
} | |||
}; | |||
PhoneVerifyCode.prototype.eventInit = function () { | |||
if (!this.dom) return; | |||
var self = this; | |||
var clientX = 0, oLeft = 0, imgHideTimer = null; | |||
this.dom.find('.slide-bar-bg').on('mouseenter', function (e) { | |||
if (self.verifySucess) return; | |||
imgHideTimer && clearTimeout(imgHideTimer); | |||
self.dom.find('.slide-image-big').slideDown(); | |||
}); | |||
this.dom.find('.slide-bar-bg').on('mouseleave', function (e) { | |||
imgHideTimer && clearTimeout(imgHideTimer); | |||
imgHideTimer = setTimeout(function () { | |||
self.dom.find('.slide-image-big').slideUp(); | |||
}, 200); | |||
}); | |||
this.dom.find('.slide-image-big').on('mouseenter', function (e) { | |||
imgHideTimer && clearTimeout(imgHideTimer); | |||
}); | |||
this.dom.find('.slide-image-big').on('mouseleave', function (e) { | |||
imgHideTimer && clearTimeout(imgHideTimer); | |||
imgHideTimer = setTimeout(function () { | |||
self.dom.find('.slide-image-big').slideUp(); | |||
}, 200); | |||
}); | |||
function mouseMove(e) { | |||
var _clientX = e.clientX; | |||
var offset = _clientX - clientX; | |||
var triggerEl = self.dom.find('.slide-trigger'); | |||
var triggerWidth = triggerEl.width(); | |||
var parentWidth = triggerEl.parent().width(); | |||
var maxLeft = parentWidth - triggerWidth; | |||
var left = oLeft + offset; | |||
if (oLeft + offset < 0) left = 0; | |||
if (oLeft + offset > maxLeft) left = maxLeft; | |||
triggerEl.css('left', left + 'px'); | |||
self.dom.find('.slide-bar').css('width', left + triggerWidth); | |||
var imageBigWidth = self.dom.find('.slide-image-big').width(); | |||
var imageSmallWidth = self.dom.find('.slide-image-small').width(); | |||
self.dom.find('.slide-image-small').css('left', left / maxLeft * (imageBigWidth - imageSmallWidth) + 'px'); | |||
self.isMoving = true; | |||
self.dom.find('.slide-txt').hide(); | |||
imgHideTimer && clearTimeout(imgHideTimer); | |||
} | |||
function mouseUp(e) { | |||
$(document).off('mousemove', mouseMove); | |||
$(document).off('mouseup', mouseUp); | |||
self.isMoving = false; | |||
$.ajax({ | |||
url: '/verifySlideImage', | |||
type: 'post', | |||
dataType: 'json', | |||
data: { | |||
slide_id: self.imgID, | |||
x: parseInt(self.dom.find('.slide-image-small').position().left) | |||
}, | |||
success: function(res) { | |||
if (res && res.Code === 0) { | |||
self.verifySucess = true; | |||
self.canSendCode = true; | |||
self.dom.find('.slide-bar').addClass('sucess'); | |||
self.dom.find('.slide-trigger').addClass('sucess'); | |||
self.dom.find('.slide-trigger .icon').hide(); | |||
self.dom.find('.slide-trigger .icon.check').show(); | |||
self.dom.find('.slide-image-big').slideUp(); | |||
self.dom.find('.verify-code-send-btn').removeClass('__disabled'); | |||
} else { | |||
self.dom.find('.slide-bar').addClass('error'); | |||
self.dom.find('.slide-trigger').addClass('error'); | |||
self.dom.find('.slide-trigger .icon').hide(); | |||
self.dom.find('.slide-trigger .icon.close').show(); | |||
setTimeout(function () { | |||
self.refreshImages(); | |||
}, 300); | |||
} | |||
}, | |||
error: function(err) { | |||
self.dom.find('.slide-bar').addClass('error'); | |||
self.dom.find('.slide-trigger').addClass('error'); | |||
setTimeout(function () { | |||
self.refreshImages(); | |||
}, 300); | |||
} | |||
}); | |||
} | |||
this.dom.find('.slide-trigger').on('mousedown', function (e) { | |||
if (self.verifySucess) return; | |||
clientX = e.clientX; | |||
oLeft = $(this).position().left; | |||
$(document).on('mousemove', mouseMove); | |||
$(document).on('mouseup', mouseUp); | |||
}); | |||
this.dom.find('.verify-code-send-btn').on('click', function () { | |||
if (!self.canSendCode) return; | |||
if (self.countDownEnd) { | |||
self.refreshImages(); | |||
return; | |||
} | |||
var phoneArea = self.dom.find('.phone-area-c select').val(); | |||
var phoneNumber = self.dom.find('.phone-num-c input').val(); | |||
if (!/^1[3578]\d{9}$/.test(phoneNumber)) { | |||
self.dom.find('.phone-num-c').addClass('error'); | |||
return; | |||
} else { | |||
self.dom.find('.phone-num-c').removeClass('error'); | |||
var useType = self.dom.closest('div.use-type').attr('usetype') || 0; | |||
$.ajax({ | |||
url: '/sendVerifyCode', | |||
type: 'post', | |||
dataType: 'json', | |||
data: { | |||
phone_number: phoneNumber, | |||
mode: useType, // 0注册,1登录 ,2修改手机号,3找回密码 | |||
slide_id: self.imgID, | |||
}, | |||
success: function(res) { | |||
if (res && res.Code === 0) { | |||
self.countDown(); | |||
} else { | |||
if ($('.ui.negative.message').length) { | |||
$('.ui.negative.message').eq(0).show().find('p').text(res.Message); | |||
} else { | |||
$('body').toast({ | |||
message: res.Message, | |||
showProgress: 'bottom', | |||
showIcon:'warning circle', | |||
class: 'warning', | |||
position: 'top right', | |||
}); | |||
} | |||
self.refreshImages(); | |||
} | |||
}, | |||
error: function(err) { | |||
console.log(err); | |||
} | |||
}); | |||
} | |||
}); | |||
this.dom.find('.modify-phone-number a').on('click', function() { | |||
self.dom.find('.phone-area-c select').attr('disabled', false); | |||
self.dom.find('.phone-num-c input').attr('disabled', false); | |||
self.dom.find('.slide-bar-wrap').css('display', 'flex'); | |||
self.dom.find('.verify-code-c').css('display', 'flex'); | |||
self.dom.find('.modify-phone-number').hide(); | |||
}); | |||
}; | |||
PhoneVerifyCode.prototype.refreshImages = function () { | |||
this.isMoving = false; | |||
this.verifySucess = false; | |||
this.canSendCode = false; | |||
this.countDownEnd = false; | |||
this.imgID = ''; | |||
this.dom.find('.slide-bar').removeClass('sucess error').css('width', '30px'); | |||
this.dom.find('.slide-trigger').removeClass('sucess error').css('left', '0px'); | |||
this.dom.find('.slide-trigger .icon').hide(); | |||
this.dom.find('.slide-trigger .icon.arrow').show(); | |||
this.dom.find('.slide-txt').show(); | |||
this.dom.find('.slide-image-small').css('left', '0'); | |||
this.dom.find('.verify-code-send-btn').addClass('__disabled'); | |||
var self = this; | |||
$.ajax({ | |||
url: '/slideImage', | |||
type: 'get', | |||
success: function(res) { | |||
if (res && res.Code === 0) { | |||
self.imgID = res.Message; | |||
self.dom.find('.slide-image-big').css('background', `url("/slideimage/${res.Message}.png")`); | |||
self.dom.find('.slide-image-small').css('background', `url("/slideimage/${res.Message}screenshot.png")`); | |||
} | |||
}, | |||
error: function(err) { | |||
console.log(err); | |||
} | |||
}); | |||
}; | |||
PhoneVerifyCode.prototype.countDown = function () { | |||
var self = this; | |||
var sendBtnEl = this.dom.find('.verify-code-send-btn'); | |||
var count = this.countDownNumber; | |||
sendBtnEl.addClass('__disabled').text(count + {{.i18n.Tr "phone.second_resend"}}); | |||
this.canSendCode = false; | |||
this.countDownEnd = false; | |||
var timer = setInterval(function () { | |||
count--; | |||
sendBtnEl.addClass('__disabled').text(count + {{.i18n.Tr "phone.second_resend"}}); | |||
if (count <= 0) { | |||
sendBtnEl.removeClass('__disabled').text({{.i18n.Tr "phone.get_verification_code"}}); | |||
clearInterval(timer); | |||
self.canSendCode = true; | |||
self.countDownEnd = true; | |||
self.refreshImages(); | |||
} | |||
}, 1000); | |||
}; | |||
const phoneVerifyCode = new PhoneVerifyCode($('.__phone-verify-code')); | |||
(function(){ | |||
window.addEventListener('load', function () { | |||
var phoneVerifyCode = new PhoneVerifyCode($('.__phone-verify-code'), { | |||
Lang: { | |||
second_resend: {{.i18n.Tr "phone.second_resend"}}, | |||
get_verification_code: {{.i18n.Tr "phone.get_verification_code"}}, | |||
}, | |||
}); | |||
})(); | |||
}); | |||
})(); | |||
</script> |
@@ -0,0 +1,256 @@ | |||
; (function () { | |||
function PhoneVerifyCode(dom, options) { | |||
if (!dom) return; | |||
this.countDownNumber = 120; | |||
this.options = options; | |||
this.init(dom); | |||
} | |||
PhoneVerifyCode.prototype.init = function (dom) { | |||
if (!dom) return; | |||
this.dom = $(dom); | |||
this.isMoving = false; | |||
this.verifySucess = false; | |||
this.canSendCode = false; | |||
this.countDownEnd = false; | |||
this.imgID = ''; | |||
this.eventInit(); | |||
this.refreshImages(); | |||
var wrap = this.dom.closest('div.use-type'); | |||
var readonly = wrap.attr('readonly'); | |||
if (readonly) { | |||
this.dom.find('.phone-area-c select').attr('disabled', true); | |||
this.dom.find('.phone-num-c input').attr('disabled', true); | |||
this.dom.find('.slide-bar-wrap').hide(); | |||
this.dom.find('.verify-code-c').hide(); | |||
this.dom.find('.modify-phone-number').show(); | |||
} | |||
var oldPhoneNum = wrap.attr('ophonenumber'); | |||
if (oldPhoneNum) { | |||
this.dom.find('input.phoneNumber').val(oldPhoneNum); | |||
} | |||
var showlabel = wrap.attr('showlabel'); | |||
if (showlabel) { | |||
this.dom.find('._label-c ').show(); | |||
} else { | |||
this.dom.find('._label-c ').hide(); | |||
} | |||
var showNewpwd = wrap.attr('shownewpwd'); | |||
if (showNewpwd) { | |||
this.dom.find('.new-pass-word-wrap').show(); | |||
} else { | |||
this.dom.find('.new-pass-word-wrap').remove(); | |||
} | |||
var autofocus = wrap.attr('autofocus'); | |||
if (autofocus) { | |||
this.dom.find('input.phoneNumber').focus(); | |||
} | |||
var verifyCodeNoRequired = wrap.attr('verifycodenorequired'); | |||
if (verifyCodeNoRequired) { | |||
this.dom.find('input.verifyCode').removeAttr('required'); | |||
} | |||
}; | |||
PhoneVerifyCode.prototype.eventInit = function () { | |||
if (!this.dom) return; | |||
var self = this; | |||
var clientX = 0, oLeft = 0, imgHideTimer = null; | |||
this.dom.find('.slide-bar-bg').on('mouseenter', function (e) { | |||
if (self.verifySucess) return; | |||
imgHideTimer && clearTimeout(imgHideTimer); | |||
self.dom.find('.slide-image-big').slideDown(); | |||
}); | |||
this.dom.find('.slide-bar-bg').on('mouseleave', function (e) { | |||
imgHideTimer && clearTimeout(imgHideTimer); | |||
imgHideTimer = setTimeout(function () { | |||
self.dom.find('.slide-image-big').slideUp(); | |||
}, 200); | |||
}); | |||
this.dom.find('.slide-image-big').on('mouseenter', function (e) { | |||
imgHideTimer && clearTimeout(imgHideTimer); | |||
}); | |||
this.dom.find('.slide-image-big').on('mouseleave', function (e) { | |||
imgHideTimer && clearTimeout(imgHideTimer); | |||
imgHideTimer = setTimeout(function () { | |||
self.dom.find('.slide-image-big').slideUp(); | |||
}, 200); | |||
}); | |||
function mouseMove(e) { | |||
var _clientX = e.clientX; | |||
var offset = _clientX - clientX; | |||
var triggerEl = self.dom.find('.slide-trigger'); | |||
var triggerWidth = triggerEl.width(); | |||
var parentWidth = triggerEl.parent().width(); | |||
var maxLeft = parentWidth - triggerWidth; | |||
var left = oLeft + offset; | |||
if (oLeft + offset < 0) left = 0; | |||
if (oLeft + offset > maxLeft) left = maxLeft; | |||
triggerEl.css('left', left + 'px'); | |||
self.dom.find('.slide-bar').css('width', left + triggerWidth); | |||
var imageBigWidth = self.dom.find('.slide-image-big').width(); | |||
var imageSmallWidth = self.dom.find('.slide-image-small').width(); | |||
self.dom.find('.slide-image-small').css('left', left / maxLeft * (imageBigWidth - imageSmallWidth) + 'px'); | |||
self.isMoving = true; | |||
self.dom.find('.slide-txt').hide(); | |||
imgHideTimer && clearTimeout(imgHideTimer); | |||
} | |||
function mouseUp(e) { | |||
$(document).off('mousemove', mouseMove); | |||
$(document).off('mouseup', mouseUp); | |||
self.isMoving = false; | |||
$.ajax({ | |||
url: '/verifySlideImage', | |||
type: 'post', | |||
dataType: 'json', | |||
data: { | |||
slide_id: self.imgID, | |||
x: parseInt(self.dom.find('.slide-image-small').position().left) | |||
}, | |||
success: function (res) { | |||
if (res && res.Code === 0) { | |||
self.verifySucess = true; | |||
self.canSendCode = true; | |||
self.dom.find('.slide-bar').addClass('sucess'); | |||
self.dom.find('.slide-trigger').addClass('sucess'); | |||
self.dom.find('.slide-trigger .icon').hide(); | |||
self.dom.find('.slide-trigger .icon.check').show(); | |||
self.dom.find('.slide-image-big').slideUp(); | |||
self.dom.find('.verify-code-send-btn').removeClass('__disabled'); | |||
} else { | |||
self.dom.find('.slide-bar').addClass('error'); | |||
self.dom.find('.slide-trigger').addClass('error'); | |||
self.dom.find('.slide-trigger .icon').hide(); | |||
self.dom.find('.slide-trigger .icon.close').show(); | |||
setTimeout(function () { | |||
self.refreshImages(); | |||
}, 300); | |||
} | |||
}, | |||
error: function (err) { | |||
self.dom.find('.slide-bar').addClass('error'); | |||
self.dom.find('.slide-trigger').addClass('error'); | |||
setTimeout(function () { | |||
self.refreshImages(); | |||
}, 300); | |||
} | |||
}); | |||
} | |||
this.dom.find('.slide-trigger').on('mousedown', function (e) { | |||
if (self.verifySucess) return; | |||
clientX = e.clientX; | |||
oLeft = $(this).position().left; | |||
$(document).on('mousemove', mouseMove); | |||
$(document).on('mouseup', mouseUp); | |||
}); | |||
this.dom.find('.verify-code-send-btn').on('click', function () { | |||
if (!self.canSendCode) return; | |||
if (self.countDownEnd) { | |||
self.refreshImages(); | |||
return; | |||
} | |||
var phoneNumber = self.dom.find('.phone-num-c input').val(); | |||
if (!/^1[3578]\d{9}$/.test(phoneNumber)) { | |||
self.dom.find('.phone-num-c').addClass('error'); | |||
return; | |||
} else { | |||
self.dom.find('.phone-num-c').removeClass('error'); | |||
var useType = self.dom.closest('div.use-type').attr('usetype') || 0; | |||
$.ajax({ | |||
url: '/sendVerifyCode', | |||
type: 'post', | |||
dataType: 'json', | |||
data: { | |||
phone_number: phoneNumber, | |||
mode: useType, // 0注册,1登录 ,2修改手机号,3找回密码 | |||
slide_id: self.imgID, | |||
}, | |||
success: function (res) { | |||
if (res && res.Code === 0) { | |||
self.countDown(); | |||
} else { | |||
if ($('.ui.negative.message').length) { | |||
$('.ui.negative.message').eq(0).show().find('p').text(res.Message); | |||
} else { | |||
$('body').toast({ | |||
message: res.Message, | |||
showProgress: 'bottom', | |||
showIcon: 'warning circle', | |||
class: 'warning', | |||
position: 'top right', | |||
}); | |||
} | |||
self.refreshImages(); | |||
} | |||
}, | |||
error: function (err) { | |||
console.log(err); | |||
} | |||
}); | |||
} | |||
}); | |||
this.dom.find('.modify-phone-number a').on('click', function () { | |||
self.dom.find('.phone-area-c select').attr('disabled', false); | |||
self.dom.find('.phone-num-c input').attr('disabled', false); | |||
self.dom.find('.slide-bar-wrap').css('display', 'flex'); | |||
self.dom.find('.verify-code-c').css('display', 'flex'); | |||
self.dom.find('.modify-phone-number').hide(); | |||
}); | |||
}; | |||
PhoneVerifyCode.prototype.refreshImages = function () { | |||
this.isMoving = false; | |||
this.verifySucess = false; | |||
this.canSendCode = false; | |||
this.countDownEnd = false; | |||
this.imgID = ''; | |||
this.dom.find('.slide-bar').removeClass('sucess error').css('width', '30px'); | |||
this.dom.find('.slide-trigger').removeClass('sucess error').css('left', '0px'); | |||
this.dom.find('.slide-trigger .icon').hide(); | |||
this.dom.find('.slide-trigger .icon.arrow').show(); | |||
this.dom.find('.slide-txt').show(); | |||
this.dom.find('.slide-image-small').css('left', '0'); | |||
this.dom.find('.verify-code-send-btn').addClass('__disabled'); | |||
var self = this; | |||
$.ajax({ | |||
url: '/slideImage', | |||
type: 'get', | |||
success: function (res) { | |||
if (res && res.Code === 0) { | |||
self.imgID = res.Message; | |||
self.dom.find('.slide-image-big').css('background', `url("/slideimage/${res.Message}.png")`); | |||
self.dom.find('.slide-image-small').css('background', `url("/slideimage/${res.Message}screenshot.png")`); | |||
} | |||
}, | |||
error: function (err) { | |||
console.log(err); | |||
} | |||
}); | |||
}; | |||
PhoneVerifyCode.prototype.countDown = function () { | |||
var self = this; | |||
var sendBtnEl = this.dom.find('.verify-code-send-btn'); | |||
var count = this.countDownNumber; | |||
sendBtnEl.addClass('__disabled').text(count + (self.options && self.options.Lang && self.options.Lang.second_resend ? self.options.Lang.second_resend : 'S后重发')); | |||
this.canSendCode = false; | |||
this.countDownEnd = false; | |||
var timer = setInterval(function () { | |||
count--; | |||
sendBtnEl.addClass('__disabled').text(count + (self.options && self.options.Lang && self.options.Lang.second_resend ? self.options.Lang.second_resend : 'S后重发')); | |||
if (count <= 0) { | |||
sendBtnEl.removeClass('__disabled').text(+ (self.options && self.options.Lang && self.options.Lang.get_verification_code ? self.options.Lang.get_verification_code : '获取验证码')); | |||
clearInterval(timer); | |||
self.canSendCode = true; | |||
self.countDownEnd = true; | |||
self.refreshImages(); | |||
} | |||
}, 1000); | |||
}; | |||
window.PhoneVerifyCode = PhoneVerifyCode; | |||
})(); |
@@ -0,0 +1,274 @@ | |||
.__phone-verify-code { | |||
max-width: 519px; | |||
} | |||
.__phone-verify-code ._label-c { | |||
display: flex; | |||
justify-content: fixed-start; | |||
align-items: center; | |||
width: 100px; | |||
display: none; | |||
} | |||
.__phone-verify-code ._label-c ._label { | |||
font-size: 13px; | |||
font-weight: 700; | |||
color: rgba(0, 0, 0, .87); | |||
} | |||
.__phone-verify-code ._label-c.required ._label:after { | |||
margin: -0.2em 0 0 0.2em; | |||
content: '*'; | |||
color: #db2828; | |||
display: inline-block; | |||
vertical-align: top; | |||
} | |||
.__phone-verify-code .phone-c { | |||
display: flex; | |||
margin: 0 0 1em; | |||
} | |||
.__phone-verify-code .phone-c .phone-area-c { | |||
height: 38px; | |||
width: 80px; | |||
margin-right: 10px; | |||
border-radius: 2px; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
box-sizing: border-box; | |||
} | |||
.__phone-verify-code .phone-c .phone-area-c select { | |||
outline: none; | |||
} | |||
.__phone-verify-code .phone-c .phone-num-c { | |||
height: 38px; | |||
flex: 1; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
box-sizing: border-box; | |||
position: relative; | |||
} | |||
.__phone-verify-code .phone-c .phone-num-c input { | |||
height: 100%; | |||
width: 100% !important; | |||
padding: 9.5px 14px; | |||
box-sizing: border-box; | |||
outline: none; | |||
} | |||
.__phone-verify-code .phone-c .modify-phone-number { | |||
position: absolute; | |||
left: 100%; | |||
width: 200px; | |||
height: 100%; | |||
margin-left: 10px; | |||
display: none; | |||
} | |||
.__phone-verify-code .phone-c .modify-phone-number a { | |||
font-weight: 400; | |||
font-size: 14px; | |||
color: rgba(0, 102, 255, 1); | |||
} | |||
.__phone-verify-code .slide-bar-wrap { | |||
display: flex; | |||
height: 38px; | |||
margin: 0 0 1em; | |||
justify-content: center; | |||
align-items: center; | |||
position: relative; | |||
} | |||
.__phone-verify-code .slide-bar-c { | |||
flex: 1; | |||
display: flex; | |||
height: 38px; | |||
justify-content: center; | |||
align-items: center; | |||
position: relative; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg { | |||
height: 34px; | |||
flex: 1; | |||
background-color: rgb(245, 245, 246); | |||
border: 1px solid rgb(225, 227, 230); | |||
border-radius: 2px; | |||
position: relative; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-txt { | |||
position: absolute; | |||
width: 100%; | |||
height: 100%; | |||
display: flex; | |||
user-select: none; | |||
justify-content: center; | |||
align-items: center; | |||
color: #cdcacb; | |||
font-size: 14px; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-bar { | |||
position: absolute; | |||
width: 38px; | |||
height: 34px; | |||
background-color: #d1e9fe; | |||
border: 1px solid #1991fa; | |||
border-radius: 2px; | |||
box-sizing: border-box; | |||
top: -1px; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-bar.sucess { | |||
background-color: #d2f4ef; | |||
border: 1px solid #52ccba; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-bar.error { | |||
border-color: #f57a7a; | |||
background-color: #fce1e1; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-trigger { | |||
position: absolute; | |||
width: 38px; | |||
height: 34px; | |||
background-color: #1991fa; | |||
border-radius: 2px; | |||
cursor: pointer; | |||
top: -1px; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
user-select: none; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-trigger .icon { | |||
font-size: 16px; | |||
color: white; | |||
margin: 0; | |||
height: 16px; | |||
width: 16px; | |||
margin-top: -5px; | |||
user-select: none; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-trigger.sucess { | |||
background-color: #52ccba; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-bar-bg .slide-trigger.error { | |||
background-color: #f57a7a; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-image-big { | |||
position: absolute; | |||
width: 391px; | |||
height: 196px; | |||
top: 36px; | |||
left: 0; | |||
border-radius: 2px; | |||
z-index: 100; | |||
display: none; | |||
} | |||
.__phone-verify-code .slide-bar-c .slide-image-small { | |||
position: absolute; | |||
left: 0; | |||
width: 51px; | |||
height: 51px; | |||
box-shadow: 0 0 4px rgb(35 173 255); | |||
} | |||
.__phone-verify-code .slide-bar-c .verify-code-c { | |||
display: flex; | |||
height: 38px; | |||
} | |||
.__phone-verify-code .verify-code-c { | |||
display: flex; | |||
height: 38px; | |||
margin: 0 0 1em; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
.__phone-verify-code .verify-code-c .verify-code-num-c { | |||
flex: 1; | |||
height: 38px; | |||
box-sizing: border-box; | |||
justify-content: center; | |||
align-items: center; | |||
display: flex; | |||
} | |||
.__phone-verify-code .verify-code-c .verify-code-num-c input { | |||
height: 100%; | |||
width: 100% !important; | |||
padding: 9.5px 14px; | |||
box-sizing: border-box; | |||
outline: none; | |||
} | |||
.__phone-verify-code .verify-code-c .verify-code-send { | |||
display: flex; | |||
width: 120px; | |||
height: 38px; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
.__phone-verify-code .verify-code-c .verify-code-send .verify-code-send-btn { | |||
height: 100%; | |||
width: 100%; | |||
margin-left: 10px; | |||
border: 1px solid #398dee; | |||
background-color: #398dee; | |||
color: white; | |||
border-radius: 2px; | |||
box-sizing: border-box; | |||
cursor: pointer; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
} | |||
.__phone-verify-code .verify-code-c .verify-code-send .verify-code-send-btn.__disabled { | |||
border: 1px solid #ddd; | |||
background-color: #ddd; | |||
cursor: not-allowed; | |||
} | |||
.__phone-verify-code .new-pass-word-wrap { | |||
display: flex; | |||
height: 38px; | |||
margin: 0 0 1em; | |||
justify-content: center; | |||
align-items: center; | |||
display: none; | |||
} | |||
.__phone-verify-code .new-pass-word-wrap .new-pass-word-c { | |||
flex: 1; | |||
height: 38px; | |||
box-sizing: border-box; | |||
justify-content: center; | |||
align-items: center; | |||
display: flex; | |||
} | |||
.__phone-verify-code .new-pass-word-wrap .new-pass-word-c input { | |||
height: 100%; | |||
width: 100% !important; | |||
padding: 9.5px 14px; | |||
box-sizing: border-box; | |||
outline: none; | |||
} |
@@ -20,6 +20,15 @@ for (const path of glob('web_src/less/themes/*.less')) { | |||
themes[parse(path).name] = [path]; | |||
} | |||
const standalone = {}; | |||
const stadalonePaths = [ | |||
...glob('web_src/js/standalone/*.js'), | |||
...glob('web_src/less/standalone/*.less'), | |||
]; | |||
for (const path of stadalonePaths) { | |||
standalone[parse(path).name] = [path]; | |||
} | |||
const isProduction = process.env.NODE_ENV !== 'development'; | |||
module.exports = { | |||
@@ -29,13 +38,11 @@ module.exports = { | |||
resolve(__dirname, 'web_src/js/index.js'), | |||
resolve(__dirname, 'web_src/less/index.less'), | |||
], | |||
swagger: [ | |||
resolve(__dirname, 'web_src/js/standalone/swagger.js'), | |||
], | |||
jquery: [ | |||
resolve(__dirname, 'web_src/js/jquery.js'), | |||
], | |||
icons: glob('node_modules/@primer/octicons/build/svg/**/*.svg'), | |||
...standalone, | |||
...themes, | |||
}, | |||
devtool: false, | |||
@@ -20,6 +20,15 @@ for (const path of glob('web_src/less/themes/*.less')) { | |||
themes[parse(path).name] = [path]; | |||
} | |||
const standalone = {}; | |||
const stadalonePaths = [ | |||
...glob('web_src/js/standalone/*.js'), | |||
...glob('web_src/less/standalone/*.less'), | |||
]; | |||
for (const path of stadalonePaths) { | |||
standalone[parse(path).name] = [path]; | |||
} | |||
const isProduction = process.env.NODE_ENV !== 'development'; | |||
module.exports = { | |||
@@ -29,13 +38,11 @@ module.exports = { | |||
resolve(__dirname, 'web_src/js/index.js'), | |||
resolve(__dirname, 'web_src/less/index.less'), | |||
], | |||
swagger: [ | |||
resolve(__dirname, 'web_src/js/standalone/swagger.js'), | |||
], | |||
jquery: [ | |||
resolve(__dirname, 'web_src/js/jquery.js'), | |||
], | |||
icons: glob('node_modules/@primer/octicons/build/svg/**/*.svg'), | |||
...standalone, | |||
...themes, | |||
}, | |||
devtool: false, | |||