captain-ui
Version:
有赞vue wap业务组件库
144 lines (125 loc) • 3.47 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _yzAes = _interopRequireDefault(require("@youzan/yz-aes"));
var _SlideCaptchaBox = _interopRequireDefault(require("./components/SlideCaptchaBox"));
var _default2 = {
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('div', {
staticClass: "behavior-captcha"
}, [_vm._fingerprint !== null ? _c('slide-captcha-box', {
class: _vm.className,
attrs: {
"fingerprint": _vm._fingerprint,
"show-type": _vm.showType,
"getCaptchaUrl": _vm.getSlideCaptchaUrl,
"checkCaptchaUrl": _vm.checkSlideCaptchaUrl,
"destroy": _vm.destroy
},
on: {
"success": _vm.handleSuccess,
"fail": _vm.handleFail,
"cancel": _vm.handleCancel
}
}) : _vm._e()], 1);
},
name: 'cap-behavior-captcha',
components: {
'slide-captcha-box': _SlideCaptchaBox.default
},
props: {
className: {
type: String,
default: ''
},
// 显示方式 embed:嵌入式 pop:弹窗式
showType: {
type: String,
default: 'embed'
},
// 行为验证码类型 slide:滑动拼图 click:顺序点击
type: {
type: String,
default: 'slide'
},
// 扩展唯一key 设备指纹唯一性为85%,这个参数主要解决剩下15%的问题
uniqueKey: {
type: String,
default: ''
},
destroy: Function,
getSlideCaptchaUrl: {
type: String,
default: function _default() {
if (location.host === 'uic') {
return '//uic.youzan.com/passport/api/captcha/behavior-captcha.json';
}
return '//passport.youzan.com/api/captcha/behavior-captcha.json';
}
},
checkSlideCaptchaUrl: {
type: String,
default: function _default() {
if (location.host === 'uic') {
return '//uic.youzan.com/passport/api/captcha/check-captcha.json';
}
return '//passport.youzan.com/api/captcha/check-captcha.json';
}
}
},
data: function data() {
return {
fingerprint: null
};
},
computed: {
_fingerprint: function _fingerprint() {
var fp = this.fingerprint;
if (fp && this.uniqueKey) {
fp += _yzAes.default.encrypt(this.uniqueKey);
}
return fp;
}
},
mounted: function mounted() {
var _this = this;
var flag = false; // 1秒内获取不到指纹就放弃获取
var timer = setTimeout(function () {
if (!flag) {
_this.fingerprint = '';
}
flag = true;
}, 1000);
var fingerPrintHandle = function fingerPrintHandle(_ref) {
var rdfp = _ref.rdfp;
if (!flag) {
_this.fingerprint = rdfp;
}
clearTimeout(timer);
flag = true;
};
if (!window.fingerprint) {
window.fingerprint = {
onComplete: fingerPrintHandle
};
} else {
window.fingerprint.get && window.fingerprint.get().then(fingerPrintHandle);
}
},
methods: {
handleSuccess: function handleSuccess(ticket) {
this.$emit('success', ticket);
},
handleFail: function handleFail() {
this.$emit('fail');
},
handleCancel: function handleCancel() {
this.$emit('cancel');
}
}
};
exports.default = _default2;