webview.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <!-- 网页加载 -->
  2. <template>
  3. <view class="webview_page">
  4. <web-view :src="url" />
  5. </view>
  6. </template>
  7. <script setup>
  8. import { onLoad } from '@dcloudio/uni-app';
  9. import { ref, computed, onUnmounted } from 'vue';
  10. import taskApi from '@/common/api/member/task'
  11. import sheep from '@/common'
  12. const taskFormInfo = computed(() => sheep.$store('task').taskFormInfo)
  13. const url = ref('');
  14. const webphone = ref(false)
  15. onLoad(async (options) => {
  16. url.value = decodeURIComponent(options.url)
  17. webphone.value = !!options.webphone
  18. window.addEventListener('message', messageHandler, false)
  19. })
  20. onUnmounted(()=>{
  21. uni.hideLoading()
  22. window.removeEventListener('message', messageHandler, false)
  23. })
  24. function messageHandler(event){
  25. console.log('Received message from iframe:', event.data);
  26. if(event.data.type==='hangup'){
  27. uni.redirectTo({
  28. url: '/pages/task/speechConfirm',
  29. })
  30. }
  31. if(event.data.type==='ring'){
  32. uni.hideLoading()
  33. }
  34. if(event.data.type==='reg'){
  35. initWebphone()
  36. }
  37. }
  38. async function initWebphone(){
  39. if(webphone.value){
  40. uni.showLoading({
  41. title: '呼叫中...',
  42. mask: true,
  43. fail: () => {
  44. uni.hideLoading()
  45. }
  46. })
  47. const { code, data } = await taskApi.addTest({
  48. typeId:taskFormInfo.value.typeId,
  49. taskName:taskFormInfo.value.name
  50. })
  51. if (code === 1) {
  52. sheep.$store('task').updateTaskFormInfo({
  53. callUserTestId:data.id
  54. })
  55. var iframeEl = document.querySelector("iframe")
  56. if (iframeEl) {
  57. iframeEl.allow = 'microphone *;camera *'
  58. }
  59. }else{
  60. sheep.$router.back()
  61. }
  62. }
  63. }
  64. </script>
  65. <style lang="scss" scoped>
  66. :deep() {
  67. uni-page-body{
  68. background-color: #222222 !important;
  69. }
  70. }
  71. </style>