captain-ui
Version:
有赞vue wap业务组件库
225 lines (204 loc) • 5.75 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
require("vant/es/toast/style");
var _toast = _interopRequireDefault(require("vant/es/toast"));
require("vant/es/button/style");
var _button = _interopRequireDefault(require("vant/es/button"));
var _inputMixin = _interopRequireDefault(require("../../common/mixins/input-mixin"));
var _imageCaptcha = _interopRequireDefault(require("./components/image-captcha"));
var _ajax = _interopRequireDefault(require("./utils/ajax"));
var _token = _interopRequireDefault(require("./utils/token"));
var _default2 = {
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('div', {
staticClass: "cap-captcha"
}, [_c('input', {
staticClass: "cap-captcha__input",
attrs: {
"type": "tel",
"placeholder": _vm.placeholder,
"maxlength": "6"
},
domProps: {
"value": _vm.currentValue
},
on: {
"input": _vm.handleInput
}
}), _c('van-button', {
staticClass: "captcha-button",
style: _vm.buttonStyle,
attrs: {
"size": "small",
"disabled": _vm.captchaStatus === 'disabled'
},
on: {
"click": _vm.sendSmsCaptcha
}
}, [_vm._v("\n " + _vm._s(_vm.captchaBtnText) + "\n ")]), _c('vm-image-captcha', {
attrs: {
"phone": _vm.phone,
"country": _vm.country,
"check-image-captcha-url": _vm.checkImageCaptchaUrl,
"image-captcha-url": _vm.imageCaptchaUrl
},
on: {
"success": _vm.sendSmsCaptcha,
"logger": _vm.handleImgCaptchaLogger
},
model: {
value: _vm.imageCaptchaShow,
callback: function callback($$v) {
_vm.imageCaptchaShow = $$v;
},
expression: "imageCaptchaShow"
}
})], 1);
},
name: 'cap-captcha',
components: {
'van-button': _button.default,
'vm-image-captcha': _imageCaptcha.default
},
mixins: [_inputMixin.default],
props: {
value: String,
placeholder: String,
captchaUrl: String,
imageCaptchaUrl: String,
checkImageCaptchaUrl: String,
tokenUrl: String,
phone: [String, Number],
country: {
type: Object,
default: function _default() {
return {
code: '+86'
};
}
},
biz: String,
buttonColor: {
type: String,
default: '#e33'
},
sendMsgAfterConfirm: {
type: Boolean,
default: false
},
sendMsgConfirmCallback: {
type: Function
}
},
data: function data() {
return {
currentValue: this.value,
captchaStatus: '',
time: 60,
verifyTimes: 1,
imageCaptchaShow: false
};
},
computed: {
captchaBtnText: function captchaBtnText() {
var captchaStatus = this.captchaStatus;
return captchaStatus === '' ? '获取验证码' : captchaStatus === 'resend' ? '重新发送' : '已发送(' + this.time + ')';
},
buttonStyle: function buttonStyle() {
if (this.captchaStatus === 'disabled') return {};
var buttonColor = this.buttonColor;
return {
'border-color': buttonColor,
color: buttonColor
};
}
},
watch: {
value: function value(val) {
this.currentValue = val;
},
currentValue: function currentValue(val) {
this.$emit('input', val);
},
captchaStatus: function captchaStatus(val) {
this.$emit('statusChange', val);
}
},
mounted: function mounted() {
this.token = new _token.default(this.tokenUrl);
this.token.fetch();
},
methods: {
handleInput: function handleInput(event) {
this.currentValue = event.target.value;
},
sendSmsCaptcha: function sendSmsCaptcha() {
var _this = this;
this.$emit('logger', {
type: 'get-captcha'
});
var captchaStatus = this.captchaStatus;
var code = this.country && this.country.code;
var sendMsgAfterConfirm = this.sendMsgAfterConfirm;
if (!this.phone) {
(0, _toast.default)('请输入手机号');
return;
}
if (!code) {
(0, _toast.default)('请选择国家区号');
return;
}
if (captchaStatus === 'disabled') return;
var phone = code + '-' + this.phone;
if (sendMsgAfterConfirm) {
// 先confirm 再决定是否执行
this.sendMsgConfirmCallback().then(function () {
_this.sendMsg(phone);
});
} else {
this.sendMsg(phone);
}
},
sendMsg: function sendMsg(phone) {
var _this2 = this;
(0, _ajax.default)({
url: this.captchaUrl,
method: 'GET',
dataType: 'jsonp',
data: {
mobile: phone,
verifyTimes: this.verifyTimes,
biz: this.biz || 'kdt_account_captcha',
token: this.token.get()
}
}).then(function (res) {
_this2.verifyTimes++;
_this2.captchaStatus = 'disabled';
_this2.timer = setInterval(function () {
if (_this2.time >= 1) {
_this2.time--;
return;
}
clearInterval(_this2.timer);
_this2.captchaStatus = 'resend';
_this2.time = 60;
}, 1000);
}, function (res) {
if (+res.code === 10111) {
_this2.imageCaptchaShow = true;
} else {
(0, _toast.default)(res.msg || '请求错误');
}
});
},
handleImgCaptchaLogger: function handleImgCaptchaLogger(detail) {
this.$emit('logger', detail);
}
}
};
exports.default = _default2;