react_hsbc_teller 2.0.4 → 2.0.5

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.4",
3
+ "version": "2.0.5",
4
4
  "description": "React",
5
5
  "private": false,
6
6
  "main": "lib/hsbc.js",
@@ -471,7 +471,24 @@ class API extends Server{
471
471
  throw err;
472
472
  }
473
473
  }
474
-
474
+ async addSensitiveRecord(params = {}){
475
+ try{
476
+ let result = await this.axios('post', '/sensitive/add', params);
477
+ if (result && (result.data instanceof Object) && result.code === 200){
478
+ return result.data||[];
479
+ } else{
480
+ let err = {
481
+ tip: '服务异常',
482
+ response: result,
483
+ data: params,
484
+ // url: 'https://api.cangdu.org/shopro/data/products',
485
+ }
486
+ throw err;
487
+ }
488
+ }catch(err){
489
+ throw err;
490
+ }
491
+ }
475
492
  // /**
476
493
  // * 用途:获取记录数据
477
494
  // * @url https://api.cangdu.org/shopro/data/record
Binary file
Binary file
@@ -47,6 +47,12 @@ export default class foot extends Component {
47
47
  inspection = ()=>{
48
48
  this.props.inspection()
49
49
  }
50
+ envDetection = () => {
51
+ this.props.envDetection()
52
+ }
53
+ toggleAsr = ()=>{
54
+ this.props.toggleAsr()
55
+ }
50
56
  switchExternal=()=>{
51
57
  this.props.switchExternal()
52
58
  }
@@ -199,6 +205,22 @@ export default class foot extends Component {
199
205
  </div>
200
206
  </div>
201
207
  </div>
208
+ <div className='footHover' onClick={this.envDetection.bind(this)}>
209
+ <div className="one">
210
+ <img className="imgClass" src={require("../../assets/img/icon_env.png").default} alt="" />
211
+ <div className="text">
212
+ 环境检测
213
+ </div>
214
+ </div>
215
+ </div>
216
+ <div className='footHover' onClick={this.toggleAsr.bind(this)}>
217
+ <div className="one">
218
+ <img className="imgClass" src={require("../../assets/img/icon_asr.png").default} alt="" />
219
+ <div className="text">
220
+ ASR检测
221
+ </div>
222
+ </div>
223
+ </div>
202
224
  </div>
203
225
  {defaultList}
204
226
 
@@ -25,6 +25,7 @@ width: 100%;
25
25
  }
26
26
  .footHover{
27
27
  margin: 0 5px;
28
+ cursor: pointer;
28
29
  }
29
30
  .footHover :hover{
30
31
  background: #F3F3F3;
@@ -17,6 +17,7 @@ import beautyImg from '../../assets/img/whiteningLut.jpg'
17
17
  import ocrImage from '../../assets/img/jietu.png'
18
18
  import faceImage from '../../assets/img/jietu_face.png'
19
19
  import autod from '../../assets/mp3/joinmeeting.mp3'
20
+ import recordErrorAudio from '../../assets/mp3/record_error.mp3'
20
21
  import internalJoin from '../../assets/mp3/internalJoin.mp3'
21
22
  import internalLeft from '../../assets/mp3/internalLeft.mp3'
22
23
  import leftMetting from '../../assets/mp3/leftmeeting.mp3'
@@ -37,6 +38,9 @@ import 'antd/lib/radio/style'
37
38
 
38
39
  import Space from "antd/lib/space";
39
40
  import 'antd/lib/space/style'
41
+ import { Collapse } from 'antd';
42
+ import 'antd/lib/collapse/style'
43
+ const { Panel } = Collapse;
40
44
 
41
45
 
42
46
  import styled from 'styled-components';
@@ -52,6 +56,7 @@ const LEAVE_TYPE = {
52
56
  TELLER_EXIT: 1, // 坐席退出
53
57
  ROOM_DESTROYED: -1, // 房间异常
54
58
  }
59
+ let media_status = 0
55
60
  let pictureInPictureVideo
56
61
  let mix_stream
57
62
  let worker
@@ -241,6 +246,8 @@ class Video extends Component {
241
246
  microphoneList: [],
242
247
  speakerList: [],
243
248
  isModalVisibleInspection: false,
249
+ envInfo: {},
250
+ isModalVisibleEnvironment: false,
244
251
  cameraValue: '',
245
252
  microphoneValue: '',
246
253
  imStatus: false,
@@ -296,7 +303,7 @@ class Video extends Component {
296
303
  saveLog = (val) => {
297
304
  axios({
298
305
  method: 'get',
299
- baseURL: this.props.logUrl + '&message=' + encodeURIComponent(val) + '&react_hsbc_teller=2.0.4&logTime=' + Date.now() + '&mtoken=' + encodeURIComponent(this.state.rtoken) + '&roomId=' + encodeURIComponent(this.state.channelId) + '&sessionId=' + encodeURIComponent(this.state.sessionId) + '&appointmentID=' + this.props.businessNumber,
306
+ baseURL: this.props.logUrl + '&message=' + encodeURIComponent(val) + '&react_hsbc_teller=2.0.5&logTime=' + Date.now() + '&mtoken=' + encodeURIComponent(this.state.rtoken) + '&roomId=' + encodeURIComponent(this.state.channelId) + '&sessionId=' + encodeURIComponent(this.state.sessionId) + '&appointmentID=' + this.props.businessNumber,
300
307
 
301
308
  }).then(res => {
302
309
 
@@ -1183,6 +1190,25 @@ class Video extends Component {
1183
1190
  }
1184
1191
 
1185
1192
  }
1193
+
1194
+ // 敏感词提示
1195
+ let str = this.state.sensitiveTitle || ''
1196
+ if (str)
1197
+ cobj.fillStyle = 'red';
1198
+ const textWidth = Math.min(cobj.measureText(str).width, 610)
1199
+ cobj.fillRect(320 - textWidth/ 2, 26, textWidth, 32)
1200
+ cobj.textAlign = 'center';
1201
+ cobj.strokeStyle = 'white';
1202
+ cobj.lineWidth = 2
1203
+ for (let k = 0; k < str.length; k++) {
1204
+ if (cobj.measureText(str.substring(0, k + 1)).width > 610) {
1205
+ str = str.substring(0, k - 2)
1206
+ str += '...'
1207
+ break;
1208
+ }
1209
+ }
1210
+ cobj.strokeText(str, 320, 50);
1211
+ cobj.stroke();
1186
1212
  };
1187
1213
 
1188
1214
  const captureStream = canvas.captureStream();
@@ -1473,6 +1499,11 @@ class Video extends Component {
1473
1499
  videoList: this.state.videoList
1474
1500
  })
1475
1501
  }
1502
+ } else if (Mival.typeId == 10020) {
1503
+ // 录制服务异常中断,请重试
1504
+ this.messageClick('录制服务异常中断,请重试', 'error')
1505
+ let audio = new Audio(recordErrorAudio)
1506
+ audio.play()
1476
1507
  }
1477
1508
  };
1478
1509
  window.IMOpenfire = msg => {
@@ -1617,6 +1648,7 @@ class Video extends Component {
1617
1648
  if (!this.state.appId && !this.state.sessionType) {
1618
1649
  console.log('cameraValue', this.state.cameraValue)
1619
1650
  this.mpaasSig(data);
1651
+ this.showEnvDetection()
1620
1652
  } else {
1621
1653
  console.log('cameraValue', this.state.cameraValue)
1622
1654
  this.setState({
@@ -1632,6 +1664,7 @@ class Video extends Component {
1632
1664
  this.state.sessionType = false
1633
1665
  this.messageClick('获取设备失败,请检查摄像头设备是否可用或是否禁用摄像头', 'error')
1634
1666
  this.roomCallBack(2, '获取设备失败', 1)
1667
+ this.showEnvDetection()
1635
1668
  };
1636
1669
  // 建立连接成功
1637
1670
  this.test_controller.OnConnectOK = () => {
@@ -2714,6 +2747,135 @@ class Video extends Component {
2714
2747
 
2715
2748
 
2716
2749
  };
2750
+
2751
+ const that = this;
2752
+ this.asr_controller.OnGetSign = function(bizName, subBiz, uid) {
2753
+ return 'signature'
2754
+ }
2755
+ // 连接成功回调
2756
+ this.asr_controller.OnAsrConnectOK = function() {
2757
+ // 需要状态控制
2758
+ if (media_status == 1) {
2759
+ return
2760
+ }
2761
+
2762
+ const config_param = {}
2763
+ const biz_name = 'demo'
2764
+ const sub_biz = 'default'
2765
+ const uid = that.props.tellerAccount
2766
+ const sampleRate = 16000
2767
+ const procType = 8
2768
+ config_param.bizName = biz_name
2769
+ config_param.subBiz = sub_biz
2770
+ config_param.uid = uid
2771
+ config_param.sampleRate = sampleRate
2772
+ config_param.procType = procType
2773
+ config_param.mediaStreamType = 2 // 1:麦克风;2:传stream
2774
+ // console.log(test_controller.GetMediaInfo(document.getElementById('publish_video1').name).audio_)
2775
+ config_param.audio_ = that.test_controller.GetMediaInfo(document.getElementById('publish_video1').name).audio_
2776
+ config_param.idleTime = 6 // 12s没有识别结果返回通知上层
2777
+ config_param.tag = 'asr_tag0'
2778
+ that.asr_sid = that.asr_controller.TurnOnMicrophone(config_param, config_param.audio_)
2779
+ }
2780
+ // 初始化成功
2781
+ this.asr_controller.OnInitOk = function(sid, tag) {
2782
+ console.log('OnInitOk:')
2783
+ media_status = 1
2784
+ }
2785
+
2786
+ // 初始化失败
2787
+ this.asr_controller.OnInitError = function(sid, code, msg, tag) {
2788
+ console.log('OnInitError:' + msg)
2789
+ that.asr_sid = ''
2790
+ }
2791
+
2792
+ // 识别结果
2793
+ this.asr_controller.OnAsrMessage = function(msg, sid, tag, status) {
2794
+ that.asr_controller.trace(`OnAsrMessage sid=${sid},status=${status},tag=${tag}`)
2795
+ const parse = JSON.parse(msg)
2796
+ const resultValue = parse.value
2797
+ const sentence_id = parse.sentence_id
2798
+ // sentence_id相同,取最后一个值
2799
+ let text = resultValue || ''
2800
+ const sensitiveArr = that.props.sensitiveWords
2801
+ // const regex = new RegExp(sensitiveArr.join('|'), 'g') // /\#{(.+?)\}/g;
2802
+ // text = text.replace(regex, function(r) { return '<span style="background: red;">' + r + '</span>' })
2803
+ let matchArr = sensitiveArr.filter(el => text.includes(el));
2804
+ if (matchArr.length>0) {
2805
+ matchArr.forEach(el => {
2806
+ that.messageClick('检测到敏感词:' + matchArr, 'error')
2807
+ that.state.sensitiveTitle = '检测到敏感词:' + matchArr
2808
+ clearTimeout(that.state.sensitiveTitleTimer)
2809
+ that.state.sensitiveTitleTimer = setTimeout(() => {
2810
+ that.state.sensitiveTitle = ''
2811
+ }, 3000);
2812
+ if (!that.state.sensitiveRecordMap[sentence_id] || !that.state.sensitiveRecordMap[sentence_id].includes(el)){
2813
+ API.addSensitiveRecord({
2814
+ tellerId: that.props.tellerAccount,
2815
+ sessionId: that.state.sessionId,
2816
+ sensitiveWord: el
2817
+ });
2818
+ if (!that.state.sensitiveRecordMap[sentence_id]) {
2819
+ that.state.sensitiveRecordMap[sentence_id] = []
2820
+ }
2821
+ that.state.sensitiveRecordMap[sentence_id].push(el)
2822
+ }
2823
+ })
2824
+ }
2825
+ // that.AsrResultText = text
2826
+ }
2827
+
2828
+ // 停止录音回调
2829
+ this.asr_controller.OnTurnOffMicrophoneOK = function(sid, tag) {
2830
+ media_status = 0
2831
+ that.asr_controller.Disconnect()
2832
+ }
2833
+ this.asr_controller.OnAsrMsgIdle = function(sid, tag) {
2834
+ // that.AsrResultText = ''
2835
+ that.asr_controller.trace('OnAsrMsgIdle')
2836
+ }
2837
+ this.asr_controller.OnAsrDisconnectOK = function() {
2838
+ that.asr_controller.trace('Disconnect is success')
2839
+ }
2840
+
2841
+ }
2842
+ startASR() {
2843
+ // const publish_sid = document.getElementById('publish_video1').name
2844
+
2845
+ if (media_status == 1) {
2846
+ return
2847
+ }
2848
+ this.asr_controller.Connect(this.props.asrServerUrl)
2849
+ message.success({
2850
+ content: '敏感词检测已开启',
2851
+ icon: <img src={require("../../assets/img/tooltips1_pass.png").default} alt="" ></img>,
2852
+ className: 'successClassName',
2853
+ top: 200,
2854
+ // duration: 10
2855
+ })
2856
+ this.state.isAsrStart = true
2857
+ this.state.sensitiveRecordMap = {}
2858
+ // this.AsrResultText = ''
2859
+ }
2860
+ stopASR() {
2861
+ this.state.isAsrStart = false
2862
+ // this.AsrResultText = ''
2863
+ // const { publish_sid } = this.getSidsInfo()
2864
+ if (media_status == 0) {
2865
+ return
2866
+ }
2867
+ this.asr_controller.TurnOffMicrophone(this.asr_sid)
2868
+ // clearInterval(this.asrTimer)
2869
+ // if (this.localRecordStatus && this.client_record_id) {
2870
+ // test_controller.StopRecord(this.client_record_id)
2871
+ // }
2872
+ message.success({
2873
+ content: '敏感词检测已关闭',
2874
+ icon: <img src={require("../../assets/img/tooltips1_pass.png").default} alt="" ></img>,
2875
+ className: 'successClassName',
2876
+ top: 200,
2877
+ // duration: 10
2878
+ })
2717
2879
  }
2718
2880
  videoRecordCallback = async (type, status) => {
2719
2881
  try {
@@ -2799,6 +2961,10 @@ class Video extends Component {
2799
2961
  console.error(err)
2800
2962
  }
2801
2963
  }
2964
+ if (this.state.isAsrStart){
2965
+ this.stopASR()
2966
+ this.asr_controller.Disconnect()
2967
+ }
2802
2968
  if (this.state.imStatus) {
2803
2969
  console.log('disconnect断开连接')
2804
2970
  this.state.manualClose = true
@@ -2923,6 +3089,12 @@ class Video extends Component {
2923
3089
  }
2924
3090
  addToScriptClick = () => {
2925
3091
  const _dependScripts = [
3092
+ // 'http://121.196.19.70/download/asr_api.js',
3093
+ // 'http://121.196.19.70/download/reconnecting-websocket.min.js',
3094
+ // 'http://121.196.19.70/download/resampler.js',
3095
+ this.props.resourcePath + "/asr_api.js",
3096
+ this.props.resourcePath + "/reconnecting-websocket.min.js",
3097
+ this.props.resourcePath + "/resampler.js",
2926
3098
  this.props.resourcePath + "/beauty/beauty_frame_pkg.js",
2927
3099
  this.props.resourcePath + "/adapter.js",
2928
3100
  this.props.resourcePath + "/getMediaInfo.js",
@@ -2967,12 +3139,14 @@ class Video extends Component {
2967
3139
  script.onreadystatechange = () => {
2968
3140
  if (script.readyState == 'loaded' || script.readyState == 'complete') {
2969
3141
  that.test_controller = new McuController();
3142
+ that.asr_controller = new AsrController()
2970
3143
  that.mountClick()
2971
3144
  }
2972
3145
  }
2973
3146
  } else {
2974
3147
  script.onload = () => {
2975
3148
  that.test_controller = new McuController();
3149
+ that.asr_controller = new AsrController()
2976
3150
  that.mountClick()
2977
3151
  }
2978
3152
  }
@@ -2995,7 +3169,7 @@ class Video extends Component {
2995
3169
  }
2996
3170
  }
2997
3171
  componentWillMount() {
2998
- console.log('hsbc_teller_sdk', '2.0.4')
3172
+ console.log('hsbc_teller_sdk', '2.0.5')
2999
3173
  let arr = []
3000
3174
  for(let i=1;i<=12;i++){
3001
3175
  arr.push({
@@ -4553,6 +4727,114 @@ class Video extends Component {
4553
4727
  this.test_controller.GetDevices()
4554
4728
  }
4555
4729
  }
4730
+ toggleAsr = () => {
4731
+ if (this.isFileSuccuse()) {
4732
+ if (!this.state.isAsrStart){
4733
+ this.startASR()
4734
+ } else {
4735
+ this.stopASR()
4736
+ }
4737
+ }
4738
+ }
4739
+ showEnvDetection = () => {
4740
+ this.envDetection()
4741
+ this.setState({
4742
+ isModalVisibleEnvironment: true,
4743
+ })
4744
+ }
4745
+
4746
+ envDetection = () => {
4747
+ let self = this
4748
+ let envInfo = {
4749
+ batteryCharging: '未知', // 电池充电
4750
+ batteryLevel: '未知', // 电池电量
4751
+ networkStatus: '未知', // 网络状态 (已连接/未连接)
4752
+ cameraResult: this.state.cameraList.length>0 ? '合格': '不合格', // 摄像头检测
4753
+ microResult: this.state.microphoneList.length>0 ? '合格': '不合格', // 麦克风检测
4754
+ jsHeapSizeLimit: '未知', // 上下文内可用堆的最大体积
4755
+ totalJSHeapSize: '未知', // 已分配的堆体积
4756
+ usedJSHeapSize: '未知', // 当前 JS 堆活跃段(segment)的体积
4757
+ }
4758
+
4759
+ if (navigator) {
4760
+ // 电量检测
4761
+ navigator.getBattery().then(function(battery) {
4762
+ // console.log(battery)
4763
+ // 是否正在充电,yes-充电
4764
+ envInfo.batteryCharging = (battery.charging ? "正在充电" : "不在充电")
4765
+ // 当前剩余电量
4766
+ envInfo.batteryLevel = battery.level * 100 + "%"
4767
+ envInfo.batteryResult = (battery.charging )? '合格': '不合格'
4768
+ self.setState({
4769
+ envInfo: envInfo
4770
+ })
4771
+ battery.removeEventListener("chargingchange", self.envDetection);
4772
+ battery.removeEventListener("levelchange", self.envDetection);
4773
+ battery.addEventListener("chargingchange", self.envDetection);
4774
+ battery.addEventListener("levelchange", self.envDetection);
4775
+ });
4776
+
4777
+ // 网络检测
4778
+ envInfo.networkStatus = window.navigator.onLine? '已连接': '未连接'
4779
+ envInfo.networkResult = window.navigator.onLine? '合格': '不合格'
4780
+ window.removeEventListener("offline", self.envDetection);
4781
+ window.removeEventListener("online", self.envDetection);
4782
+ window.addEventListener("offline", self.envDetection);
4783
+ window.addEventListener("online", self.envDetection);
4784
+ if (navigator.connection){
4785
+ function setNetworkInfo() {
4786
+ const { rtt, downlink, effectiveType, saveData } = navigator.connection;
4787
+ // console.log(`有效网络连接类型: ${effectiveType}`);
4788
+ // console.log(`估算的下行速度/带宽: ${downlink}Mb/s`);
4789
+ // console.log(`估算的往返时间: ${rtt}ms`);
4790
+ if (!window.navigator.onLine) {envInfo.networkInfo = ''}
4791
+ else envInfo.networkInfo = `等效网络类型:${effectiveType};预估下行速度/带宽:${downlink}Mb/s;预估往返延时:${rtt}ms`
4792
+ }
4793
+ setNetworkInfo()
4794
+ navigator.connection.removeEventListener('change', self.envDetection);
4795
+ navigator.connection.addEventListener('change', self.envDetection);
4796
+ }
4797
+
4798
+ }
4799
+ // 内存检测
4800
+ if (performance.memory) {
4801
+ const filterSize = (size) => {
4802
+ if (!size) return ''
4803
+ if (size < pow1024(1)) return size + ' B'
4804
+ if (size < pow1024(2)) return (size / pow1024(1)).toFixed(2) + ' KB'
4805
+ if (size < pow1024(3)) return (size / pow1024(2)).toFixed(2) + ' MB'
4806
+ if (size < pow1024(4)) return (size / pow1024(3)).toFixed(2) + ' GB'
4807
+ return (size / pow1024(4)).toFixed(2) + ' TB'
4808
+ }
4809
+
4810
+ function pow1024(num) {
4811
+ return Math.pow(1024, num)
4812
+ }
4813
+ envInfo.jsHeapSizeLimit = filterSize(performance.memory.jsHeapSizeLimit)
4814
+ envInfo.totalJSHeapSize = filterSize(performance.memory.totalJSHeapSize)
4815
+ envInfo.usedJSHeapSize = filterSize(performance.memory.usedJSHeapSize)
4816
+ // console.log('上下文内可用堆的最大体积', envInfo.jsHeapSizeLimit)
4817
+ // console.log('已分配的堆体积', envInfo.totalJSHeapSize)
4818
+ // console.log('当前 JS 堆活跃段(segment)的体积', envInfo.usedJSHeapSize)
4819
+ envInfo.memoryResult = '合格'
4820
+ }
4821
+
4822
+
4823
+ this.setState({
4824
+ // isModalVisibleEnvironment: true,
4825
+ envInfo: envInfo
4826
+ })
4827
+ }
4828
+ handleOkEnvDetection = () => {
4829
+ this.setState({
4830
+ isModalVisibleEnvironment: false,
4831
+ })
4832
+ }
4833
+ // handleCancelEnvDetection = () => {
4834
+ // this.setState({
4835
+ // isModalVisibleEnvironment: false
4836
+ // })
4837
+ // }
4556
4838
  handleOkInspection = () => {
4557
4839
  this.setState({
4558
4840
  isModalVisibleInspection: false,
@@ -5424,6 +5706,8 @@ class Video extends Component {
5424
5706
  ocrClick={this.ocrClick}
5425
5707
  switchExternal={this.switchExternal}
5426
5708
  inspection={this.inspection}
5709
+ toggleAsr={this.toggleAsr}
5710
+ envDetection={this.showEnvDetection}
5427
5711
  beautyClick={this.beautyClick}
5428
5712
  graffiti={this.graffiti}
5429
5713
  virtualization={this.virtualization}
@@ -5785,6 +6069,51 @@ class Video extends Component {
5785
6069
 
5786
6070
  </div>
5787
6071
  </Modal>
6072
+ <Modal title="环境检测" maskClosable={false} width={650} closable={false} centered={true} visible={this.state.isModalVisibleEnvironment} footer={[
6073
+ <div key='env'>
6074
+ {/* <Button className="modelButtonCancel" onClick={this.handleCancelEnvDetection}>取消</Button> */}
6075
+ <Button className="modelButtonOk" type="primary" danger onClick={this.handleOkEnvDetection}>确定</Button>
6076
+ </div>
6077
+ ]}>
6078
+ <Collapse defaultActiveKey={['1', '2', '3', '4', '5']} ghost>
6079
+
6080
+ <Panel header={'网络检测 - ' +this.state.envInfo.networkResult} key="5" className={this.state.envInfo.networkResult=='不合格'? 'panel-error':''} >
6081
+ <p className='envClass'>网络状态:{this.state.envInfo.networkStatus}</p>
6082
+ {this.state.envInfo.networkInfo?<p className='envClass'>{this.state.envInfo.networkInfo}</p>:null}
6083
+ </Panel>
6084
+ <Panel header={'设备电量 - ' +this.state.envInfo.batteryResult} key="2" className={this.state.envInfo.batteryResult=='不合格'? 'panel-error':''}>
6085
+ <p className='envClass'>电量:{this.state.envInfo.batteryLevel}({this.state.envInfo.batteryCharging})</p>
6086
+ </Panel>
6087
+ <Panel header={'内存检测 - ' +this.state.envInfo.memoryResult} key="1" className={this.state.envInfo.memoryResult=='不合格'? 'panel-error':''}>
6088
+ <p className='envClass'>最大可用内存:{this.state.envInfo.jsHeapSizeLimit} ;当前已使用:{this.state.envInfo.usedJSHeapSize} </p>
6089
+ </Panel>
6090
+ <Panel header={'摄像头设备 - ' +this.state.envInfo.cameraResult} key="3" className={this.state.envInfo.cameraResult=='不合格'? 'panel-error':''}>
6091
+ <div >
6092
+ {
6093
+ this.state.cameraList.map((item, index) => {
6094
+ return <div key={index} className="envClass">
6095
+ {/* <input type="radio" name="camere" value={item.actionid} style={{ float: 'left' }} checked={this.state.cameraValue == item.actionid} readOnly disabled /><i></i> */}
6096
+ {item.actionname}{this.state.cameraValue == item.actionid ? '(当前设备)' : ''}
6097
+ </div>
6098
+ })
6099
+ }
6100
+ {this.state.cameraList.length == 0 ? <p className="envClass">获取不到摄像头设备,请检查</p> : null}
6101
+ </div>
6102
+ </Panel>
6103
+ <Panel header={'麦克风设备 - ' +this.state.envInfo.microResult} key="4" className={this.state.envInfo.microResult=='不合格'? 'panel-error':''}>
6104
+ <div>
6105
+ {
6106
+ this.state.microphoneList.map((item, index) => {
6107
+ return <div key={index} className="envClass">
6108
+ {item.actionname}{this.state.microphoneValue == item.actionid ? '(当前设备)' : ''}
6109
+ </div>
6110
+ })
6111
+ }
6112
+ {this.state.cameraList.length == 0 ? <p className="envClass">获取不到麦克风设备,请检查</p> : null}
6113
+ </div>
6114
+ </Panel>
6115
+ </Collapse>
6116
+ </Modal>
5788
6117
  <video className="mixedvideo" id="mixedvideo" autoPlay muted={true} width="0" height="0"></video>
5789
6118
  <video className="mixedvideo" id="manedvideo" autoPlay width="0" height="0"></video>
5790
6119
  <video className="mixedvideo" id="video30" autoPlay width="0" height="0"></video>
@@ -5806,7 +6135,7 @@ Video.defaultProps = {
5806
6135
  callbackUrl: 'http://182.92.184.31:8720/hsbc/callback',
5807
6136
  // roomServerUrl: 'wss://app.uat.dsp.hsbcfts.com.cn/mpaas/mrtc/ws',
5808
6137
  roomServerUrl: 'wss://mrtc.mpaas.cn-hangzhou.aliyuncs.com/ws',
5809
-
6138
+ asrServerUrl: 'wss://ismis.alipay.com/ws',
5810
6139
  resourcePath: 'https://counter-web.leimondata.cn:7199',
5811
6140
  // resourcePath: 'https://zuul.uat.dsp.hsbcfts.com.cn/wealth/js/',
5812
6141
  prohbiitPrompt: '当前无客户',
@@ -5818,6 +6147,7 @@ Video.defaultProps = {
5818
6147
  fontFamily: 'auto',
5819
6148
  menus: ['BOARD', 'SHARE', 'FRIES', 'OCR', 'INVITE', 'PIP', 'BEAUTY', 'GRAFFITI', 'BACKGROUND'],
5820
6149
  customLeaveRoom: '客户离开房间',
6150
+ sensitiveWords: ['保本保息', '无风险'],
5821
6151
  meetingInfo: {
5822
6152
  title: '--',
5823
6153
  host: '--',
@@ -328,6 +328,16 @@
328
328
  padding: 6px 13px;
329
329
  }
330
330
  }
331
+ .envClass {
332
+ margin-bottom: 0;
333
+ padding-left: 1.25rem;
334
+ }
335
+ .ant-collapse > .ant-collapse-item > .ant-collapse-header{
336
+ font-weight: bold;
337
+ }
338
+ .ant-collapse > .ant-collapse-item.panel-error > .ant-collapse-header{
339
+ color: red;
340
+ }
331
341
  .voiceClass{
332
342
  width: 25Px;
333
343
  height: 25.3Px;