@sdk185/sip-phone-sdk26 0.2.4 → 0.2.6

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.
@@ -1,11 +1,7 @@
1
1
  <!-- 主模板:视频通话界面 -->
2
2
  <template>
3
3
  <!-- 主容器:使用flex垂直布局,内容居中对齐 -->
4
- <div class="d-flex flex-column align-center justify-space-between sip-call-main">
5
- <!-- 顶部提示信息 -->
6
- <div style="position: absolute; top: 0; left: 0; background: transparent; color: #FFFFFF; width: 100%; z-index: 9999; height: 0; padding-top: 10px; padding-left: 10px;">
7
- <!-- {{ prompt }} -->
8
- </div>
4
+ <div class="phone-nmain d-flex flex-column align-center justify-space-between sip-call-main">
9
5
  <!-- 位置信息显示区域 -->
10
6
  <div class="location-wrapper" v-if="showLocation">
11
7
  <!-- 显示经纬度和海拔信息 -->
@@ -14,21 +10,19 @@
14
10
  <p>ALT: {{altitude}}</p>
15
11
  </div>
16
12
  <!-- 通话信息显示区域 -->
17
- <div class="d-flex flex-column align-center" v-if="!miniMode && !showDialPad" style="margin-top:160px;">
13
+ <div class="d-flex flex-column align-center call-btn" v-if="!miniMode && !showDialPad">
18
14
  <!-- 应用logo -->
19
- <!-- <img class="elevation-4" alt="logo" :src="require('@/assets/normal-logo.png')" width="72" height="72" style="border-radius: 50%;"/> -->
20
- <img class="elevation-4" alt="logo" src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/normal-logo.png" width="72" height="72" style="border-radius: 50%;"/>
15
+ <img class="elevation-4 call-img" alt="logo" src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/normal-logo.png"/>
21
16
  <!-- 通话状态提示 -->
22
- <p class="mt-6 mb-0" style="font-size: 16px; color: #FFFFFF;">{{callPrompt}}</p>
17
+ <p class="mt-6 mb-0 call-label" >{{callPrompt}}</p>
23
18
  </div>
24
-
25
19
  <!-- 功能按钮区域 -->
26
- <div class="pr-10 pl-10 btn-group" v-if="!miniMode && !showDialPad">
20
+ <div class="pr-10 pl-10 " v-if="!miniMode && !showDialPad">
27
21
  <v-row>
28
22
  <v-col cols="12" class="text-center">
29
23
  <!-- 通话计时器 -->
30
24
  <div
31
- v-show="isCalling && showHangup" style="font-size: 14px;margin-top: -50px; color: #FFFFFF;">
25
+ v-show="isCalling && showHangup" class="call-duration">
32
26
  视频时长 {{duration}}
33
27
  </div>
34
28
  </v-col>
@@ -37,46 +31,23 @@
37
31
  <v-row class="d-flex justify-space-around mb-10">
38
32
  <!-- 取消按钮 - 用于微信公众号调用的场景 -->
39
33
  <v-btn
40
- style="opacity: 1; background: transparent; box-shadow: none; position: relative; margin-top: -200px;"
34
+ class="cancel-btn"
35
+ style=" "
41
36
  v-show="!isCalling && !needDial"
42
37
  @click="onHangupBtnClick"
43
38
  >
44
- <!-- <img :src="require('@/assets/call-down.png')" alt="hangup" width="80" height="80"> -->
45
- <img src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/call-down.png" alt="hangup" width="80" height="80">
46
-
47
- <span style="position: absolute; top: 78px; color: #FFFFFF;">取消</span>
39
+ <img class="cancel-img" src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/call-down.png" alt="hangup" >
40
+ <span class="cancel-label">取消</span>
48
41
  </v-btn>
49
-
50
- <!-- 原拨号按钮已注释,改为由微信公众号调用 -->
51
- <!-- <v-btn
52
- large
53
- fab
54
- color="#FFFFFF"
55
- v-show="!isCalling && !needDial"
56
- @click="onMakeCallBtnClick"
57
- >
58
- <v-icon>mdi-phone</v-icon>
59
- <span class="btn-label">拨号</span>
60
- </v-btn> -->
61
-
62
- <!-- 麦克风静音/取消静音按钮 -->
63
- <!-- 当正在通话且显示挂断按钮时显示 -->
64
- <!-- 点击时触发onMuteBtnClick方法,传入'audio'参数 -->
65
42
  <v-btn
66
43
  large
67
44
  v-show="isCalling && showHangup"
68
45
  @click="onMuteBtnClick('audio')"
69
- class="custom-mute-btn"
46
+ class="custom-mute-btn btn-box"
70
47
  >
71
- <!-- 静音状态显示开启的麦克风图标 -->
72
- <!-- <img v-if="!isAudioMute" :src="require('@/assets/adudio-open.png')" width="55" height="80">
73
- <img v-else :src="require('@/assets/audio-close.png')" width="55" height="80"> -->
74
- <img v-if="!isAudioMute" src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/adudio-open.png" width="55" height="80">
75
- <img v-else src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/adudio-close.png" width="55" height="80">
76
- <!-- 显示当前状态的文字提示 -->
77
- <!-- <span class="btn-label">{{ isAudioMute ? '取消静音' : '静音' }}</span> -->
48
+ <img class="img-open-close" v-if="!isAudioMute" src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/adudio-open.png" >
49
+ <img class="img-open-close" v-else src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/adudio-close.png" >
78
50
  </v-btn>
79
-
80
51
  <!-- 摄像头开关按钮 -->
81
52
  <v-btn
82
53
  large
@@ -84,26 +55,10 @@
84
55
  @click="onMuteBtnClick('video')"
85
56
  class="custom-mute-btn"
86
57
  >
87
- <!-- <img v-if="!isVideoMute" :src="require('@/assets/camera-open.png')" alt="mic-on" width="55" height="80">
88
- <img v-else :src="require('@/assets/camera-close.png')" alt="mic-off" width="55" height="80"> -->
89
- <img v-if="!isVideoMute" src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/camera-open.png" alt="mic-on" width="55" height="80">
90
- <img v-else src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/camera-close.png" alt="mic-off" width="55" height="80">
58
+ <img class="img-open-close" v-if="!isVideoMute" src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/camera-open.png" alt="mic-on">
59
+ <img class="img-open-close" v-else src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/camera-close.png" alt="mic-off">
91
60
  </v-btn>
92
61
 
93
- <!-- 显示/隐藏本地视频按钮 -->
94
- <!-- <v-btn
95
- style="opacity: .6"
96
- color="blue-grey"
97
- fab
98
- large
99
- dark
100
- v-show="isCalling && showHangup"
101
- @click="onShowLocalVideoBtnClick"
102
- >
103
- <v-icon v-if="localVideo.show">mdi-monitor</v-icon>
104
- <v-icon v-else>mdi-monitor-multiple</v-icon>
105
- <span class="btn-label">{{ localVideo.show ? '隐藏本地' : '显示本地' }}</span>
106
- </v-btn> -->
107
62
  </v-row>
108
63
 
109
64
  <!-- 第二行按钮组 -->
@@ -114,14 +69,11 @@
114
69
  v-show="isCalling && showHangup"
115
70
  @click="onHangupBtnClick"
116
71
  >
117
- <!-- <img :src="require('@/assets/call-down.png')" alt="hangup" width="80" height="80"> -->
118
- <img src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/call-down.png" alt="hangup" width="80" height="80">
119
- <span style="position: absolute; top: 73px; color: #FFFFFF;">挂断</span>
72
+ <img class="hangup-img" src="https://kefu-gm-jc-dat.boc-samsunglife.cn/static/call-down.png" alt="hangup">
73
+ <span class="hangup-label">挂断</span>
120
74
  </v-btn>
121
-
122
75
  <!-- 切换摄像头按钮 -->
123
76
  <v-btn
124
- style="opacity: .6; position: absolute; left: calc(50% + 80px);"
125
77
  v-show="isCalling && showHangup"
126
78
  @click="onSwitchCameraBtnClick"
127
79
  class="transparent-btn"
@@ -130,7 +82,6 @@
130
82
  </v-btn>
131
83
  </v-row>
132
84
  </div>
133
-
134
85
  <!-- 视频容器区域 -->
135
86
  <v-expand-transition>
136
87
  <div class="sip-call-wrapper" v-show="showVideoCt" @click="onSipCallClick">
@@ -164,7 +115,7 @@
164
115
  ref="remoteVideo"
165
116
  class="sip-call-video"
166
117
  style="object-fit: contain;"
167
- controls
118
+
168
119
  ></video>
169
120
  </vue-draggable-resizable>
170
121
  <!-- 本地视频窗口 -->
@@ -194,28 +145,11 @@
194
145
  x5-video-orientation="h5"
195
146
  ref="localVideo"
196
147
  class="sip-call-video"
197
- controls
148
+
198
149
  ></video>
199
150
  </vue-draggable-resizable>
200
-
201
- <!-- 视频控制区域 -->
202
- <!-- <template v-if="!miniMode">
203
- 通话计时器
204
- <span class="video-timer">
205
- <img :src="require('@/assets/icon_Recording_Fill_Red_Active.svg')" alt="icon" width="24" height="24" class="mr-2">
206
- {{duration}}
207
- </span>
208
-
209
- 全屏切换按钮
210
- <v-btn class="camera-switch-btn" dark text x-small width="24" height="24" min-width="24" @click="onChangeVideoFullScreenBtnClick">
211
- <v-icon>mdi-box-shadow</v-icon>
212
- <span class="btn-label">全屏</span>
213
- </v-btn>
214
- </template> -->
215
-
216
151
  </div>
217
152
  </v-expand-transition>
218
-
219
153
  <!-- 拨号盘组件 -->
220
154
  <v-expand-transition>
221
155
  <dial-panel-mini
@@ -228,12 +162,10 @@
228
162
  ref="dialPanelMini"
229
163
  />
230
164
  </v-expand-transition>
231
-
232
165
  <!-- 音频播放器(用于播放提示音) -->
233
166
  <v-bottom-sheet v-model="showAudioPlayer" hide-overlay>
234
167
  <audio :src="require('@/assets/outgoing-call2.mp3')" loop ref="audioPlayer"></audio>
235
168
  </v-bottom-sheet>
236
-
237
169
  <!-- 提示信息弹窗 -->
238
170
  <v-snackbar v-model="showSnackbar" :timeout="2000">
239
171
  {{snackbarText}}
@@ -247,7 +179,7 @@ import SipMix from '@/libs/SIP_MIX_WEB'
247
179
  import DialPanelMini from '@/components/DialPanelMini'
248
180
  import VueDraggableResizable from 'vue-draggable-resizable'
249
181
  import { closeStream } from '@/libs/tool'
250
-
182
+ import jsNative from 'js-native-n22'
251
183
 
252
184
  export default {
253
185
  name: 'MobilePhone',
@@ -321,7 +253,7 @@ export default {
321
253
  miniMode: false,
322
254
  dialNum: '',
323
255
 
324
- controls: '',
256
+ //controls: '',
325
257
 
326
258
  isAudioMute: false,
327
259
  isVideoMute: false,
@@ -366,13 +298,13 @@ export default {
366
298
  },
367
299
 
368
300
  watch: {
369
- isCalling (is) {
370
- if (is) {
371
- this.startDurationCount()
372
- } else {
373
- this.stopDurationCount()
374
- }
375
- },
301
+ // isCalling (is) {
302
+ // if (is) {
303
+ // this.startDurationCount()
304
+ // } else {
305
+ // this.stopDurationCount()
306
+ // }
307
+ // },
376
308
  callId (id) {
377
309
  this.lastCallId = id || this.lastCallId
378
310
  },
@@ -400,6 +332,25 @@ export default {
400
332
  },
401
333
 
402
334
  methods: {
335
+ handleAndroidParams(val){
336
+ console.log("handleAndroidParamsvalvalval", val)
337
+ jsNative.bridge.callhandler('webRTC', '', (result) => {
338
+ console.log("%c调用原生返回成功", "color: green", result)
339
+ console.log("c调用原生返回成功valval", val)
340
+ if (!result.error) {
341
+ // success && success(result.content)
342
+ console.log('webRTC调用成功', result.content)
343
+ console.log('webRTC调用成功valval', val)
344
+ this.handleWechatParams(val);
345
+ } else {
346
+ // fail && fail(result.content)
347
+ console.log('webRTC调用失败', result.content)
348
+ console.log('webRTC调用失败valval', val)
349
+ }
350
+ })
351
+ },
352
+
353
+
403
354
  // 处理微信公众号参数
404
355
  handleWechatParams(val) {
405
356
  // ===== 测试代码开始 =====
@@ -410,7 +361,7 @@ export default {
410
361
  // // 获取参数值
411
362
  // const calledNum = urlParams.get('calledNum');
412
363
  // const callDataStr = urlParams.get('callData');
413
- console.log('测试模式:使用模拟参数');
364
+ console.log('e行销传过来的参数',val);
414
365
 
415
366
  // ===== 原始代码(已注释) ===== // 用于微信公众号 此方式是获取url参数;父子组件传值可以使用props
416
367
  // const urlParams = new URLSearchParams(window.location.search);
@@ -420,7 +371,7 @@ export default {
420
371
  const calledNum = val.calledNum;
421
372
  const callDataStr = val.callData;
422
373
 
423
- console.log('测试模式:使用模拟参数');
374
+ // console.log('测试模式:使用模拟参数');
424
375
 
425
376
  if (calledNum) {
426
377
  // 存储被叫号码
@@ -591,12 +542,17 @@ export default {
591
542
  }
592
543
 
593
544
  const params = { target: this.dialNum }
545
+ console.log('paramsparams Data', params)
546
+ console.log('this.callData Data', this.callData)
547
+ console.log('window.config.videoParams', window.config.videoParams)
594
548
  if (this.callType === 'videoOnly') {
549
+ console.log('videoOnly')
595
550
  params.video = Object.assign({
596
551
  facingMode: 'user'
597
552
  }, window.config.videoParams)
598
553
  params.audio = false
599
554
  } else if (this.callType === 'video') {
555
+ console.log('video')
600
556
  params.video = Object.assign({
601
557
  facingMode: 'user'
602
558
  }, window.config.videoParams)
@@ -608,6 +564,7 @@ export default {
608
564
 
609
565
  if (this.callData) {
610
566
  params.callData = this.callData
567
+ console.log('Call Da1ta', this.callData)
611
568
  }
612
569
 
613
570
  // console.info('Call Params', params)
@@ -629,7 +586,6 @@ export default {
629
586
  }
630
587
 
631
588
  },
632
-
633
589
  onHangupBtnClick () {
634
590
  this.sipMix.hangup();
635
591
  // this.$emit('hangup-event', { imType: 0 });// 通知父组件
@@ -706,26 +662,67 @@ export default {
706
662
  }, 1000)
707
663
  },
708
664
 
665
+ // async onSwitchCameraBtnClick() {
666
+ // const list = await navigator.mediaDevices.enumerateDevices()
667
+ // console.warn(list)
668
+ // let videoOption = {
669
+ // facingMode: 'user',
670
+ // }
671
+ // if (this.cameraType === 'front') {
672
+ // videoOption = {
673
+ // facingMode: { exact: 'environment' }
674
+ // }
675
+ // }
676
+ // Object.assign(videoOption, window.config.videoParams)
677
+
678
+ // const stream = await navigator.mediaDevices.getUserMedia({
679
+ // video: videoOption,
680
+ // audio: false
681
+ // })
682
+ // if (stream) {
683
+ // this.cameraType = this.cameraType === 'front' ? 'back' : 'front'
684
+ // this.$refs.localVideo.srcObject = stream
685
+ // this.sipMix.changeLocalVideoTrack({stream})
686
+ // }
687
+ // },
709
688
  async onSwitchCameraBtnClick() {
689
+ // 1. 获取当前设备列表(包含音频/视频输入设备)
710
690
  const list = await navigator.mediaDevices.enumerateDevices()
711
- console.warn(list)
712
- let videoOption = {
713
- facingMode: 'user',
691
+ console.warn(list) // 调试用:打印设备列表,可看到摄像头设备信息
692
+
693
+ // 2. 初始化摄像头配置(默认前置摄像头)
694
+ let videoOption = {
695
+ facingMode: 'user', // user = 前置摄像头(面向用户)
714
696
  }
697
+
698
+ // 3. 切换摄像头配置:如果当前是前置,切换为后置
715
699
  if (this.cameraType === 'front') {
716
700
  videoOption = {
717
- facingMode: { exact: 'environment' }
701
+ facingMode: { exact: 'environment' } // environment = 后置摄像头(面向环境)
718
702
  }
719
703
  }
704
+
705
+ // 4. 合并全局视频参数(比如分辨率、帧率等配置)
720
706
  Object.assign(videoOption, window.config.videoParams)
721
707
 
708
+ // 5. 重新请求摄像头媒体流(只请求视频,不请求音频)
722
709
  const stream = await navigator.mediaDevices.getUserMedia({
723
710
  video: videoOption,
724
711
  audio: false
725
712
  })
713
+
714
+ // 6. 流获取成功后执行核心操作
726
715
  if (stream) {
716
+ // ① 切换摄像头状态标记(front ↔ back)
727
717
  this.cameraType = this.cameraType === 'front' ? 'back' : 'front'
718
+
719
+ // ② 更新本地video标签的流(这是视频画面显示的核心)
728
720
  this.$refs.localVideo.srcObject = stream
721
+
722
+ // 本次新增修改点:强制显示本地视频
723
+ this.localVideo.show = true
724
+
725
+ // ③ 同步新的视频流到通话链路(让对方也看到切换后的画面)
729
726
  this.sipMix.changeLocalVideoTrack({stream})
730
727
  }
731
728
  },
@@ -798,6 +795,7 @@ export default {
798
795
  // 处理通话失败事件
799
796
  this.sipMix.on('failed', (e) => {
800
797
  console.warn('通话失败', e)
798
+ this.stopDurationCount() // 确保停止计时器 0105
801
799
  this.dealCallEndOrFail() // 清理通话相关状态
802
800
  this.callPrompt = this.$t('cancelled') // 显示通话已取消提示
803
801
 
@@ -817,6 +815,7 @@ export default {
817
815
  // 处理通话结束事件(对方挂断或通话正常结束)
818
816
  this.sipMix.on('ended', () => {
819
817
  console.warn('通话结束')
818
+ this.stopDurationCount() // 确保停止计时器 0105
820
819
  this.dealCallEndOrFail() // 清理通话相关状态
821
820
  this.callPrompt = this.$t('hangedUp') // 显示通话已挂断提示
822
821
 
@@ -834,14 +833,18 @@ export default {
834
833
 
835
834
  this.sipMix.on('localStream', async (stream, info) => {
836
835
  console.info('localStream', stream, info)
836
+ this.$refs.localVideo.srcObject = stream
837
+ if(this.localVideo.show) {
838
+ return
839
+ }
837
840
  this.localVideo.w = this.clientWidth
838
841
  this.localVideo.h = this.clientHeight
839
842
  this.localVideo.draggable = false
840
843
  this.showVideoCt = true
841
844
  this.localVideo.show = true
842
845
 
843
- await this.$nextTick()
844
- this.$refs.localVideo.srcObject = stream
846
+ // await this.$nextTick()
847
+ // this.$refs.localVideo.srcObject = stream
845
848
  })
846
849
 
847
850
  this.sipMix.on('remoteStream', (stream, info) => {
@@ -904,6 +907,7 @@ export default {
904
907
  })
905
908
 
906
909
  this.sipMix.on('confirmed', () => {
910
+ this.startDurationCount(); // 通话完全建立后开始计时 0105
907
911
  this.startSendPosition()
908
912
  })
909
913
 
@@ -989,6 +993,11 @@ export default {
989
993
  })
990
994
 
991
995
  setTimeout(() => {
996
+ // this.miniMode = false;// 调试用
997
+ // this.showDialPad = false;// 调试用
998
+ // this.isCalling = true;// 调试用
999
+ // this.needDial = false;// 调试用
1000
+ // this.showHangup = true;// 调试用
992
1001
  const {clientHeight, clientWidth} = window.document.body
993
1002
  this.clientHeight = clientHeight
994
1003
  this.clientWidth = clientWidth
@@ -1010,158 +1019,221 @@ export default {
1010
1019
  @import './vuetify.css';
1011
1020
  </style> -->
1012
1021
  <style lang="scss">
1013
- .sip-call-main {
1014
- background-color: #737778;
1015
- padding: 25% 10px 20% !important;
1016
- width: 100vw;
1017
- height: 100vh;
1018
- overflow: hidden;
1019
- }
1020
-
1021
- .sip-call-wrapper {
1022
- position: absolute;
1023
- left: 0;
1024
- top: 0;
1025
- width: 100vw;
1026
- height: 100vh;
1027
- z-index: 100;
1028
- }
1022
+ .phone-nmain{
1023
+ background-color: #737778;
1024
+ padding: 25% 10px 20% !important;
1025
+ width: 100vw;
1026
+ height: 100vh;
1027
+ overflow: hidden;
1028
+
1029
+
1030
+ .sip-call-wrapper {
1031
+ position: absolute;
1032
+ left: 0;
1033
+ top: 0;
1034
+ width: 100vw;
1035
+ height: 100vh;
1036
+ z-index: 100;
1037
+ }
1029
1038
 
1030
- .btn-group {
1031
- width: 100%;
1032
- position: absolute;
1033
- bottom: 150px;
1034
- z-index: 4000;
1035
- }
1039
+ .sip-btn-group {
1040
+ width: 100%;
1041
+ position: absolute;
1042
+ //bottom: 250px;
1043
+ bottom: 25%;
1044
+ z-index: 4000;
1045
+ }
1036
1046
 
1037
- @media screen and (min-width: 1024px) {
1038
- .btn-group {
1039
- position: absolute;
1040
- bottom: 80px;
1041
- width: 640px;
1042
- z-index: 4000;
1043
- }
1044
- }
1047
+ @media screen and (min-width: 1024px) {
1048
+ .sip-btn-group {
1049
+ position: absolute;
1050
+ bottom: 40px;
1051
+ width: 320px;
1052
+ z-index: 4000;
1053
+ }
1054
+ }
1045
1055
 
1046
- .sip-call-video {
1047
- width: 100%;
1048
- height: 100%;
1049
- object-fit: cover;
1050
- background-color: #000000;
1051
- }
1056
+ .sip-call-video {
1057
+ width: 100%;
1058
+ height: 100%;
1059
+ object-fit: cover;
1060
+ background-color: #000000;
1061
+ }
1052
1062
 
1053
- .video-panel {
1054
- // touch-action: none;
1055
- position: absolute;
1056
- display: flex;
1057
- flex-direction: column;
1058
- justify-content: space-around;
1059
- align-items: center;
1060
- }
1063
+ .video-panel {
1064
+ position: absolute;
1065
+ display: flex;
1066
+ flex-direction: column;
1067
+ justify-content: space-around;
1068
+ align-items: center;
1069
+ }
1061
1070
 
1062
- .video-timer {
1063
- background-color: rgba(255,255,255,0.80);
1064
- position: absolute;
1065
- top: 40px;
1066
- left: 16px;
1067
- font-size: 14px;
1068
- font-weight: bold;
1069
- padding: 2px 8px 2px 6px;
1070
- border-radius: 12px;
1071
- z-index: 2000;
1072
- display: flex;
1073
- justify-content: space-around;
1074
- align-items: center;
1075
- }
1071
+ .video-timer {
1072
+ background-color: rgba(255,255,255,0.80);
1073
+ position: absolute;
1074
+ top: 40px;
1075
+ left: 16px;
1076
+ font-size: 14px;
1077
+ font-weight: bold;
1078
+ padding: 2px 8px 2px 6px;
1079
+ border-radius: 12px;
1080
+ z-index: 2000;
1081
+ display: flex;
1082
+ justify-content: space-around;
1083
+ align-items: center;
1084
+ }
1076
1085
 
1077
- .video-switch-btn {
1078
- position: absolute !important;
1079
- top: 40px;
1080
- right: 80px;
1081
- z-index: 2000;
1082
- img {
1083
- background-color: #000000;
1084
- border-radius: 6px;
1085
- border: 1px solid #000000;
1086
- }
1087
- }
1086
+ .video-switch-btn {
1087
+ position: absolute !important;
1088
+ top: 40px;
1089
+ right: 80px;
1090
+ z-index: 2000;
1091
+ img {
1092
+ background-color: #000000;
1093
+ border-radius: 6px;
1094
+ border: 1px solid #000000;
1095
+ }
1096
+ }
1088
1097
 
1089
- .video-mini-mode {
1090
- position: absolute !important;
1091
- top: 40px;
1092
- right: 48px;
1093
- z-index: 2000;
1094
- }
1098
+ .video-mini-mode {
1099
+ position: absolute !important;
1100
+ top: 40px;
1101
+ right: 48px;
1102
+ z-index: 2000;
1103
+ }
1095
1104
 
1096
- .camera-switch-btn {
1097
- position: absolute !important;
1098
- top: 40px;
1099
- right: 16px;
1100
- z-index: 2000;
1101
- }
1105
+ .camera-switch-btn {
1106
+ position: absolute !important;
1107
+ top: 40px;
1108
+ right: 16px;
1109
+ z-index: 2000;
1110
+ }
1102
1111
 
1103
- .video-normal-mode {
1104
- position: absolute !important;
1105
- top: 16px;
1106
- right: 16px;
1107
- z-index: 2000;
1108
- }
1112
+ .video-normal-mode {
1113
+ position: absolute !important;
1114
+ top: 16px;
1115
+ right: 16px;
1116
+ z-index: 2000;
1117
+ }
1109
1118
 
1110
- .location-wrapper {
1111
- position: absolute;
1112
- top: 0;
1113
- right: 0;
1114
- width: 150px;
1115
- background-color: #00000055;
1116
- color: #FFFFFF;
1117
- padding: 6px;
1118
- p {
1119
- font-size: 12px;
1120
- margin: 0;
1121
- padding: 0;
1122
- width: 100%;
1123
- white-space: nowrap;
1124
- text-overflow: ellipsis;
1119
+ .location-wrapper {
1120
+ position: absolute;
1121
+ top: 0;
1122
+ right: 0;
1123
+ width: 150px;
1124
+ background-color: #00000055;
1125
+ color: #FFFFFF;
1126
+ padding: 6px;
1127
+ p {
1128
+ font-size: 12px;
1129
+ margin: 0;
1130
+ padding: 0;
1131
+ width: 100%;
1132
+ white-space: nowrap;
1133
+ text-overflow: ellipsis;
1134
+ }
1135
+ }
1125
1136
  }
1126
- }
1127
1137
  </style>
1128
- <style scoped>
1129
- .custom-mute-btn {
1130
- background: transparent !important;
1131
- box-shadow: none !important;
1132
- z-index: 9999 !important;
1133
- min-width: 0 !important;
1134
- width: auto !important;
1135
- height: auto !important;
1136
- padding: 0 !important;
1137
- margin: 0 !important;
1138
- }
1138
+ <style scoped lang="scss">
1139
+ .phone-nmain{
1140
+ .custom-mute-btn {
1141
+ background: transparent !important;
1142
+ box-shadow: none !important;
1143
+ z-index: 9999 !important;
1144
+ min-width: 0 !important;
1145
+ width: auto !important;
1146
+ height: auto !important;
1147
+ padding: 0 !important;
1148
+ margin: 0 !important;
1149
+ }
1139
1150
 
1140
- /* 移除按钮悬停和激活状态的背景色 */
1141
- .custom-mute-btn::before {
1142
- background-color: transparent !important;
1143
- opacity: 0 !important;
1144
- }
1151
+ /* 移除按钮悬停和激活状态的背景色 */
1152
+ .custom-mute-btn::before {
1153
+ background-color: transparent !important;
1154
+ opacity: 0 !important;
1155
+ }
1145
1156
 
1146
- /* 移除按钮的点击效果 */
1147
- .custom-mute-btn:hover::before,
1148
- .custom-mute-btn:focus::before,
1149
- .custom-mute-btn:active::before {
1150
- opacity: 0 !important;
1151
- }
1157
+ .btn-box{
1158
+ padding: 0 90px !important; // 0113
1159
+ margin-left: -100px !important; // 0113
1160
+ }
1161
+ /* 移除按钮的点击效果 */
1162
+ .custom-mute-btn:hover::before,
1163
+ .custom-mute-btn:focus::before,
1164
+ .custom-mute-btn:active::before {
1165
+ opacity: 0 !important;
1166
+ }
1167
+
1168
+ .transparent-btn {
1169
+ background: transparent !important;
1170
+ box-shadow: none !important;
1171
+ min-width: 0 !important;
1172
+ width: auto !important;
1173
+ height: auto !important;
1174
+ padding: 0 !important;
1175
+ margin: 0 !important;
1176
+ /* opacity: .6 !important; */
1177
+ position: absolute !important;
1178
+ left: calc(50% + 80px) !important;
1179
+ color: #FFFFFF !important;
1180
+ }
1181
+ .transparent-btn::before {
1182
+ background-color: transparent !important;
1183
+ opacity: 0 !important;
1184
+ }
1185
+
1186
+ .call-btn{
1187
+ /* margin-top:160px; */
1188
+ position: relative;
1189
+ top: 0%;
1190
+ }
1191
+ .call-img{
1192
+ width:100px;
1193
+ height:100px;
1194
+ border-radius: 50%;
1195
+ }
1152
1196
 
1153
- .transparent-btn {
1154
- background: transparent !important;
1155
- box-shadow: none !important;
1156
- min-width: 0 !important;
1157
- width: auto !important;
1158
- height: auto !important;
1159
- padding: 0 !important;
1160
- margin: 0 !important;
1161
- }
1162
- .transparent-btn::before {
1163
- background-color: transparent !important;
1164
- opacity: 0 !important;
1165
- }
1166
1197
 
1198
+ .call-label{
1199
+ font-size: 16px;
1200
+ color: #FFFFFF
1201
+ }
1202
+
1203
+ .cancel-btn{
1204
+ opacity: 1;
1205
+ background: transparent !important;
1206
+ box-shadow: none !important;
1207
+ position: relative !important;
1208
+ margin-top: -50px !important;
1209
+ }
1210
+ .cancel-img {
1211
+ width: 80px;
1212
+ height: 80px;
1213
+ }
1214
+ .cancel-label{
1215
+ top: 78px;
1216
+ position: absolute; color: #FFFFFF;
1217
+ font-size: 16px;
1218
+ }
1219
+
1220
+
1221
+ .call-duration{
1222
+ font-size: 14px;margin-top: -12.5px; color: #FFFFFF;
1223
+ }
1224
+ .hangup-img{
1225
+ width: 80px;
1226
+ height: 80px;
1227
+ }
1228
+ .hangup-label{
1229
+ top: 73px;
1230
+ position: absolute; color: #FFFFFF;
1231
+ font-size: 14px;
1232
+ }
1233
+
1234
+ .img-open-close{
1235
+ width: 55px;
1236
+ height: 80px;
1237
+ }
1238
+ }
1167
1239
  </style>