react_hsbc_teller 2.0.26 → 2.0.28

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react_hsbc_teller",
3
- "version": "2.0.26",
3
+ "version": "2.0.28",
4
4
  "description": "React",
5
5
  "private": false,
6
6
  "main": "lib/hsbc.js",
@@ -33,7 +33,7 @@ roomId
33
33
  // resourcePath: 'https://counter-web.leimondata.cn:7199',
34
34
  // resourcePath:'http://121.196.19.70:8027/',
35
35
  roomServerUrl: 'wss://app.uat.dsp.hsbcfts.com.cn/mpaas/mrtc/ws',
36
- baseURL:'https://zuul.uat.dsp.hsbcfts.com.cn/wealth/zuulsit/api/leimon-counter-api',
36
+ baseURL:'https://zuul.uat.dsp.hsbcfts.com.cn/wealth/zuul/api/leimon-counter-api',
37
37
  resourcePath:'https://zuul.uat.dsp.hsbcfts.com.cn/wealth/js/',
38
38
  prohibitPrompt: '无客户',
39
39
  titleBackground: '#40a9ff',
@@ -192,6 +192,10 @@ userExit =(val)=>{
192
192
 
193
193
  })
194
194
  }
195
+ componentDidCatch(error, info) {
196
+ console.log('componentDidCatch')
197
+ console.error(error, info)
198
+ }
195
199
  render() {
196
200
  return (
197
201
  <div className="test">
@@ -213,14 +213,14 @@ export default class foot extends Component {
213
213
  </div>
214
214
  </div>
215
215
  </div>
216
- <div className='footHover' onClick={this.toggleAsr.bind(this)}>
216
+ {/* <div className='footHover' onClick={this.toggleAsr.bind(this)}>
217
217
  <div className="one">
218
218
  <img className="imgClass" src={require("../../assets/img/icon_asr.png").default} alt="" />
219
219
  <div className="text">
220
220
  ASR检测
221
221
  </div>
222
222
  </div>
223
- </div>
223
+ </div> */}
224
224
  </div>
225
225
  {defaultList}
226
226
 
@@ -376,6 +376,7 @@ class Copy extends Component {
376
376
  }
377
377
  }
378
378
  mouseUp=(ev)=> {
379
+ if (!this.state.isDown) return;
379
380
  ev.preventDefault();
380
381
  let { ctx, stageInfo } = this.state
381
382
  let canvas = this.refs.canvas1;
@@ -611,6 +612,7 @@ class Copy extends Component {
611
612
  onMouseDown={this.mouseDown}
612
613
  onMouseMove={this.mouseMove}
613
614
  onMouseUp={this.mouseUp}
615
+ onMouseLeave={() => { this.state.isDown = false }}
614
616
  ></canvas>
615
617
 
616
618
  </div>
@@ -624,6 +626,7 @@ class Copy extends Component {
624
626
  onMouseDown={this.mouseDown}
625
627
  onMouseMove={this.mouseMove}
626
628
  onMouseUp={this.mouseUp}
629
+ onMouseLeave={() => { this.state.isDown = false }}
627
630
  ></canvas>
628
631
  </div>
629
632
  </div>
@@ -151,6 +151,7 @@ class Copy extends Component {
151
151
  }
152
152
  }
153
153
  mouseUp=(ev)=> {
154
+ if (!this.state.isDown) return;
154
155
  ev.preventDefault();
155
156
  const obj = {
156
157
  x: ev.pageX,
@@ -322,6 +323,7 @@ class Copy extends Component {
322
323
  onMouseDown={this.mouseDown}
323
324
  onMouseMove={this.mouseMove}
324
325
  onMouseUp={this.mouseUp}
326
+ onMouseLeave={() => { this.state.isDown = false }}
325
327
  ></canvas>
326
328
  </div>
327
329
  <div className="btnsEN footEN">
@@ -171,6 +171,7 @@ class Risk extends Component {
171
171
  }
172
172
  }
173
173
  mouseUp=(ev)=> {
174
+ if (!this.state.isDown) return;
174
175
  ev.preventDefault();
175
176
  const obj = {
176
177
  x: ev.pageX,
@@ -241,6 +242,7 @@ class Risk extends Component {
241
242
  onMouseDown={this.mouseDown}
242
243
  onMouseMove={this.mouseMove}
243
244
  onMouseUp={this.mouseUp}
245
+ onMouseLeave={() => { this.state.isDown = false }}
244
246
  ></canvas>
245
247
  {
246
248
  // !this.state.isSignOk && <div className="signHere"><FormattedMessage id="spaceAccording" /></div>
@@ -65,7 +65,7 @@
65
65
  // left: 50%;
66
66
  // top: 35%;
67
67
  // transform: translate(-50%,-50%);
68
- // flex:1;
68
+ flex: none;
69
69
  }
70
70
  .signHere{
71
71
  font-size: 30px;
@@ -184,6 +184,7 @@ class Sign extends Component {
184
184
  }
185
185
  }
186
186
  mouseUp=(ev)=> {
187
+ if (!this.state.isDown) return;
187
188
  ev.preventDefault();
188
189
  const obj = {
189
190
  x: ev.pageX,
@@ -253,6 +254,7 @@ class Sign extends Component {
253
254
  onMouseDown={this.mouseDown}
254
255
  onMouseMove={this.mouseMove}
255
256
  onMouseUp={this.mouseUp}
257
+ onMouseLeave={() => { this.state.isDown = false }}
256
258
  ></canvas>
257
259
  {
258
260
  !this.state.isSignOk && <div className="signHere"><FormattedMessage id="plzSign" /></div>
@@ -60,7 +60,7 @@
60
60
  border:1.5px dashed #646464;
61
61
  margin: auto;
62
62
  position: relative;
63
- // flex:1;
63
+ flex: none;
64
64
 
65
65
  .canvasF{
66
66
  z-index: 10;
@@ -163,6 +163,7 @@ class Sign extends Component {
163
163
  }
164
164
  }
165
165
  mouseUp=(ev)=> {
166
+ if (!this.state.isDown) return;
166
167
  ev.preventDefault();
167
168
  const obj = {
168
169
  x: ev.pageX,
@@ -195,6 +196,7 @@ class Sign extends Component {
195
196
  onMouseDown={this.mouseDown}
196
197
  onMouseMove={this.mouseMove}
197
198
  onMouseUp={this.mouseUp}
199
+ onMouseLeave={() => { this.state.isDown = false }}
198
200
  ></canvas>
199
201
  <div className='signButton'>
200
202
  {
@@ -58,7 +58,7 @@ import MultiModule from '../multiModule/multiModule'//签字、抄录
58
58
  import axios from 'axios';
59
59
  import CryptoJS from "crypto-js";
60
60
 
61
- const SDK_VERISON = '2.0.26'
61
+ const SDK_VERISON = '2.0.28'
62
62
  const IDtypeFront = '请客户在其设备后置摄像头下展示证件正面(如:身份证照片页面)'
63
63
  const IDtypeBack = '请在后置摄像头下展示证件反面(如:身份证国徽页)'
64
64
  const { Option } = Select;
@@ -139,6 +139,7 @@ function clearStreamRemain() {
139
139
  beautyDiv.beauty_canvas = null;
140
140
  }
141
141
  if (!(beautyDiv.beauty_player == null || beautyDiv.beauty_player == undefined)) {
142
+ console.log('beautyDiv destroy')
142
143
  beautyDiv.beauty_player.destroy();
143
144
  beautyDiv.beauty_player = null;
144
145
  }
@@ -612,15 +613,16 @@ class Video extends Component {
612
613
  // 开启录制
613
614
  enableServerRecording = (record_business_id) => {
614
615
  const that = this
616
+ const SCALE = 1.5
615
617
  this.rateAll().then((res) => {
616
618
  console.log('退出房间者', res)
617
619
  let list = [
618
620
  {
619
621
  tag: 'projectionWhiteboard',
620
622
  xPosition: 0,
621
- yPosition: 175,
622
- width: 960,
623
- height: 540
623
+ yPosition: 175 * SCALE,
624
+ width: 1280,
625
+ height: 720
624
626
  },
625
627
  // {
626
628
  // tag: 'VIDEO_SOURCE_SCREEN_ONE',
@@ -640,50 +642,50 @@ class Video extends Component {
640
642
  tag: 'tag1',
641
643
  xPosition: 0,
642
644
  yPosition: 0,
643
- width: 213,
644
- height: 175
645
+ width: 213 * SCALE,
646
+ height: 175 * SCALE
645
647
  },
646
648
  {
647
649
  tag: 'customer1',
648
- xPosition: 213,
650
+ xPosition: 213 * SCALE,
649
651
  yPosition: 0,
650
- width: 213,
651
- height: 175
652
+ width: 213 * SCALE,
653
+ height: 175 * SCALE
652
654
  },
653
655
  {
654
656
  tag: 'customer2',
655
- xPosition: 426,
657
+ xPosition: 426 * SCALE,
656
658
  yPosition: 0,
657
- width: 213,
658
- height: 175
659
+ width: 213 * SCALE,
660
+ height: 175 * SCALE
659
661
  },
660
662
  {
661
663
  tag: 'customer3',
662
- xPosition: 639,
664
+ xPosition: 639 * SCALE,
663
665
  yPosition: 0,
664
- width: 213,
665
- height: 175
666
+ width: 213 * SCALE,
667
+ height: 175 * SCALE
666
668
  },
667
669
  {
668
670
  tag: 'customer4',
669
- xPosition: 852,
671
+ xPosition: 852 * SCALE,
670
672
  yPosition: 0,
671
- width: 213,
672
- height: 175
673
+ width: 213 * SCALE,
674
+ height: 175 * SCALE
673
675
  },
674
676
  {
675
677
  tag: 'customer5',
676
- xPosition: 1065,
678
+ xPosition: 1065 * SCALE,
677
679
  yPosition: 0,
678
- width: 213,
679
- height: 175
680
+ width: 213 * SCALE,
681
+ height: 175 * SCALE
680
682
  },
681
683
  {
682
684
  tag: 'customer6',
683
- xPosition: 1278,
685
+ xPosition: 1278 * SCALE,
684
686
  yPosition: 0,
685
- width: 213,
686
- height: 175
687
+ width: 213 * SCALE,
688
+ height: 175 * SCALE
687
689
  },
688
690
  // {
689
691
  // tag: 'sharedScreen', // 一期暂时不需要录制
@@ -697,18 +699,18 @@ class Video extends Component {
697
699
  res.map((item) => {
698
700
  list.push({
699
701
  tag: item.tag,
700
- xPosition: item.xaxis,
701
- yPosition: item.yaxis,
702
- width: item.width,
703
- height: item.height
702
+ xPosition: (item.xaxis * SCALE),
703
+ yPosition: (item.yaxis * SCALE),
704
+ width: (item.width * SCALE),
705
+ height: (item.height * SCALE)
704
706
  })
705
707
  }) :
706
708
  list.push({
707
709
  tag: 'VIDEO_SOURCE_SCREEN',
708
- xPosition: 960,
709
- yPosition: 535,
710
- width: 320,
711
- height: 180
710
+ xPosition: 960 * SCALE,
711
+ yPosition: 535 * SCALE,
712
+ width: 320 * SCALE,
713
+ height: 180 * SCALE
712
714
  })
713
715
  // list.push({
714
716
  // tag: 'VIDEO_SOURCE_SCREEN_19_9',
@@ -719,8 +721,8 @@ class Video extends Component {
719
721
  // })
720
722
  const filePath = 'recordId_' + new Date().valueOf();
721
723
  const recordParam = {};
722
- recordParam.width = 1280;
723
- recordParam.height = 720;
724
+ recordParam.width = 1280 * SCALE;
725
+ recordParam.height = 720 * SCALE;
724
726
  recordParam.recordTotalStream = 0;
725
727
  recordParam.startTimeout = 10;
726
728
  recordParam.splitType = 0;
@@ -732,10 +734,10 @@ class Video extends Component {
732
734
  type: 2, // 1 为时间戳⽔印;2 为⽂字⽔印;3 为图⽚⽔印
733
735
  id: 2, // ⽔印 ID
734
736
  enable: true,
735
- xPosition: 640, // x 轴位置
736
- yPosition: 10, // y 轴位置
737
+ xPosition: 640 * SCALE, // x 轴位置
738
+ yPosition: 10 * SCALE, // y 轴位置
737
739
  text: `${this.props.recordMode ==1 ?'远程录制' :'网点录制'} ${this.props.salesBranchCode || ''} ${this.state.branchName || ''} ${this.props.financialOffice || ''}`,
738
- fontSize: 16, // 字体⼤⼩
740
+ fontSize: 16 * SCALE, // 字体⼤⼩
739
741
  url: '' // ⽔印图⽚ HTTP 地址
740
742
  },
741
743
  {
@@ -743,10 +745,10 @@ class Video extends Component {
743
745
  type: 1, // 1 为时间戳⽔印;2 为⽂字⽔印;3 为图⽚⽔印
744
746
  id: 1, // ⽔印 ID
745
747
  enable: true,
746
- xPosition: 1080, // x 轴位置
747
- yPosition: 10, // y 轴位置
748
+ xPosition: 1080 * SCALE, // x 轴位置
749
+ yPosition: 10 * SCALE, // y 轴位置
748
750
  text: '', // ⽔印⽂字
749
- fontSize: 16, // 字体⼤⼩
751
+ fontSize: 16 * SCALE, // 字体⼤⼩
750
752
  url: '' // ⽔印图⽚ HTTP 地址
751
753
  },
752
754
  ];
@@ -1652,7 +1654,11 @@ class Video extends Component {
1652
1654
  else if (Mival.typeId == 5001) { // 客户端离框
1653
1655
  let TITLE = '客户'
1654
1656
  if (Mival.data && Mival.data.userId) {
1655
- TITLE = this.getUserTitle(Mival.data.userId)
1657
+ if (Mival.data.userId.includes(IPAD_SUFFIX)) {
1658
+ TITLE = ''
1659
+ } else {
1660
+ TITLE = this.getUserTitle(Mival.data.userId)
1661
+ }
1656
1662
  }
1657
1663
  this.messageClick(TITLE+'人脸已离框', 'error', Mival.data.userId)
1658
1664
  // this.saveVideoPoint('ffd', '客户人脸离框');
@@ -1660,7 +1666,11 @@ class Video extends Component {
1660
1666
  else if (Mival.typeId == 5002) { // 客户端背光
1661
1667
  let TITLE = '客户'
1662
1668
  if (Mival.data && Mival.data.userId) {
1663
- TITLE = this.getUserTitle(Mival.data.userId)
1669
+ if (Mival.data.userId.includes(IPAD_SUFFIX)) {
1670
+ TITLE = ''
1671
+ } else {
1672
+ TITLE = this.getUserTitle(Mival.data.userId)
1673
+ }
1664
1674
  }
1665
1675
  this.messageClick(TITLE+'背光、曝光过度', 'error', Mival.data.userId)
1666
1676
  // this.saveVideoPoint('env', '客户端背光、曝光过度');
@@ -1668,13 +1678,17 @@ class Video extends Component {
1668
1678
  else if (Mival.typeId == 5003) { // 客户端弱网
1669
1679
  let TITLE = '客户'
1670
1680
  if (Mival.data && Mival.data.userId) {
1671
- TITLE = this.getUserTitle(Mival.data.userId)
1681
+ if (Mival.data.userId.includes(IPAD_SUFFIX)) {
1682
+ TITLE = 'iPad'
1683
+ } else {
1684
+ TITLE = this.getUserTitle(Mival.data.userId)
1685
+ }
1672
1686
  }
1673
1687
  this.messageClick(TITLE+'当前网络较弱', 'error', Mival.data.userId)
1674
1688
  // this.saveVideoPoint('wnd', '客户端弱网');
1675
1689
  }
1676
1690
  else if (Mival.typeId == 5004) { // ipad低电量
1677
- this.messageClick('IPAD电量过低', 'error', Mival.data.userId)
1691
+ this.messageClick('iPad电量过低', 'error', Mival.data.userId)
1678
1692
 
1679
1693
  this.setState({
1680
1694
  ipadLowPowerErrorModalVisible: true,
@@ -2870,7 +2884,7 @@ class Video extends Component {
2870
2884
 
2871
2885
  if (participant.includes(IPAD_SUFFIX) && this.state.businessId){
2872
2886
  // ipad单独处理,不需要加入和退出的提示。但双录过程中ipad如果离开,要提示+循环播报直到ipad重新入会
2873
- console.log('ipad退出房间', participant)
2887
+ console.log('iPad退出房间', participant)
2874
2888
 
2875
2889
  this.setState({
2876
2890
  IpadLeaveErrorModalVisible: true,
@@ -3117,6 +3131,7 @@ class Video extends Component {
3117
3131
  isRecordingeErrorModalVisible: true,
3118
3132
  businessRecordId: '',
3119
3133
  })
3134
+ this.saveLog(`dual recording crash, recordId=${recordId}`);
3120
3135
  // 循环播放录制中断语音
3121
3136
  clearTimeout(this.recordLoopPlay)
3122
3137
  this.recordLoopPlay = () => {
@@ -3566,6 +3581,11 @@ class Video extends Component {
3566
3581
  }
3567
3582
  }
3568
3583
  }
3584
+ componentDidCatch(error, info) {
3585
+ console.log('componentDidCatch')
3586
+ console.error(error, info)
3587
+ }
3588
+
3569
3589
  componentWillUnmount() {
3570
3590
  this.saveLog('Exit meeting')
3571
3591
  if (this.test_controller && this.state.sessionType) {
@@ -3868,7 +3888,7 @@ class Video extends Component {
3868
3888
  })
3869
3889
  this.asr_controller = new MyAsrController({
3870
3890
  token: this.state.asrToken,
3871
- appkey: this.state.asrAppKey,
3891
+ appKey: this.state.asrAppKey,
3872
3892
  url: this.state.asrServerUrl,
3873
3893
  recorder: this.state.recorder
3874
3894
  })
@@ -4285,7 +4305,7 @@ class Video extends Component {
4285
4305
  handleOkIpadLeaveConfirm = () => {
4286
4306
  // 检测ipad是否入会
4287
4307
  if (!this.state.ipadTag) {
4288
- this.messageClick('未检测到IPAD,请重新加入后再试', 'error')
4308
+ this.messageClick('未检测到iPad,请重新加入后再试', 'error')
4289
4309
  } else {
4290
4310
  clearTimeout(this.ipadLeavePlay)
4291
4311
  this.setState({IpadLeaveErrorModalVisible: false})
@@ -5697,7 +5717,7 @@ class Video extends Component {
5697
5717
  this.setState({
5698
5718
  isModalVisibleEnvironment: false,
5699
5719
  })
5700
- if (!this.state.isPictureInPicture && this.props.recordMode != 2) {
5720
+ if (!this.state.isPictureInPicture) {
5701
5721
  this.pictureInPicture()
5702
5722
  }
5703
5723
  }
@@ -6655,15 +6675,25 @@ class Video extends Component {
6655
6675
  <Button className="modelButtonOk" type="primary" danger onClick={this.handleOkLowPowerConfirm}>确定</Button>
6656
6676
  </div>
6657
6677
  ]}>
6658
- <div className='endModal'>IPAD电量过低,请检查</div>
6678
+ <div className='endModal'>iPad电量过低,请检查</div>
6659
6679
  </Modal>
6660
6680
  {/* 双录中ipad退出确认 */}
6661
- <Modal closable={false} centered={true} visible={this.state.IpadLeaveErrorModalVisible} maskClosable={false} footer={[
6681
+ <Modal closable={false} centered={true} visible={this.state.IpadLeaveErrorModalVisible} maskClosable={false} width={320} footer={[
6662
6682
  <div key='end'>
6663
6683
  <Button className="modelButtonOk" type="primary" danger onClick={this.handleOkIpadLeaveConfirm}>确定</Button>
6664
6684
  </div>
6665
6685
  ]}>
6666
- <div className='endModal'>IPAD异常退出,请重新加入</div>
6686
+ <div className='ipadModal'>iPad 摄像头异常退出,请扫码重新加入会议</div>
6687
+ <QRCode
6688
+ value={JSON.stringify({
6689
+ sessionId:this.state.sessionId,
6690
+ staffId: this.props.tellerAccount,
6691
+ staffName: this.props.staffName
6692
+ })} //value参数为生成二维码的链接
6693
+ className="ipadCode"
6694
+ size={120} //二维码的宽高尺寸
6695
+ fgColor="#000000" //二维码的颜色
6696
+ />
6667
6697
  </Modal>
6668
6698
  {/* 是否退出会议*/}
6669
6699
  <Modal closable={false} centered={true} visible={this.state.isModalVisibleEnd} maskClosable={false} footer={[
@@ -454,6 +454,23 @@
454
454
  padding: 56px 30px 0px 30px;
455
455
  color: #333333;
456
456
  }
457
+ .ipadModal{
458
+ font-size: 16px;
459
+ padding: 36px 30px 0px 30px;
460
+ color: #333333;
461
+ }
462
+ .ipadModal .ant-modal-body{
463
+ display: flex;
464
+ align-items: center;
465
+ flex-direction: column;
466
+ }
467
+ .ipadCode{
468
+ margin-top: 16px;
469
+ margin-bottom: 20px;
470
+ transform: translateX(-50%);
471
+ left: 50%;
472
+ position: relative;
473
+ }
457
474
  .inspection{
458
475
  font-size: 16px;
459
476
  margin: 20px 50px;
@@ -37,8 +37,9 @@ let websocket_audio2txt_complete_time_end = 100; //websocket 语音转文本
37
37
 
38
38
  export default class MyAsrController {
39
39
  constructor(headers) {
40
+ console.log('MyAsrController', headers, headers.appKey)
40
41
  this.token = headers.token || 'default';
41
- this.appKey = headers.appKey || 'E6DAPlpMun5L2dJ7';
42
+ this.appKey = headers.appKey;
42
43
  this.url = headers.url;
43
44
 
44
45
  //初始化录音实例
@@ -97,7 +98,11 @@ export default class MyAsrController {
97
98
  }
98
99
 
99
100
  Disconnect() {
100
- this.recorderInstance.stop();
101
+ try {
102
+ this.recorderInstance.stop();
103
+ } catch(err){
104
+ console.log(err)
105
+ }
101
106
  clearInterval(this.interval);
102
107
  this.websocketStopTranscription()
103
108
  }