|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- ; (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;
- })();
|