130 lines
3.4 KiB
JavaScript
130 lines
3.4 KiB
JavaScript
Component({
|
|
props: {
|
|
facing: 'front',
|
|
appName: '',
|
|
serviceName: '',
|
|
useLiveFaceCheck: false,
|
|
minRotate: -1
|
|
},
|
|
didMount: function didMount() {
|
|
this.webViewContext = my.createWebViewContext('am-face-detection');
|
|
this.doFaceLeftResolve = null;
|
|
this.isDidFaceLeftResolve = false;
|
|
this.doFaceRightResolve = null;
|
|
this.isDidFaceRightResolve = false;
|
|
},
|
|
didUnMount: function didUnMount() {
|
|
this.webViewContext.postMessage({
|
|
action: 'releaseCamera'
|
|
});
|
|
},
|
|
methods: {
|
|
doLeftFaceCheck: function doLeftFaceCheck() {
|
|
var _this = this;
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
_this.isDidFaceLeftResolve = false;
|
|
|
|
_this.webViewContext.postMessage({
|
|
action: 'doFaceLeft',
|
|
data: {
|
|
minRotate: _this.props.minRotate
|
|
}
|
|
});
|
|
|
|
_this.doFaceLeftResolve = resolve;
|
|
setTimeout(function () {
|
|
if (!_this.isDidFaceLeftResolve) {
|
|
reject();
|
|
}
|
|
}, 30000);
|
|
});
|
|
},
|
|
doRightFaceCheck: function doRightFaceCheck() {
|
|
var _this2 = this;
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
_this2.isDidFaceRightResolve = false;
|
|
|
|
_this2.webViewContext.postMessage({
|
|
action: 'doFaceRight',
|
|
data: {
|
|
minRotate: _this2.props.minRotate
|
|
}
|
|
});
|
|
|
|
_this2.doFaceRightResolve = resolve;
|
|
setTimeout(function () {
|
|
if (!_this2.isDidFaceRightResolve) {
|
|
reject();
|
|
}
|
|
}, 30000);
|
|
});
|
|
},
|
|
onMessage: function onMessage(e) {
|
|
var _this3 = this;
|
|
|
|
var _this$props = this.props,
|
|
onFaceStatusChange = _this$props.onFaceStatusChange,
|
|
onFail = _this$props.onFail,
|
|
onSuccessBtnTap = _this$props.onSuccessBtnTap;
|
|
var _e$detail = e.detail,
|
|
action = _e$detail.action,
|
|
data = _e$detail.data;
|
|
|
|
if (action === 'resignSuccessBtnClick') {
|
|
if (onSuccessBtnTap) {
|
|
onSuccessBtnTap();
|
|
}
|
|
}
|
|
|
|
if (action === 'faceRotated' && data.forward === 'left') {
|
|
this.isDidFaceLeftResolve = true;
|
|
this.doFaceLeftResolve(data.imageBase64);
|
|
return;
|
|
}
|
|
|
|
if (action === 'faceRotated' && data.forward === 'right') {
|
|
this.isDidFaceRightResolve = true;
|
|
this.doFaceRightResolve(data.imageBase64);
|
|
return;
|
|
}
|
|
|
|
if (action === 'captureImage') {
|
|
if (onFaceStatusChange) {
|
|
var promise = onFaceStatusChange({
|
|
imageBase64: data.imageBase64,
|
|
faceRect: data.faceRect
|
|
}, {
|
|
doLeftFaceCheck: this.doLeftFaceCheck.bind(this),
|
|
doRightFaceCheck: this.doRightFaceCheck.bind(this)
|
|
});
|
|
|
|
if (promise instanceof Promise) {
|
|
promise.then(function () {
|
|
_this3.webViewContext.postMessage({
|
|
action: 'requestSuccess'
|
|
});
|
|
})["catch"](function () {
|
|
_this3.webViewContext.postMessage({
|
|
action: 'requestFailure'
|
|
});
|
|
});
|
|
} else {
|
|
this.webViewContext.postMessage({
|
|
action: 'requestSuccess'
|
|
});
|
|
}
|
|
}
|
|
} else {
|
|
/* eslint-disable */
|
|
if (onFail) {
|
|
onFail({
|
|
code: data.code,
|
|
message: data.message
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}); |