react_hsbc_teller 1.9.11 → 1.9.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/hsbc.js +1 -1
- package/package.json +1 -1
- package/packages/assets/img/jietu.png +0 -0
- package/packages/assets/img/jietu_face.png +0 -0
- package/packages/pages/components/step/step.jsx +32 -0
- package/packages/pages/components/step/step.less +0 -0
- package/packages/pages/foot/foot.jsx +1 -1
- package/packages/pages/video/video.jsx +168 -91
- package/packages/pages/video/video.less +7 -2
|
@@ -14,6 +14,7 @@ import cameraImgOpen from '../../assets/img/icon_camera.png'
|
|
|
14
14
|
import cameraImgCloe from '../../assets/img/icon_cameraOne.png'
|
|
15
15
|
import beautyImg from '../../assets/img/whiteningLut.jpg'
|
|
16
16
|
import ocrImage from '../../assets/img/jietu.png'
|
|
17
|
+
import faceImage from '../../assets/img/jietu_face.png'
|
|
17
18
|
import autod from '../../assets/mp3/joinmeeting.mp3'
|
|
18
19
|
import internalJoin from '../../assets/mp3/internalJoin.mp3'
|
|
19
20
|
import internalLeft from '../../assets/mp3/internalLeft.mp3'
|
|
@@ -40,8 +41,11 @@ import 'antd/lib/space/style'
|
|
|
40
41
|
import styled from 'styled-components';
|
|
41
42
|
import { Button } from '../../../node_modules/antd/lib/index';
|
|
42
43
|
import SignMy from '../sign/signMy.jsx'
|
|
44
|
+
import Step from '../components/step/step.jsx'
|
|
43
45
|
import axios from 'axios';
|
|
44
46
|
import CryptoJS from "crypto-js";
|
|
47
|
+
const IDtypeFront = '请客户在其设备后置摄像头下展示证件正面(如:身份证照片页面)'
|
|
48
|
+
const IDtypeBack = '请在后置摄像头下展示证件反面(如:身份证国徽页)'
|
|
45
49
|
const { Option } = Select;
|
|
46
50
|
const LEAVE_TYPE = {
|
|
47
51
|
TELLER_EXIT: 1, // 坐席退出
|
|
@@ -179,7 +183,7 @@ class Video extends Component {
|
|
|
179
183
|
isWhiteboard: false,
|
|
180
184
|
isSelect: '',
|
|
181
185
|
loading: false,
|
|
182
|
-
titleModal: '
|
|
186
|
+
titleModal: '身份验证',
|
|
183
187
|
faceCustomerType: 1, // 1无感人脸,2ocr
|
|
184
188
|
faceCustomerUid: '',
|
|
185
189
|
customerList: [],
|
|
@@ -188,6 +192,7 @@ class Video extends Component {
|
|
|
188
192
|
isModalVisibleInvitation: false,
|
|
189
193
|
linkData: '',
|
|
190
194
|
roomCustomerList: [],
|
|
195
|
+
userIdCardResults: {},
|
|
191
196
|
facialImg: '',
|
|
192
197
|
isFaceImage: false,
|
|
193
198
|
isModalVisibleFacial: false,
|
|
@@ -325,7 +330,7 @@ class Video extends Component {
|
|
|
325
330
|
documentType: '',
|
|
326
331
|
isCustomerSelect: true,
|
|
327
332
|
documentError: '',
|
|
328
|
-
customerTitleName: '
|
|
333
|
+
customerTitleName: '客户身份验证',
|
|
329
334
|
certificateType: 'ID_CARD',
|
|
330
335
|
customerName: '',
|
|
331
336
|
IDtypeFrontOrBack: '',
|
|
@@ -352,7 +357,7 @@ class Video extends Component {
|
|
|
352
357
|
saveLog = (val) => {
|
|
353
358
|
axios({
|
|
354
359
|
method: 'get',
|
|
355
|
-
baseURL: this.props.logUrl + '&message=' + encodeURIComponent(val) + '&react_hsbc_teller=1.9.
|
|
360
|
+
baseURL: this.props.logUrl + '&message=' + encodeURIComponent(val) + '&react_hsbc_teller=1.9.13&logTime=' + Date.now() + '&mtoken=' + encodeURIComponent(this.state.rtoken) + '&roomId=' + encodeURIComponent(this.state.channelId) + '&sessionId=' + encodeURIComponent(this.state.sessionId) + '&appointmentID=' + this.props.businessNumber,
|
|
356
361
|
|
|
357
362
|
}).then(res => {
|
|
358
363
|
|
|
@@ -780,7 +785,7 @@ class Video extends Component {
|
|
|
780
785
|
this.setState({
|
|
781
786
|
cardFailReason: '证件图片不清晰,请重试。返回重拍时,请检查并确保身份证件图片信息完整清晰后再提交核查。[#'+value+'#]'
|
|
782
787
|
})
|
|
783
|
-
} else if(value == -1001 || value == -1002|| value == -1003||value == -1004||value == -1005||value==-
|
|
788
|
+
} else if(value == -1001 || value == -1002|| value == -1003||value == -1004||value == -1005||value==-100801||value==-100802) {
|
|
784
789
|
this.setState({
|
|
785
790
|
cardFailReason: '系统或网络连接异常,请重试。若仍有问题,请联系Support同事。[#'+value+'#]'
|
|
786
791
|
})
|
|
@@ -799,7 +804,11 @@ class Video extends Component {
|
|
|
799
804
|
this.setState({
|
|
800
805
|
faceFailReason: '用户信息核查未通过。请返回重试。返回重拍时,请检查并确保客户照片完整清晰后再提交核查。[#'+ value + '#]'
|
|
801
806
|
})
|
|
802
|
-
}else if(value ==
|
|
807
|
+
}else if(value == 206) {
|
|
808
|
+
this.setState({
|
|
809
|
+
faceFailReason: '用户信息核查无法处理,请重试。若仍有问题,请联系Support同事。[#'+ value + '#]'
|
|
810
|
+
})
|
|
811
|
+
} else if(value == 209) {
|
|
803
812
|
this.setState({
|
|
804
813
|
faceFailReason: '用户信息核查未通过。请确认客户与其提供的证件信息一致后,再提交核查。[#'+ value + '#]'
|
|
805
814
|
})
|
|
@@ -816,9 +825,15 @@ class Video extends Component {
|
|
|
816
825
|
}
|
|
817
826
|
contrastFaceVerify = async () => {
|
|
818
827
|
try {
|
|
828
|
+
let userInfo = this.state.userIdCardResults[this.state.faceCustomerUid]
|
|
829
|
+
console.log(this.state.faceCustomerUid, userInfo)
|
|
830
|
+
if (!userInfo || !userInfo.idCardNumber) {
|
|
831
|
+
console.log('没有身份证ocr信息')
|
|
832
|
+
return
|
|
833
|
+
}
|
|
819
834
|
let result = await API.contrastFaceVerify({
|
|
820
|
-
|
|
821
|
-
|
|
835
|
+
idCardName: userInfo.idCardName, // idCardName: this.state.idCardNameFace,
|
|
836
|
+
idCardNumber: userInfo.idCardNumber, // idCardNumber: this.state.idCardNumberFace,
|
|
822
837
|
staffId: this.props.tellerAccount,
|
|
823
838
|
activityId: this.props.businessNumber,
|
|
824
839
|
appAccount: this.state.faceCustomerUid,
|
|
@@ -832,7 +847,10 @@ class Video extends Component {
|
|
|
832
847
|
loadingFace: false,
|
|
833
848
|
faceResuly: 'success',
|
|
834
849
|
isFaceImage: '',
|
|
835
|
-
faceFailReason: ''
|
|
850
|
+
faceFailReason: '',
|
|
851
|
+
idCardNameFace: userInfo.idCardName,
|
|
852
|
+
idCardNumberFace: userInfo.idCardNumber,
|
|
853
|
+
certificateValidityFace: userInfo.certificateValidity
|
|
836
854
|
})
|
|
837
855
|
// this.setState({
|
|
838
856
|
// isModalVisibleFacial: false
|
|
@@ -1018,7 +1036,7 @@ class Video extends Component {
|
|
|
1018
1036
|
isCustomerSelect: true,
|
|
1019
1037
|
customerSelect: list.length == 1 ? 1 : '',
|
|
1020
1038
|
|
|
1021
|
-
customerTitleName: '
|
|
1039
|
+
customerTitleName: '客户身份验证'
|
|
1022
1040
|
},()=>{
|
|
1023
1041
|
console.log(this.state.customerSelect)
|
|
1024
1042
|
this.setState({
|
|
@@ -1083,7 +1101,7 @@ class Video extends Component {
|
|
|
1083
1101
|
if (this.isFileSuccuse()) {
|
|
1084
1102
|
this.state.faceCustomerType = 1
|
|
1085
1103
|
this.setState({
|
|
1086
|
-
titleModal: '
|
|
1104
|
+
titleModal: '身份验证'
|
|
1087
1105
|
})
|
|
1088
1106
|
this.selectCustomer('facial')
|
|
1089
1107
|
}
|
|
@@ -1092,7 +1110,7 @@ class Video extends Component {
|
|
|
1092
1110
|
if (this.isFileSuccuse()) {
|
|
1093
1111
|
this.state.faceCustomerType = 2
|
|
1094
1112
|
this.setState({
|
|
1095
|
-
titleModal: '
|
|
1113
|
+
titleModal: '拍摄证件照片'
|
|
1096
1114
|
})
|
|
1097
1115
|
this.selectCustomer('ocr')
|
|
1098
1116
|
}
|
|
@@ -3871,7 +3889,7 @@ class Video extends Component {
|
|
|
3871
3889
|
}
|
|
3872
3890
|
}
|
|
3873
3891
|
componentWillMount() {
|
|
3874
|
-
console.log('hsbc_teller_sdk', '1.9.
|
|
3892
|
+
console.log('hsbc_teller_sdk', '1.9.13')
|
|
3875
3893
|
if (this.props.sessionId) {
|
|
3876
3894
|
this.getRoomStatus({
|
|
3877
3895
|
sessionId: this.props.sessionId
|
|
@@ -4241,6 +4259,56 @@ class Video extends Component {
|
|
|
4241
4259
|
PasswordSFP: event.target.value
|
|
4242
4260
|
})
|
|
4243
4261
|
}
|
|
4262
|
+
handleFinishOcr = async (type) => {
|
|
4263
|
+
// 非身份证直接入库
|
|
4264
|
+
if (type == 'noFace') {
|
|
4265
|
+
await this.confirmCallback()
|
|
4266
|
+
// this.setState({
|
|
4267
|
+
// idCardNameFace: this.state.idCardName,
|
|
4268
|
+
// idCardNumberFace: this.state.idCardNumber,
|
|
4269
|
+
// certificateValidityFace: this.state.certificateValidity
|
|
4270
|
+
// },()=>{
|
|
4271
|
+
this.setState({
|
|
4272
|
+
isModalVisibleFacial: false,
|
|
4273
|
+
cardResuly: '',
|
|
4274
|
+
idCardNumber: '',
|
|
4275
|
+
idCardName: '',
|
|
4276
|
+
certificateValidity: '',
|
|
4277
|
+
})
|
|
4278
|
+
// })
|
|
4279
|
+
} else {
|
|
4280
|
+
console.log('身份证ocr')
|
|
4281
|
+
// 身份证,进行人脸识别后再入库
|
|
4282
|
+
this.state.userIdCardResults[this.state.faceCustomerUid] = {
|
|
4283
|
+
idCardName: this.state.idCardName,
|
|
4284
|
+
idCardNumber: this.state.idCardNumber,
|
|
4285
|
+
customerName: this.state.customerName,
|
|
4286
|
+
certificateValidity: this.state.certificateValidity,
|
|
4287
|
+
}
|
|
4288
|
+
console.log(this.state.userIdCardResults)
|
|
4289
|
+
this.setState({
|
|
4290
|
+
idCardNameFace: this.state.idCardName,
|
|
4291
|
+
idCardNumberFace: this.state.idCardNumber,
|
|
4292
|
+
certificateValidityFace: this.state.certificateValidity,
|
|
4293
|
+
userIdCardResults: this.state.userIdCardResults
|
|
4294
|
+
},()=>{
|
|
4295
|
+
this.state.faceCustomerType = 1
|
|
4296
|
+
this.setState({
|
|
4297
|
+
cardResuly: '',
|
|
4298
|
+
certificateValidity: '',
|
|
4299
|
+
idCardNumber: '',
|
|
4300
|
+
idCardName: '',
|
|
4301
|
+
titleModal: '身份验证',
|
|
4302
|
+
// clickedFacial: true,
|
|
4303
|
+
facialImg: faceImage,
|
|
4304
|
+
isFaceImage: false
|
|
4305
|
+
})
|
|
4306
|
+
})
|
|
4307
|
+
setTimeout(() => {
|
|
4308
|
+
this.publishVideoTwo()
|
|
4309
|
+
}, 0);
|
|
4310
|
+
}
|
|
4311
|
+
}
|
|
4244
4312
|
// ocr结果入库
|
|
4245
4313
|
confirmCallback = async (data) => {
|
|
4246
4314
|
try {
|
|
@@ -4258,44 +4326,7 @@ class Video extends Component {
|
|
|
4258
4326
|
});
|
|
4259
4327
|
console.log('confirmCallback', result)
|
|
4260
4328
|
if (result.code == 200) {
|
|
4261
|
-
console.log(data)
|
|
4262
|
-
|
|
4263
|
-
if (data == 'noFace') {
|
|
4264
|
-
this.setState({
|
|
4265
|
-
idCardNameFace: this.state.idCardName,
|
|
4266
|
-
idCardNumberFace: this.state.idCardNumber,
|
|
4267
|
-
certificateValidityFace: this.state.certificateValidity
|
|
4268
|
-
},()=>{
|
|
4269
|
-
this.setState({
|
|
4270
|
-
isModalVisibleFacial: false,
|
|
4271
|
-
cardResuly: '',
|
|
4272
|
-
idCardNumber: '',
|
|
4273
|
-
idCardName: '',
|
|
4274
|
-
certificateValidity: '',
|
|
4275
|
-
})
|
|
4276
|
-
})
|
|
4277
|
-
} else {
|
|
4278
|
-
console.log('data')
|
|
4279
|
-
this.setState({
|
|
4280
|
-
idCardNameFace: this.state.idCardName,
|
|
4281
|
-
idCardNumberFace: this.state.idCardNumber,
|
|
4282
|
-
certificateValidityFace: this.state.certificateValidity
|
|
4283
|
-
},()=>{
|
|
4284
|
-
this.state.faceCustomerType = 1
|
|
4285
|
-
this.setState({
|
|
4286
|
-
cardResuly: '',
|
|
4287
|
-
certificateValidity: '',
|
|
4288
|
-
idCardNumber: '',
|
|
4289
|
-
idCardName: '',
|
|
4290
|
-
titleModal: '人脸识别',
|
|
4291
|
-
// clickedFacial: true,
|
|
4292
|
-
facialImg: ocrImage,
|
|
4293
|
-
isFaceImage: false
|
|
4294
|
-
})
|
|
4295
|
-
})
|
|
4296
|
-
this.publishVideoTwo()
|
|
4297
|
-
}
|
|
4298
|
-
|
|
4329
|
+
// console.log(data)
|
|
4299
4330
|
} else {
|
|
4300
4331
|
console.log('1')
|
|
4301
4332
|
this.messageClick('保持信息失败', 'error')
|
|
@@ -4485,7 +4516,7 @@ class Video extends Component {
|
|
|
4485
4516
|
}
|
|
4486
4517
|
handleOkFacial = () => {
|
|
4487
4518
|
if (this.state.faceCustomerType == 2) {
|
|
4488
|
-
if (this.state.IDtypeFrontOrBack ==
|
|
4519
|
+
if (this.state.IDtypeFrontOrBack == IDtypeFront) {
|
|
4489
4520
|
if(this.state.documentType == 'PASSPORT_CARD' || this.state.documentType == 'TW_PASS_CARD' || this.state.documentType == 'HK_MO_PASS_CARD') {
|
|
4490
4521
|
this.setState({
|
|
4491
4522
|
loadingFace: true
|
|
@@ -4494,12 +4525,12 @@ class Video extends Component {
|
|
|
4494
4525
|
} else {
|
|
4495
4526
|
this.setState({
|
|
4496
4527
|
facialImg: ocrImage,
|
|
4497
|
-
IDtypeFrontOrBack:
|
|
4528
|
+
IDtypeFrontOrBack: IDtypeBack,
|
|
4498
4529
|
isFaceImage: false,
|
|
4499
4530
|
})
|
|
4500
4531
|
}
|
|
4501
4532
|
|
|
4502
|
-
} else if (this.state.IDtypeFrontOrBack ==
|
|
4533
|
+
} else if (this.state.IDtypeFrontOrBack == IDtypeBack) {
|
|
4503
4534
|
this.setState({
|
|
4504
4535
|
loadingFace: true
|
|
4505
4536
|
})
|
|
@@ -4519,6 +4550,39 @@ class Video extends Component {
|
|
|
4519
4550
|
}
|
|
4520
4551
|
|
|
4521
4552
|
};
|
|
4553
|
+
handleFinishFacial = async () => {
|
|
4554
|
+
let userInfo = this.state.userIdCardResults[this.state.faceCustomerUid]
|
|
4555
|
+
console.log(this.state.faceCustomerUid, userInfo)
|
|
4556
|
+
if (!userInfo || !userInfo.idCardNumber) {
|
|
4557
|
+
console.log('没有身份证ocr信息')
|
|
4558
|
+
return
|
|
4559
|
+
}
|
|
4560
|
+
this.handleCancelFacial();
|
|
4561
|
+
try {
|
|
4562
|
+
let result = await API.confirmCallback({
|
|
4563
|
+
idCardName: userInfo.idCardName,
|
|
4564
|
+
staffId: this.props.tellerAccount,
|
|
4565
|
+
activityId: this.props.businessNumber,
|
|
4566
|
+
appAccount: this.state.faceCustomerUid,
|
|
4567
|
+
idCardNumber: userInfo.idCardNumber,
|
|
4568
|
+
sessionId: this.state.sessionId,
|
|
4569
|
+
certificateType: 'ID_CARD',
|
|
4570
|
+
customerName: userInfo.customerName,
|
|
4571
|
+
startDate: userInfo.certificateValidity ? userInfo.certificateValidity.split('-')[0] : '',
|
|
4572
|
+
endDate: userInfo.certificateValidity ? userInfo.certificateValidity.split('-')[1] : '',
|
|
4573
|
+
});
|
|
4574
|
+
console.log('confirmCallback', result)
|
|
4575
|
+
if (result.code == 200) {
|
|
4576
|
+
// console.log(data)
|
|
4577
|
+
} else {
|
|
4578
|
+
console.log('1')
|
|
4579
|
+
this.messageClick('保持信息失败', 'error')
|
|
4580
|
+
}
|
|
4581
|
+
} catch (err) {
|
|
4582
|
+
console.log('2',err)
|
|
4583
|
+
this.messageClick('保持信息失败', 'error')
|
|
4584
|
+
}
|
|
4585
|
+
};
|
|
4522
4586
|
handleCancelFacial = () => {
|
|
4523
4587
|
callNimIM('sendCustomCmdMsg', {
|
|
4524
4588
|
customId: this.state.imRoomId,
|
|
@@ -4568,7 +4632,7 @@ class Video extends Component {
|
|
|
4568
4632
|
isFaceImage: false,
|
|
4569
4633
|
facialImg: ocrImage,
|
|
4570
4634
|
disabledIdCard: true,
|
|
4571
|
-
IDtypeFrontOrBack:
|
|
4635
|
+
IDtypeFrontOrBack: IDtypeFront,
|
|
4572
4636
|
facialImgFront: '',
|
|
4573
4637
|
facialImgBack: '',
|
|
4574
4638
|
faceResuly: '',
|
|
@@ -4728,9 +4792,9 @@ class Video extends Component {
|
|
|
4728
4792
|
clickedFacial: false,
|
|
4729
4793
|
clickedOcr: false,
|
|
4730
4794
|
isFaceImage: false,
|
|
4731
|
-
facialImg: ocrImage,
|
|
4795
|
+
facialImg: this.state.titleModal=='身份验证'? faceImage : ocrImage,
|
|
4732
4796
|
disabledIdCard: true,
|
|
4733
|
-
IDtypeFrontOrBack:
|
|
4797
|
+
IDtypeFrontOrBack: IDtypeFront,
|
|
4734
4798
|
facialImgFront: '',
|
|
4735
4799
|
facialImgBack: '',
|
|
4736
4800
|
faceResuly: '',
|
|
@@ -4751,13 +4815,13 @@ class Video extends Component {
|
|
|
4751
4815
|
}
|
|
4752
4816
|
}
|
|
4753
4817
|
sgsinImage = () => {
|
|
4754
|
-
if (this.state.IDtypeFrontOrBack ==
|
|
4818
|
+
if (this.state.IDtypeFrontOrBack == IDtypeFront) {
|
|
4755
4819
|
this.setState({
|
|
4756
4820
|
facialImg: this.test_controller.TakePicture(1, undefined, undefined, this.state.customOcrSid, 'png'),
|
|
4757
4821
|
isFaceImage: true,
|
|
4758
4822
|
facialImgFront: this.test_controller.TakePicture(1, undefined, undefined, this.state.customOcrSid, 'png'),
|
|
4759
4823
|
})
|
|
4760
|
-
} else if (this.state.IDtypeFrontOrBack ==
|
|
4824
|
+
} else if (this.state.IDtypeFrontOrBack == IDtypeBack) {
|
|
4761
4825
|
this.setState({
|
|
4762
4826
|
facialImg: this.test_controller.TakePicture(1, undefined, undefined, this.state.customOcrSid, 'png'),
|
|
4763
4827
|
isFaceImage: true,
|
|
@@ -5614,7 +5678,7 @@ class Video extends Component {
|
|
|
5614
5678
|
documentType: '',
|
|
5615
5679
|
isCustomerSelect: true,
|
|
5616
5680
|
customerSelect: this.state.customerList.length == 1 ? 1 : '',
|
|
5617
|
-
customerTitleName: '
|
|
5681
|
+
customerTitleName: '客户身份验证'
|
|
5618
5682
|
})
|
|
5619
5683
|
}
|
|
5620
5684
|
handleOkCustomer = () => {
|
|
@@ -5643,19 +5707,19 @@ class Video extends Component {
|
|
|
5643
5707
|
"data": {
|
|
5644
5708
|
'sessionId': this.state.sessionId,
|
|
5645
5709
|
'userId': this.state.customerList[this.state.customerSelect - 1].customId,
|
|
5646
|
-
'title': '
|
|
5710
|
+
'title': '为了有效确认客户身份,请您配合汇丰银行(中国)有限公司(”我行”)进行身份识别和核验。请您阅读以下内容。若您同意,请您之后在摄像头前出示您的身份证件,我行将对您的身份证件拍照并采集证件信息;同时,我行会对您进行脸部拍照,采集您的脸部图像。',
|
|
5647
5711
|
'title_en': 'In order to confirm client’s identify, please cooperate with HSBC (China) Co., Ltd. (“the bank”) for identity verification. Please read the following and provide your authorization to the bank to capture your ID image and information, take picture of your face and retain them for identification and verification purpose.',
|
|
5648
5712
|
'navBarTitle': '客户授权',
|
|
5649
5713
|
'navBarTitle_en': '客户授权(en)',
|
|
5650
5714
|
'list': [
|
|
5651
5715
|
{
|
|
5652
5716
|
'id': 1,
|
|
5653
|
-
'content': '
|
|
5717
|
+
'content': '您是否授权我行对您的证件以及脸部进行拍照,采集并留存您的证件信息以及脸部图像以便我行进行身份识别?',
|
|
5654
5718
|
'content_en': 'Do you agree the bank to photograph your ID and face image, collect and retain ID information and face image for identification?'
|
|
5655
5719
|
},
|
|
5656
5720
|
{
|
|
5657
5721
|
'id': 2,
|
|
5658
|
-
'content': '
|
|
5722
|
+
'content': '为了通过人脸对比进行身份识别和核验,我行需要将您的姓名、身份证件号码和脸部图像发送给中国公安系统(包括其所属机构及代理机构)进行人脸对比及信息核对。',
|
|
5659
5723
|
'content_en': 'For further identification and verification purpose, do you agree the bank to send your name, ID number and face image to the public security authority (including its affiliates or agencies) to perform the identification and information verification process?'
|
|
5660
5724
|
},
|
|
5661
5725
|
{
|
|
@@ -5675,19 +5739,19 @@ class Video extends Component {
|
|
|
5675
5739
|
"data": {
|
|
5676
5740
|
'sessionId': this.state.sessionId,
|
|
5677
5741
|
'userId': this.state.customerList[this.state.customerSelect - 1].customId,
|
|
5678
|
-
'title': '
|
|
5742
|
+
'title': '为了有效确认客户身份,请您配合汇丰银行(中国)有限公司(“我行”)进行身份识别。请您阅读以下内容,若您同意,请您之后在摄像头前出示您的身份证件,我行将对您的身份证件拍照并采集证件信息;',
|
|
5679
5743
|
'title_en': 'In order to confirm client’s identify, please cooperate with HSBC (China) Co., Ltd. (“the bank”) for identity verification. Please read the following and provide your authorization to the bank to capture your ID image and information and retain them for identification and verification purpose. ',
|
|
5680
5744
|
'navBarTitle': '客户授权',
|
|
5681
5745
|
'navBarTitle_en': '客户授权(en)',
|
|
5682
5746
|
'list': [
|
|
5683
5747
|
{
|
|
5684
5748
|
'id': 1,
|
|
5685
|
-
'content': '
|
|
5749
|
+
'content': '您是否授权我行对您的证件进行拍照,采集并留存您的证件信息以便我行进行身份确认?',
|
|
5686
5750
|
'content_en': 'Do you agree the bank to photograph your ID ,collect and retain ID information and for identification?'
|
|
5687
5751
|
},
|
|
5688
5752
|
{
|
|
5689
5753
|
'id': 2,
|
|
5690
|
-
'content': '
|
|
5754
|
+
'content': '对于陪同者所需签署的文件,您是否同意使用电子签名方式签署,并授权汇丰银行(中国)有限公司(“汇丰中国”)通过电子签名服务供应商向第三方认证机构提供您本人的姓名和身份证件号码,用以申请您本人专属的数字证书?您本人在电子设备上签署文件即表明您本人指示汇丰中国使用您本人专属电子证书对该等文件进行电子签名。您本人知悉并同意,电子签名和手写签名具有同等法律效力。 \n说明:电子签名服务供应商和第三方认证机构的名称和联系方式如下:' +
|
|
5691
5755
|
'\n电子签名服务供应商:杭州尚尚签网络科技有限公司(联系电话:4009936665)\n第三方认证机构: \n北京天威诚信电子商务服务有限公司(联系电话:010-50947500)\n中金金融认证中心有限公司(联系电话:010-83526655)',
|
|
5692
5756
|
'content_en': 'To sign in the relevant document required as companion, do you agree to adopt electronic signature in it?. And you shall authorize HSBC (China) Co., Ltd to provide your name and identity document number to the certificate authority through the electronic signature service provider to apply for your own digital certificate. By signing the document on the electronic device, you authorize HSBC (China) Co., Ltd to use your digital certificate and apply your electronic signature to the documents. You understand and agree that electronic signature has the same legal effect as handwritten signature.' +
|
|
5693
5757
|
'\nPlease be noted the names and contact information of the electronic signature service provider and the certificate authority are as follows:\nElectronic signature service provider: Hangzhou BestSign Network Technology Co. Ltd. (Contact: 4009936665) \nCertificate Authority: \nChina Financial Certification Authority (Contact: 010-83526655)\niTrusChina Co., Ltd (Contact: 010-50947500)'
|
|
@@ -6409,7 +6473,7 @@ class Video extends Component {
|
|
|
6409
6473
|
virtualization={this.virtualization}
|
|
6410
6474
|
></Foot>
|
|
6411
6475
|
{/* 暂停恢复会话 */}
|
|
6412
|
-
<Modal cancelText="取消" okText="确定" visible={this.state.isModalVisible} onOk={this.handleOk}
|
|
6476
|
+
<Modal cancelText="取消" okText="确定" visible={this.state.isModalVisible} maskClosable={false} onOk={this.handleOk}
|
|
6413
6477
|
onCancel={this.handleCancel}>
|
|
6414
6478
|
{
|
|
6415
6479
|
this.state.isSuspend && <span>确定是否恢复会话?</span>
|
|
@@ -6419,7 +6483,7 @@ class Video extends Component {
|
|
|
6419
6483
|
}
|
|
6420
6484
|
</Modal>
|
|
6421
6485
|
{/* 是否退出会议*/}
|
|
6422
|
-
<Modal closable={false} centered={true} visible={this.state.isModalVisibleEnd} footer={[
|
|
6486
|
+
<Modal closable={false} centered={true} visible={this.state.isModalVisibleEnd} maskClosable={false} footer={[
|
|
6423
6487
|
<div key='end'>
|
|
6424
6488
|
<Button className="modelButtonCancel" onClick={this.handleCancelEnd}>取消</Button>
|
|
6425
6489
|
<Button className="modelButtonOk" type="primary" danger onClick={this.handleOkEnd}>确定</Button>
|
|
@@ -6428,11 +6492,11 @@ class Video extends Component {
|
|
|
6428
6492
|
<div className='endModal'>是否要结束并退出会议?</div>
|
|
6429
6493
|
</Modal>
|
|
6430
6494
|
{/* ocr及人脸 */}
|
|
6431
|
-
<Modal title={this.state.titleModal} width={
|
|
6495
|
+
<Modal title={this.state.titleModal} width={800} closable={true} maskClosable={false} onCancel={this.handleCancelFacial} centered={true} visible={this.state.isModalVisibleFacial} footer={[
|
|
6432
6496
|
// ocr及人脸在截图界面的按钮
|
|
6433
6497
|
this.state.cardResuly == '' && this.state.faceResuly == '' &&<div key='facial'>
|
|
6434
6498
|
<Button className="modelButtonCancel" onClick={this.handleCancelFacial}>取消</Button>
|
|
6435
|
-
<Button className="modelButtonCancel" onClick={this.sgsinImage}
|
|
6499
|
+
<Button className="modelButtonCancel" onClick={this.sgsinImage}>拍照</Button>
|
|
6436
6500
|
{/* 再截图后按钮高亮 */}
|
|
6437
6501
|
{
|
|
6438
6502
|
this.state.isFaceImage && <Button className="modelButtonOk" type="primary" danger onClick={this.handleOkFacial}>下一步</Button>
|
|
@@ -6444,7 +6508,12 @@ class Video extends Component {
|
|
|
6444
6508
|
</div>,
|
|
6445
6509
|
// 人脸识别后的结果界面的按钮
|
|
6446
6510
|
this.state.cardResuly == '' && this.state.faceResuly != '' &&<div key='facial'>
|
|
6447
|
-
|
|
6511
|
+
{
|
|
6512
|
+
this.state.faceResuly == 'success' && <Button className="modelButtonCancel" onClick={this.handleFinishFacial}>完成</Button>
|
|
6513
|
+
}
|
|
6514
|
+
{
|
|
6515
|
+
this.state.faceResuly == 'fail' && <Button className="modelButtonNo" type="primary" danger>完成</Button>
|
|
6516
|
+
}
|
|
6448
6517
|
{
|
|
6449
6518
|
this.state.faceResuly == 'fail' && <Button className="modelButtonOk" type="primary" danger onClick={this.ReIdentification}>重新识别</Button>
|
|
6450
6519
|
}
|
|
@@ -6457,16 +6526,17 @@ class Video extends Component {
|
|
|
6457
6526
|
// ocr成功
|
|
6458
6527
|
this.state.cardResuly == 'success' && <div key='facial'>
|
|
6459
6528
|
{
|
|
6460
|
-
this.state.disabledIdCard && <Button className="modelButtonFaceOk" danger onClick={(e) => this.updateConfirm('noFace')}
|
|
6529
|
+
this.state.disabledIdCard && <Button className="modelButtonFaceOk" danger onClick={(e) => this.updateConfirm('noFace')}>修正证件信息</Button>
|
|
6461
6530
|
}
|
|
6531
|
+
<Button className="modelButtonCancel" danger onClick={this.newFaceClick}>返回重拍</Button>
|
|
6462
6532
|
{
|
|
6463
|
-
this.state.documentType == 'ID_CARD' && this.state.certificateValidityType && <Button className="modelButtonFaceOkColor" danger onClick={(e) => this.
|
|
6533
|
+
this.state.documentType == 'ID_CARD' && this.state.certificateValidityType && <Button className="modelButtonFaceOkColor" danger onClick={(e) => this.handleFinishOcr('face')}>确认信息并发起人脸识别</Button>
|
|
6464
6534
|
}
|
|
6465
6535
|
{
|
|
6466
|
-
this.state.documentType == 'ID_CARD' && !this.state.certificateValidityType && <Button className="modelButtonFaceOkColorFile" danger
|
|
6536
|
+
this.state.documentType == 'ID_CARD' && !this.state.certificateValidityType && <Button className="modelButtonFaceOkColorFile" danger >确认信息并发起人脸识别</Button>
|
|
6467
6537
|
}
|
|
6468
6538
|
{
|
|
6469
|
-
this.state.documentType != 'ID_CARD' &&this.state.certificateValidityType && <Button className="modelButtonOk" type="primary" danger onClick={(e) => this.
|
|
6539
|
+
this.state.documentType != 'ID_CARD' &&this.state.certificateValidityType && <Button className="modelButtonOk" type="primary" danger onClick={(e) => this.handleFinishOcr('noFace')}>完成</Button>
|
|
6470
6540
|
}
|
|
6471
6541
|
{
|
|
6472
6542
|
this.state.documentType != 'ID_CARD' && !this.state.certificateValidityType && <Button className="modelButtonFaceOkColorFile" danger >完成</Button>
|
|
@@ -6480,11 +6550,16 @@ class Video extends Component {
|
|
|
6480
6550
|
</div>
|
|
6481
6551
|
]}>
|
|
6482
6552
|
<Spin spinning={this.state.loadingFace} tip="识别中...">
|
|
6553
|
+
<div style={{display: 'flex', padding: '10px 20px'}}>
|
|
6554
|
+
<Step style={{marginTop: '10px'}} current={this.state.titleModal == '身份验证'?3:2} ></Step>
|
|
6483
6555
|
<div className="faceBody">
|
|
6484
6556
|
{this.state.cardResuly == '' && <div className='faceCardImg'>
|
|
6485
6557
|
|
|
6486
6558
|
{
|
|
6487
|
-
this.state.titleModal == '
|
|
6559
|
+
this.state.titleModal == '拍摄证件照片' && <div className='titleDiv'>{this.state.IDtypeFrontOrBack}</div>
|
|
6560
|
+
}
|
|
6561
|
+
{
|
|
6562
|
+
this.state.titleModal == '身份验证' && this.state.faceResuly == '' && <div className='titleDiv'>请确保陪同者头像清楚显示在前置镜头前</div>
|
|
6488
6563
|
}
|
|
6489
6564
|
|
|
6490
6565
|
{
|
|
@@ -6493,7 +6568,7 @@ class Video extends Component {
|
|
|
6493
6568
|
{
|
|
6494
6569
|
this.state.videoType == 'error' && <div className='errorClassFace videoErrorClass'>
|
|
6495
6570
|
<img src={require("../../assets/img/tooltips2_fail.png").default} alt="" ></img>
|
|
6496
|
-
|
|
6571
|
+
请点击“拍照”拍摄客户人像的照片。若界面无客户头像显示,请检查网络并保持网络稳定后,点击“拍照”重试
|
|
6497
6572
|
</div>
|
|
6498
6573
|
}
|
|
6499
6574
|
<video disablePictureInPicture className="faceImg" id="publish_video_2" autoPlay muted={true}></video>
|
|
@@ -6514,14 +6589,14 @@ class Video extends Component {
|
|
|
6514
6589
|
this.state.cardFailReason && <span>{this.state.cardFailReason}</span>
|
|
6515
6590
|
}
|
|
6516
6591
|
{
|
|
6517
|
-
!this.state.cardFailReason && <span
|
|
6592
|
+
!this.state.cardFailReason && <span>识别证件信息成功</span>
|
|
6518
6593
|
}
|
|
6519
6594
|
|
|
6520
6595
|
</div>
|
|
6521
6596
|
}
|
|
6522
6597
|
{
|
|
6523
6598
|
this.state.cardResuly == 'fail' && <div className='errorClassFace'>
|
|
6524
|
-
<img src={require("../../assets/img/tooltips2_fail.png").default} alt="" ></img
|
|
6599
|
+
<img src={require("../../assets/img/tooltips2_fail.png").default} alt="" ></img>识别证件信息失败--{this.state.cardFailReason}</div>
|
|
6525
6600
|
}
|
|
6526
6601
|
<div className='imgDIV'>
|
|
6527
6602
|
<img className="faceImgCard" src={this.state.facialImgFront} alt=""></img>
|
|
@@ -6537,16 +6612,16 @@ class Video extends Component {
|
|
|
6537
6612
|
</div>
|
|
6538
6613
|
}
|
|
6539
6614
|
{
|
|
6540
|
-
this.state.titleModal == '
|
|
6615
|
+
this.state.titleModal == '身份验证' && this.state.faceResuly != '' && <div className='resuleCard'>
|
|
6541
6616
|
{
|
|
6542
6617
|
this.state.faceResuly == 'success' && <div className='successClassFace'>
|
|
6543
6618
|
<img src={require("../../assets/img/tooltips1_pass.png").default} alt="" ></img>
|
|
6544
6619
|
|
|
6545
|
-
|
|
6620
|
+
认证通过</div>
|
|
6546
6621
|
}
|
|
6547
6622
|
{
|
|
6548
6623
|
this.state.faceResuly == 'fail' && <div className='errorClassFace'>
|
|
6549
|
-
<img src={require("../../assets/img/tooltips2_fail.png").default} alt="" ></img
|
|
6624
|
+
<img src={require("../../assets/img/tooltips2_fail.png").default} alt="" ></img>{this.state.faceFailReason}</div>
|
|
6550
6625
|
}
|
|
6551
6626
|
<div><span>客户姓名</span> <input disabled type="text" value={this.state.idCardNameFace}/></div>
|
|
6552
6627
|
<div><span>身份证号</span> <input disabled type="text" value={this.state.idCardNumberFace}/></div>
|
|
@@ -6555,9 +6630,10 @@ class Video extends Component {
|
|
|
6555
6630
|
}
|
|
6556
6631
|
|
|
6557
6632
|
</div>
|
|
6633
|
+
</div>
|
|
6558
6634
|
</Spin>
|
|
6559
6635
|
</Modal>
|
|
6560
|
-
<Modal title="经理人员授权" closable={false} centered={true} visible={this.state.isModalVisibleSFP}
|
|
6636
|
+
<Modal title="经理人员授权" closable={false} centered={true} visible={this.state.isModalVisibleSFP} maskClosable={false}
|
|
6561
6637
|
footer={[
|
|
6562
6638
|
<div key='end'>
|
|
6563
6639
|
<Button className="modelButtonCancel" onClick={this.handleCancelSFP}>取消</Button>
|
|
@@ -6590,7 +6666,7 @@ class Video extends Component {
|
|
|
6590
6666
|
</div>
|
|
6591
6667
|
</Spin>
|
|
6592
6668
|
</Modal>
|
|
6593
|
-
<Modal title={this.state.customerTitleName} closable={false} centered={true} visible={this.state.isModalVisibleCustomer}
|
|
6669
|
+
<Modal width={650} title={this.state.customerTitleName} closable={false} centered={true} visible={this.state.isModalVisibleCustomer} maskClosable={false}
|
|
6594
6670
|
footer={[
|
|
6595
6671
|
<div key='end'>
|
|
6596
6672
|
|
|
@@ -6622,12 +6698,13 @@ class Video extends Component {
|
|
|
6622
6698
|
|
|
6623
6699
|
</div>
|
|
6624
6700
|
]}>
|
|
6625
|
-
<div>
|
|
6626
|
-
<
|
|
6701
|
+
<div style={{display: 'flex', padding: '10px 20px'}}>
|
|
6702
|
+
<Step current={this.state.isCustomerSelect?0:1}></Step>
|
|
6703
|
+
<div>
|
|
6627
6704
|
{
|
|
6628
6705
|
this.state.isCustomerSelect && <div>
|
|
6629
|
-
<div>
|
|
6630
|
-
|
|
6706
|
+
<div className='CustomerSelectTitle'>
|
|
6707
|
+
请选择进行身份识别的客户(陪同者)
|
|
6631
6708
|
</div>
|
|
6632
6709
|
<div>
|
|
6633
6710
|
<Radio.Group onChange={this.onChangeOCRCustomer} value={this.state.customerSelect}>
|
|
@@ -6650,8 +6727,8 @@ class Video extends Component {
|
|
|
6650
6727
|
this.state.documentError != '' && <div className='errorClassFace'>
|
|
6651
6728
|
<img src={require("../../assets/img/tooltips2_fail.png").default} alt="" ></img>{this.state.documentError}</div>
|
|
6652
6729
|
}
|
|
6653
|
-
<div>
|
|
6654
|
-
|
|
6730
|
+
<div className='CustomerSelectTitle'>
|
|
6731
|
+
请选择您的身份证件类型
|
|
6655
6732
|
</div>
|
|
6656
6733
|
<div>
|
|
6657
6734
|
<Radio.Group onChange={this.onChangeDocumentType} value={this.state.documentType}>
|
|
@@ -6673,7 +6750,7 @@ class Video extends Component {
|
|
|
6673
6750
|
|
|
6674
6751
|
</Modal>
|
|
6675
6752
|
|
|
6676
|
-
<Modal className="modelClass" title="邀请参会人员" closable={false} centered={true} visible={this.state.isModalVisibleInvitation} footer={[
|
|
6753
|
+
<Modal className="modelClass" maskClosable={false} title="邀请参会人员" closable={false} centered={true} visible={this.state.isModalVisibleInvitation} footer={[
|
|
6677
6754
|
<div key='invitation'>
|
|
6678
6755
|
<Button className="modelButtonCancel" onClick={this.handleCancelInvitation}>取消</Button>
|
|
6679
6756
|
{
|
|
@@ -6729,7 +6806,7 @@ class Video extends Component {
|
|
|
6729
6806
|
></CanvasDraw> */}
|
|
6730
6807
|
</div>
|
|
6731
6808
|
</Modal>
|
|
6732
|
-
<Modal title="设置视频设备" width={650} closable={false} centered={true} visible={this.state.isModalVisibleInspection} footer={[
|
|
6809
|
+
<Modal title="设置视频设备" maskClosable={false} width={650} closable={false} centered={true} visible={this.state.isModalVisibleInspection} footer={[
|
|
6733
6810
|
<div key='inspection'>
|
|
6734
6811
|
<Button className="modelButtonCancel" onClick={this.handleCancelInspection}>取消</Button>
|
|
6735
6812
|
<Button className="modelButtonOk" type="primary" danger onClick={this.handleOkInspection}>确定</Button>
|
|
@@ -157,6 +157,7 @@
|
|
|
157
157
|
.faceBody{
|
|
158
158
|
text-align: center;
|
|
159
159
|
height: 100%;
|
|
160
|
+
width: ~"calc(100% - 150px)";
|
|
160
161
|
.faceCardImg{
|
|
161
162
|
// height: 100%;
|
|
162
163
|
}
|
|
@@ -406,7 +407,7 @@
|
|
|
406
407
|
border-spacing: 20px!important;
|
|
407
408
|
}
|
|
408
409
|
.modelButtonFaceOkColor{
|
|
409
|
-
width: 170px!important;
|
|
410
|
+
min-width: 170px!important;
|
|
410
411
|
height: 40px!important;
|
|
411
412
|
font-size: 16px!important;
|
|
412
413
|
color: #ffffff!important;
|
|
@@ -432,6 +433,9 @@
|
|
|
432
433
|
font-size: 16px;
|
|
433
434
|
margin: 20px 50px;
|
|
434
435
|
}
|
|
436
|
+
.CustomerSelectTitle{
|
|
437
|
+
margin-bottom: 10px;
|
|
438
|
+
}
|
|
435
439
|
.errorClassName{
|
|
436
440
|
.ant-message-notice-content{
|
|
437
441
|
min-width: 500px;
|
|
@@ -598,7 +602,8 @@ margin: 20Px 40px;
|
|
|
598
602
|
margin-bottom: 0px !important;
|
|
599
603
|
}
|
|
600
604
|
.titleDiv{
|
|
601
|
-
font-size: 1.
|
|
605
|
+
font-size: 1.2rem;
|
|
606
|
+
margin: 10px 0;
|
|
602
607
|
}
|
|
603
608
|
.videoListClass{
|
|
604
609
|
align-content: flex-start;
|