6486bf7a11119690746f24f5ca3cba43.json 61 KB

1
  1. {"remainingRequest":"D:\\dm\\HHHT-fbky\\hhht_fbky\\node_modules\\babel-loader\\lib\\index.js!D:\\dm\\HHHT-fbky\\hhht_fbky\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\dm\\HHHT-fbky\\hhht_fbky\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\dm\\HHHT-fbky\\hhht_fbky\\src\\components\\HelloWorld.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\dm\\HHHT-fbky\\hhht_fbky\\src\\components\\HelloWorld.vue","mtime":1741075589528},{"path":"D:\\dm\\HHHT-fbky\\hhht_fbky\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1740991511838},{"path":"D:\\dm\\HHHT-fbky\\hhht_fbky\\node_modules\\babel-loader\\lib\\index.js","mtime":1740991520080},{"path":"D:\\dm\\HHHT-fbky\\hhht_fbky\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1740991511838},{"path":"D:\\dm\\HHHT-fbky\\hhht_fbky\\node_modules\\vue-loader\\lib\\index.js","mtime":1740991518721}],"contextDependencies":[],"result":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport { rtcHelper } from '@/assets/js/tr_webrtc.min.js'; // import Dayjs from \"dayjs\";\n// import { mapGetters } from \"vuex\";\n\nexport default {\n name: \"Fbky\",\n // computed: {\n // ...mapGetters([\"rtcHelper\"]),\n // },\n // props: {\n // curFbkyData: {\n // //分机登录参数\n // type: Object,\n // require: true,\n // default: () => ({}),\n // },\n // ringNumber: {\n // //号码参数\n // type: String,\n // require: true,\n // default: \"111\",\n // },\n // callDisable: {\n // //呼出或挂断控制\n // type: Boolean,\n // require: true,\n // default: false,\n // },\n // },\n data: function data() {\n return {\n login: \"8889\",\n //分机号\n password: \"123456\",\n //分机密码\n socketUrl: \"wss://172.10.10.61:1443/webrtc\",\n //webSocketURL\n localIp: \"\",\n autoReg: true,\n autoAnswer: false,\n mic: \"\",\n //麦克风选择\n cam: \"\",\n //摄像头选择\n speak: \"\",\n //扬声器选择\n call_in_now_d: null,\n ringNumber: '111',\n callback: {\n onRinging: function onRinging(d) {\n // 来电\n this.onRinging(d);\n },\n onCalling: function onCalling(d) {\n // 外呼\n this.onCalling(d);\n },\n onAnswer: function onAnswer(d) {\n // 通话中\n this.onAnswer(d);\n },\n onHangup: function onHangup(d) {// 挂机\n // this.onHangup(d);\n },\n onLogin: function onLogin() {\n //登录回调\n console.log(\"登录状态在线回调\");\n document.getElementById(\"off_status\").setAttribute(\"hidden\", \"hidden\");\n document.getElementById(\"on_status\").removeAttribute(\"hidden\");\n },\n onLogout: function onLogout() {\n //登出回调\n console.log(\"登出状态离线回调\");\n document.getElementById(\"on_status\").setAttribute(\"hidden\", \"hidden\");\n document.getElementById(\"off_status\").removeAttribute(\"hidden\");\n }\n }\n };\n },\n watch: {\n curFbkyData: {\n handler: function handler(newValue) {\n var _this = this;\n\n this.callHangupAll();\n console.log(\"数据更新:\", newValue);\n\n if (newValue.url) {\n this.login = newValue.admin;\n this.password = newValue.password;\n this.socketUrl = newValue.url;\n this.localIp = newValue.localIp;\n }\n\n setTimeout(function () {\n _this.initPerimeter();\n }, 1500);\n },\n deep: true\n },\n ringNumber: {\n handler: function handler(newValue) {\n this.callHangupAll();\n\n if (this.callDisable) {\n this.dial(0);\n }\n\n console.log(\"拨打号码:\", newValue);\n },\n deep: true\n },\n callDisable: {\n handler: function handler(newValue) {\n if (newValue) {\n this.dial(0);\n console.log(\"拨号\", this.ringNumber);\n } else {\n this.callHangupAll();\n console.log(\"挂断\");\n }\n },\n deep: true\n }\n },\n created: function created() {\n var _this2 = this;\n\n this.initMediaDevices();\n setTimeout(function () {\n _this2.initPerimeter();\n }, 500);\n },\n destroyed: function destroyed() {\n var _this3 = this;\n\n this.callHangupAll();\n setTimeout(function () {\n _this3.webRtcLogout();\n }, 500);\n },\n mounted: function mounted() {},\n methods: {\n getVideoDiv: function getVideoDiv() {\n return document.getElementById(\"peerTag\").value;\n },\n getValue: function getValue(id) {\n return document.getElementById(id).value;\n },\n setValue: function setValue(id, value) {\n document.getElementById(id).value = value;\n },\n //载入参数登录\n initPerimeter: function initPerimeter() {\n if (!this.login || !this.password || !this.socketUrl) {\n alert(\"请填写必填参数\");\n return;\n } // 缓存配置\n\n\n localStorage.verto_login = this.login; //分机账号\n\n localStorage.verto_password = this.password; //分机密码\n\n localStorage.verto_socketUrl = this.socketUrl; //webSocketURL\n\n localStorage.verto_localIp = this.localIp;\n localStorage.verto_autoReg = this.autoReg; //自动登录开关\n\n localStorage.verto_autoAnswer = this.autoAnswer; //自动接听开关\n\n rtcHelper.bootstrap(this.login, this.password, this.socketUrl, this.localIp, this.getVideoDiv(), \"local_video\", this.callback, this.mic, this.speak, this.cam); // console.log(\n // \"配置载入参数\",\n // this.login,\n // this.password,\n // this.socketUrl,\n // this.localIp,\n // this.getVideoDiv(),\n // \"local_video\",\n // this.callback,\n // this.mic,\n // this.speak,\n // this.cam\n // );\n },\n //获取音视频设备\n initMediaDevices: function initMediaDevices() {\n var _this4 = this;\n\n rtcHelper.getMediaDevices().then(function (result) {\n try {\n var microphone = result.audioInputDevices; //麦克风\n\n var camera = result.videoDevices; //摄像头+\n\n var loudspeaker = result.audioOutputDevices; //扬声器\n\n var microphoneStr = \"\";\n var cameraStr = \"\";\n var loudspeakerStr = \"\";\n\n for (var i = 0; i < microphone.length; i++) {\n microphoneStr += '<option value=\"' + microphone[i].deviceId + '\">' + microphone[i].label + \"</option>\";\n }\n\n document.getElementById(\"audioInputDev\").innerHTML = microphoneStr;\n\n for (var _i = 0; _i < camera.length; _i++) {\n cameraStr += '<option value=\"' + microphone[_i].deviceId + '\">' + camera[_i].label + \"</option>\";\n }\n\n document.getElementById(\"videoInputDev\").innerHTML = cameraStr;\n\n for (var _i2 = 0; _i2 < loudspeaker.length; _i2++) {\n loudspeakerStr += '<option value=\"' + microphone[_i2].deviceId + '\">' + loudspeaker[_i2].label + \"</option>\";\n }\n\n document.getElementById(\"audioOutputDev\").innerHTML = loudspeakerStr;\n\n if (microphone.length > 0) {\n _this4.mic = microphone[0].deviceId;\n }\n\n if (camera.length > 0) {\n _this4.cam = camera[0].deviceId;\n }\n\n if (loudspeaker.length > 0) {\n _this4.speak = loudspeaker[0].deviceId;\n }\n\n console.log(\"音视频设备:\", result, _this4.mic, _this4.cam, _this4.speak);\n } catch (e) {\n console.error(e);\n } // 自动登录\n // if (\n // localStorage.verto_autoReg == \"true\" &&\n // localStorage.verto_login &&\n // localStorage.verto_password &&\n // localStorage.verto_socketUrl\n // ) {\n // this.initPerimeter();\n // }\n\n });\n },\n //登录\n webRtcLogin: function webRtcLogin() {\n try {\n rtcHelper.rtcLogin();\n } catch (e) {\n console.error(e);\n }\n },\n //登出\n webRtcLogout: function webRtcLogout() {\n try {\n rtcHelper.rtcLogout();\n } catch (e) {\n console.error(e);\n }\n },\n // 拨号外呼\n dial: function dial(type) {\n document.getElementById('hc').addEventListener('click', function () {\n navigator.mediaDevices.getUserMedia({\n audio: true\n }).then(function (stream) {\n var audio = document.createElement('audio');\n audio.srcObject = stream;\n audio.autoplay = true;\n document.body.appendChild(audio);\n }).catch(function (error) {\n console.error('获取麦克风失败:', error);\n });\n });\n console.log(\"拨号号码:\", this.ringNumber);\n var destinationNumber = this.ringNumber;\n\n if (!destinationNumber) {\n alert(\"没有输入被叫号码\");\n return;\n }\n\n if (type === 1) {\n // 视频呼出\n rtcHelper.rtcDial(destinationNumber, true);\n } else {\n // 语音呼出\n rtcHelper.rtcDial(destinationNumber, false);\n }\n },\n //历史记录\n logRecords: function logRecords(callee, type) {\n var log = \"\";\n\n switch (type) {\n case \"ringing\":\n log = new Date().Format(\"yyyy-MM-dd HH:mm:ss\") + \" 呼入 \" + callee;\n break;\n\n case \"calling\":\n log = new Date().Format(\"yyyy-MM-dd HH:mm:ss\") + \" 呼出 \" + callee;\n break;\n\n default:\n break;\n }\n\n if (localStorage.verto_his_list) {\n localStorage.verto_his_list += \",\" + log;\n } else {\n localStorage.verto_his_list = log;\n }\n },\n // =================== 通话事件 start ====================\n onRinging: function onRinging(d) {\n var callee = d.cidString();\n console.log(\"===========来电信息===========\" + callee);\n console.log(\"通话呼入事件\", d); // 判断是否自动接听\n\n if (localStorage.verto_autoAnswer) {\n console.log(\"自动接听\");\n\n if (d.params.wantVideo) {\n // 选择是否有视频\n var videoFlag = true;\n rtcHelper.rtcAnswer(d, videoFlag);\n } else {\n rtcHelper.rtcAnswer(d, false);\n }\n } else {\n document.getElementById(\"call_in_now\").innerHTML = callee;\n document.getElementById(\"call_in_now\").setAttribute(\"callID\", d.callID);\n this.call_in_now_d = d;\n }\n\n document.getElementById(\"call_list\").innerHTML += \"<li callID='\" + d.callID + \"' @click='checkCalling(this)'>\" + callee + \" 呼入</li>\"; // 缓存历史呼入记录\n\n this.logRecords(callee, \"ringing\");\n },\n onCalling: function onCalling(d) {\n var callee = d.cidString();\n console.log(\"通话呼出事件\", d); // 呼出通话启动\n\n document.getElementById(\"call_list\").innerHTML += \"<li callID='\" + d.callID + \"' @click='checkCalling(this)'>\" + callee + \" 呼出</li>\"; // 缓存历史呼出记录\n\n this.logRecords(callee, \"calling\");\n },\n onAnswer: function onAnswer(d) {\n // 通话中处理\n console.log(\"通话中事件\", d);\n },\n onHangup: function onHangup(d) {// 挂机处理 - 接通列表处理\n // console.log(\"通话挂机事件\", d);\n },\n // =================== 通话事件 end ====================\n // =================== 呼入处理 start ====================\n // 呼入接听\n callInAnswer: function callInAnswer(type) {\n if (!this.call_in_now_d) {\n alert(\"当前无通话呼入\");\n return;\n }\n\n if (type === 1) {\n if (this.call_in_now_d.params.wantVideo) {\n // 选择是否有视频\n var videoFlag = true;\n rtcHelper.rtcAnswer(this.call_in_now_d, videoFlag);\n } else {\n rtcHelper.rtcAnswer(this.call_in_now_d, false);\n }\n } else {\n rtcHelper.rtcAnswer(this.call_in_now_d, false);\n }\n\n console.log(\"通话呼入\");\n document.getElementById(\"call_in_now\").innerHTML = \"\";\n this.call_in_now_d = null;\n },\n // 呼入挂断\n callInHangup: function callInHangup() {\n if (!this.call_in_now_d) {\n alert(\"当前无通话呼入\");\n return;\n }\n\n rtcHelper.rtcHangup(this.call_in_now_d.callID);\n document.getElementById(\"call_in_now\").innerHTML = \"\";\n console.log(\"通话挂断\");\n this.call_in_now_d = null;\n },\n // =================== 呼入处理 end ====================\n // =================== 通话功能 start ==================\n checkCalling: function checkCalling(e) {\n var callID = e.getAttribute(\"callID\");\n console.log(\"设置\", callID);\n this.setValue(\"callID\", callID);\n this.getMuteState(callID);\n this.getMuteVideoState(callID);\n },\n getMuteState: function getMuteState(callID) {\n if (rtcHelper.rtcGetMuteState(callID)) {\n // 没有静音\n console.log(\"非静音,本地声音状态打开\");\n document.getElementById(\"mute_off_status\").setAttribute(\"hidden\", \"hidden\");\n document.getElementById(\"mute_on_status\").removeAttribute(\"hidden\");\n } else {\n console.log(\"静音,本地声音状态关闭\");\n document.getElementById(\"mute_off_status\").removeAttribute(\"hidden\");\n document.getElementById(\"mute_on_status\").setAttribute(\"hidden\", \"hidden\");\n }\n },\n getMuteVideoState: function getMuteVideoState(callID) {\n if (rtcHelper.rtcGetMuteVideoState(callID)) {\n // 没有静音\n console.log(\"非静音,本地视频状态打开\");\n document.getElementById(\"mute_video_off_status\").setAttribute(\"hidden\", \"hidden\");\n document.getElementById(\"mute_video_on_status\").removeAttribute(\"hidden\");\n } else {\n console.log(\"静音,本地视频状态关闭\");\n document.getElementById(\"mute_video_off_status\").removeAttribute(\"hidden\");\n document.getElementById(\"mute_video_on_status\").setAttribute(\"hidden\", \"hidden\");\n }\n },\n //保持或取消指定通话\n callHoldUnhold: function callHoldUnhold(callID) {\n if (callID) {\n rtcHelper.rtcHoldUnhold(callID);\n } else {\n alert(\"未选择callID\");\n }\n },\n //关闭或打开通话本地声音\n callMuteUnmute: function callMuteUnmute(callID) {\n if (callID) {\n rtcHelper.rtcMuteUnmute(callID);\n this.getMuteState(callID);\n } else {\n alert(\"未选择callID\");\n }\n },\n //关闭或打开本地视频\n callMuteUnmuteVideo: function callMuteUnmuteVideo(callID) {\n if (callID) {\n rtcHelper.rtcMuteUnmuteVideo(callID);\n this.getMuteVideoState(callID);\n } else {\n alert(\"未选择callID\");\n }\n },\n //挂断指定callID通话\n callHangup: function callHangup(callID) {\n if (callID) {\n rtcHelper.rtcHangup(callID);\n alert(\"callID\", callID);\n } else {\n alert(\"未选择callID\");\n }\n },\n //挂断所有通话\n callHangupAll: function callHangupAll() {\n rtcHelper.rtcHangupAll();\n },\n //向指定通话发送DTMF\n callDtmf: function callDtmf(callID, dtmfKey) {\n if (callID) {\n rtcHelper.rtcDtmf(callID, dtmfKey);\n } else {\n alert(\"未选择callID\");\n }\n }\n }\n};",{"version":3,"sources":["HelloWorld.vue"],"names":[],"mappings":"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","sourcesContent":["<template>\r\n\t<div class=\"fbky-container\">\r\n\t\t<div class=\"top\">\r\n\t\t\t<span> 呼叫对象:呼和浩特全站场 </span>\r\n\t\t\t<span id=\"off_status\" class=\"set_status off_status\">离线</span>\r\n\t\t\t<span id=\"on_status\" class=\"set_status on_status\" hidden=\"\">在线</span>\r\n\t\t</div>\r\n\t\t<div class=\"fbky_manage\">\r\n\t\t\t<el-button type=\"primary\" @click=\"initPerimeter\">连接防爆扩音</el-button>\r\n\t\t\t<el-button type=\"info\" @click=\"webRtcLogout\">断开防爆扩音</el-button>\r\n\t\t\t<el-button type=\"success\" @click=\"dial(0)\">呼出通话</el-button>\r\n\t\t\t<el-button type=\"danger\" @click=\"callHangupAll\">挂断通话</el-button>\r\n\t\t\t<span>注:听到提示音后开始讲话,通话结束后请断开防爆扩音</span>\r\n\t\t</div>\r\n\t\t<div class=\"websocket\" style=\"display: none;\">\r\n\t\t\t<div class=\"websocket_left\">\r\n\t\t\t\t<div class=\"set_case\">\r\n\t\t\t\t\t<div class=\"set_split call_left set_call\">\r\n\t\t\t\t\t\t<div class=\"set_box\">\r\n\t\t\t\t\t\t\t<div class=\"set_item\">\r\n\t\t\t\t\t\t\t\t<div class=\"set_group\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"set_name\">呼出号码:</span>\r\n\t\t\t\t\t\t\t\t\t<input type=\"text\" class=\"set_ipt ipt_number\" id=\"destinationNumber\"\r\n\t\t\t\t\t\t\t\t\t\t:v-model=\"ringNumber\" />\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"set_group\">\r\n\t\t\t\t\t\t\t\t\t<button class=\"btn cyan_btn\" id=\"hc\" @click=\"dial(0)\">\r\n\t\t\t\t\t\t\t\t\t\t语音呼出\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_split call_right\" style=\"display: none;\">\r\n\t\t\t\t\t\t<div class=\"set_box come_box\">\r\n\t\t\t\t\t\t\t<div class=\"set_item\">\r\n\t\t\t\t\t\t\t\t<div class=\"set_group\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"set_name\">当前来电:</span>\r\n\t\t\t\t\t\t\t\t\t<span id=\"call_in_now\" callID=\"\"></span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"set_group group_right\">\r\n\t\t\t\t\t\t\t\t\t<button class=\"btn blue_btn margin\" @click=\"callInAnswer(1)\">\r\n\t\t\t\t\t\t\t\t\t\t视频接听\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button class=\"btn cyan_btn margin\" @click=\"callInAnswer(0)\">\r\n\t\t\t\t\t\t\t\t\t\t语音接听\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button class=\"btn white_btn\" @click=\"callInHangup()\">\r\n\t\t\t\t\t\t\t\t\t\t挂断\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"set_case\" style=\"display: none;\">\r\n\t\t\t\t\t<div class=\"set_split his_left\">\r\n\t\t\t\t\t\t<div class=\"set_box\">\r\n\t\t\t\t\t\t\t<div class=\"set_item call_box\">\r\n\t\t\t\t\t\t\t\t<span class=\"set_name\" style=\"color: red\">执行操作前,请选择正在通话列表(支持同时多路通话):</span>\r\n\t\t\t\t\t\t\t\t<div class=\"call_case\">\r\n\t\t\t\t\t\t\t\t\t<ul id=\"call_list\"></ul>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_split his_right\">\r\n\t\t\t\t\t\t<div class=\"set_box\">\r\n\t\t\t\t\t\t\t<div class=\"set_item set_first\">\r\n\t\t\t\t\t\t\t\t<span class=\"set_name\">call ID:</span>\r\n\t\t\t\t\t\t\t\t<input type=\"text\" class=\"set_ipt ipt_call\" id=\"callID\" readonly />\r\n\t\t\t\t\t\t\t\t<button class=\"btn blue_btn\" @click=\"callHoldUnhold()\">\r\n\t\t\t\t\t\t\t\t\t保持/取消保持指定通话\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"set_item\">\r\n\t\t\t\t\t\t\t\t<span id=\"mute_off_status\" class=\"set_status off_status margin\" hidden=\"\">己关闭</span>\r\n\t\t\t\t\t\t\t\t<span id=\"mute_on_status\" class=\"set_status on_status margin\" hidden=\"\">未关闭</span>\r\n\t\t\t\t\t\t\t\t<button class=\"btn blue_btn\" @click=\"callMuteUnmute()\">\r\n\t\t\t\t\t\t\t\t\t关闭/打开指定通话本地声音\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"set_item\">\r\n\t\t\t\t\t\t\t\t<span id=\"mute_video_off_status\" class=\"set_status off_status margin\"\r\n\t\t\t\t\t\t\t\t\thidden=\"\">已关闭</span>\r\n\t\t\t\t\t\t\t\t<span id=\"mute_video_on_status\" class=\"set_status on_status margin\" hidden=\"\">未关闭</span>\r\n\t\t\t\t\t\t\t\t<button class=\"btn blue_btn\" @click=\"callMuteUnmuteVideo()\">\r\n\t\t\t\t\t\t\t\t\t关闭/打开指定通话本地视频\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"set_item\">\r\n\t\t\t\t\t\t\t\t<button class=\"btn blue_btn margin\" @click=\"callHangup()\">\r\n\t\t\t\t\t\t\t\t\t挂断指定通话\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"video_box\" style=\"display: none;\">\r\n\t\t\t\t\t<div class=\"video_left\">\r\n\t\t\t\t\t\t<div class=\"video_item video_item1\">\r\n\t\t\t\t\t\t\t<span class=\"video_name\">local_video</span>\r\n\t\t\t\t\t\t\t<video class=\"video_tag\" id=\"local_video\" width=\"10%\" height=\"10%\" autoplay=\"true\"></video>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"websocket_right\">\r\n\t\t\t\t<div class=\"set_box set_zhuce\">\r\n\t\t\t\t\t<div class=\"set_item\">\r\n\t\t\t\t\t\t<span class=\"set_name\">登录状态:</span>\r\n\t\t\t\t\t\t<span id=\"off_status\" class=\"set_status off_status\">未登录</span>\r\n\t\t\t\t\t\t<span id=\"on_status\" class=\"set_status on_status\" hidden=\"\">已登录</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\"><i class=\"must\">*</i>Websocket URL:</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"set_ipt\" v-model=\"socketUrl\"\r\n\t\t\t\t\t\t\tplaceholder=\"wss://192.168.10.39:1443/webrtc\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\" style=\"flex: none\"></span>\r\n\t\t\t\t\t\t<span style=\"color: red\">配置wss后,如果连接失败,请先查看是不是https证书问题\r\n\t\t\t\t\t\t\t可以通话访问对应的https页面,手动允许浏览器安全提示</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\">麦克风:</span>\r\n\t\t\t\t\t\t<select class=\"set_slt\" id=\"audioInputDev\">\r\n\t\t\t\t\t\t\t<option value=\"\">请选择</option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\">摄像头:</span>\r\n\t\t\t\t\t\t<select class=\"set_slt\" id=\"videoInputDev\">\r\n\t\t\t\t\t\t\t<option value=\"\">请选择</option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\">扬声器:</span>\r\n\t\t\t\t\t\t<select class=\"set_slt\" id=\"audioOutputDev\">\r\n\t\t\t\t\t\t\t<option value=\"\">请选择</option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\"><i class=\"must\">*</i>用户名:</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"set_ipt\" v-model=\"login\" placeholder=\"8889\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\"><i class=\"must\">*</i>密码:</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"set_ipt\" v-model=\"password\" placeholder=\"123456\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\" style=\"flex: none\"></span>\r\n\t\t\t\t\t\t<span style=\"color: red\">支持断线重连,通话中关闭网页,在重新登录后会恢复正在进行的通话</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\">自动登录:</span>\r\n\t\t\t\t\t\t<label class=\"check_box\">\r\n\t\t\t\t\t\t\t<input v-model=\"autoReg\" type=\"checkbox\" class=\"check\" />\r\n\t\t\t\t\t\t\t<span>是</span>\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\">自动接听:</span>\r\n\t\t\t\t\t\t<label class=\"check_box\">\r\n\t\t\t\t\t\t\t<input v-model=\"autoAnswer\" type=\"checkbox\" class=\"check\" />\r\n\t\t\t\t\t\t\t<span>是</span>\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\" style=\"flex: none\"></span>\r\n\t\t\t\t\t\t<span style=\"color: red\">注意:每个通话都需要在页面中有一个独立的video标签做为载体,\r\n\t\t\t\t\t\t\t不管是纯音频通话还是音视频通话,\r\n\t\t\t\t\t\t\t多个通话同时使用一个video标签时,后者会覆盖前者通话的视频和音频,\r\n\t\t\t\t\t\t\t测试多路通话时,请每次切换不同的video标签</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\" style=\"display: none;\">\r\n\t\t\t\t\t\t<span class=\"set_name\">下次通话视频位置:</span>\r\n\t\t\t\t\t\t<select class=\"set_slt\" id=\"peerTag\">\r\n\t\t\t\t\t\t\t<option value=\"video1\">video1</option>\r\n\t\t\t\t\t\t\t<option value=\"video2\">video2</option>\r\n\t\t\t\t\t\t\t<option value=\"video3\">video3</option>\r\n\t\t\t\t\t\t\t<option value=\"video4\">video4</option>\r\n\t\t\t\t\t\t\t<option value=\"video5\">video5</option>\r\n\t\t\t\t\t\t\t<option value=\"video6\">video6</option>\r\n\t\t\t\t\t\t\t<option value=\"video7\">video7</option>\r\n\t\t\t\t\t\t\t<option value=\"video8\">video8</option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"set_item\">\r\n\t\t\t\t\t\t<button class=\"btn blue_btn margin\" @click=\"initPerimeter()\">\r\n\t\t\t\t\t\t\t载入登录\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button class=\"btn cyan_btn margin\" @click=\"webRtcLogin()\">\r\n\t\t\t\t\t\t\t登录\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button class=\"btn white_btn margin\" @click=\"webRtcLogout()\">\r\n\t\t\t\t\t\t\t登出\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t<button class=\"btn cyan_btn\" @click=\"callHangupAll()\">\r\n\t\t\t\t\t\t\t挂断所有\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"set_box set_equipment\" style=\"display: none;\">\r\n\t\t\t\t\t<div class=\"set_item\">\r\n\t\t\t\t\t\t<span class=\"set_name\">本机IP:</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"set_ipt\" id=\"localIp\" v-model=\"localIp\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<!-- <div class=\"set_box\">\r\n <div class=\"set_item set_his\">\r\n <span class=\"set_name\">呼叫历史记录(本地缓存):</span>\r\n <div class=\"his_case\">\r\n <ul id=\"his_list\"></ul>\r\n </div>\r\n </div>\r\n </div> -->\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<script>\r\n\timport {\r\n\t\trtcHelper\r\n\t} from '@/assets/js/tr_webrtc.min.js'\r\n\t// import Dayjs from \"dayjs\";\r\n\t// import { mapGetters } from \"vuex\";\r\n\texport default {\r\n\t\tname: \"Fbky\",\r\n\t\t// computed: {\r\n\t\t// ...mapGetters([\"rtcHelper\"]),\r\n\t\t// },\r\n\t\t// props: {\r\n\t\t// curFbkyData: {\r\n\t\t// //分机登录参数\r\n\t\t// type: Object,\r\n\t\t// require: true,\r\n\t\t// default: () => ({}),\r\n\t\t// },\r\n\t\t// ringNumber: {\r\n\t\t// //号码参数\r\n\t\t// type: String,\r\n\t\t// require: true,\r\n\t\t// default: \"111\",\r\n\t\t// },\r\n\t\t// callDisable: {\r\n\t\t// //呼出或挂断控制\r\n\t\t// type: Boolean,\r\n\t\t// require: true,\r\n\t\t// default: false,\r\n\t\t// },\r\n\t\t// },\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\tlogin: \"8889\", //分机号\r\n\t\t\t\tpassword: \"123456\", //分机密码\r\n\t\t\t\tsocketUrl: \"wss://172.10.10.61:1443/webrtc\", //webSocketURL\r\n\t\t\t\tlocalIp: \"\",\r\n\t\t\t\tautoReg: true,\r\n\t\t\t\tautoAnswer: false,\r\n\t\t\t\tmic: \"\", //麦克风选择\r\n\t\t\t\tcam: \"\", //摄像头选择\r\n\t\t\t\tspeak: \"\", //扬声器选择\r\n\t\t\t\tcall_in_now_d: null,\r\n\t\t\t\tringNumber: '111',\r\n\t\t\t\tcallback: {\r\n\t\t\t\t\tonRinging: function(d) {\r\n\t\t\t\t\t\t// 来电\r\n\t\t\t\t\t\tthis.onRinging(d);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonCalling: function(d) {\r\n\t\t\t\t\t\t// 外呼\r\n\t\t\t\t\t\tthis.onCalling(d);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonAnswer: function(d) {\r\n\t\t\t\t\t\t// 通话中\r\n\t\t\t\t\t\tthis.onAnswer(d);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonHangup: function(d) {\r\n\t\t\t\t\t\t// 挂机\r\n\t\t\t\t\t\t// this.onHangup(d);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonLogin: function() {\r\n\t\t\t\t\t\t//登录回调\r\n\t\t\t\t\t\tconsole.log(\"登录状态在线回调\");\r\n\t\t\t\t\t\tdocument\r\n\t\t\t\t\t\t\t.getElementById(\"off_status\")\r\n\t\t\t\t\t\t\t.setAttribute(\"hidden\", \"hidden\");\r\n\t\t\t\t\t\tdocument.getElementById(\"on_status\").removeAttribute(\"hidden\");\r\n\t\t\t\t\t},\r\n\t\t\t\t\tonLogout: function() {\r\n\t\t\t\t\t\t//登出回调\r\n\t\t\t\t\t\tconsole.log(\"登出状态离线回调\");\r\n\t\t\t\t\t\tdocument.getElementById(\"on_status\").setAttribute(\"hidden\", \"hidden\");\r\n\t\t\t\t\t\tdocument.getElementById(\"off_status\").removeAttribute(\"hidden\");\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t},\r\n\t\twatch: {\r\n\t\t\tcurFbkyData: {\r\n\t\t\t\thandler(newValue) {\r\n\t\t\t\t\tthis.callHangupAll();\r\n\t\t\t\t\tconsole.log(\"数据更新:\", newValue);\r\n\t\t\t\t\tif (newValue.url) {\r\n\t\t\t\t\t\tthis.login = newValue.admin;\r\n\t\t\t\t\t\tthis.password = newValue.password;\r\n\t\t\t\t\t\tthis.socketUrl = newValue.url;\r\n\t\t\t\t\t\tthis.localIp = newValue.localIp;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tthis.initPerimeter();\r\n\t\t\t\t\t}, 1500);\r\n\t\t\t\t},\r\n\t\t\t\tdeep: true,\r\n\t\t\t},\r\n\t\t\tringNumber: {\r\n\t\t\t\thandler(newValue) {\r\n\t\t\t\t\tthis.callHangupAll();\r\n\t\t\t\t\tif (this.callDisable) {\r\n\t\t\t\t\t\tthis.dial(0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconsole.log(\"拨打号码:\", newValue);\r\n\t\t\t\t},\r\n\t\t\t\tdeep: true,\r\n\t\t\t},\r\n\t\t\tcallDisable: {\r\n\t\t\t\thandler(newValue) {\r\n\t\t\t\t\tif (newValue) {\r\n\t\t\t\t\t\tthis.dial(0);\r\n\t\t\t\t\t\tconsole.log(\"拨号\", this.ringNumber);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.callHangupAll();\r\n\t\t\t\t\t\tconsole.log(\"挂断\");\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tdeep: true,\r\n\t\t\t},\r\n\t\t},\r\n\t\tcreated() {\r\n\t\t\tthis.initMediaDevices();\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.initPerimeter();\r\n\t\t\t}, 500);\r\n\t\t},\r\n\t\tdestroyed() {\r\n\t\t\tthis.callHangupAll();\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.webRtcLogout();\r\n\t\t\t}, 500);\r\n\t\t},\r\n\t\tmounted() {},\r\n\t\tmethods: {\r\n\t\t\tgetVideoDiv() {\r\n\t\t\t\treturn document.getElementById(\"peerTag\").value;\r\n\t\t\t},\r\n\t\t\tgetValue(id) {\r\n\t\t\t\treturn document.getElementById(id).value;\r\n\t\t\t},\r\n\t\t\tsetValue(id, value) {\r\n\t\t\t\tdocument.getElementById(id).value = value;\r\n\t\t\t},\r\n\t\t\t//载入参数登录\r\n\t\t\tinitPerimeter() {\r\n\t\t\t\tif (!this.login || !this.password || !this.socketUrl) {\r\n\t\t\t\t\talert(\"请填写必填参数\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t// 缓存配置\r\n\t\t\t\tlocalStorage.verto_login = this.login; //分机账号\r\n\t\t\t\tlocalStorage.verto_password = this.password; //分机密码\r\n\t\t\t\tlocalStorage.verto_socketUrl = this.socketUrl; //webSocketURL\r\n\t\t\t\tlocalStorage.verto_localIp = this.localIp;\r\n\t\t\t\tlocalStorage.verto_autoReg = this.autoReg; //自动登录开关\r\n\t\t\t\tlocalStorage.verto_autoAnswer = this.autoAnswer; //自动接听开关\r\n\t\t\t\trtcHelper.bootstrap(\r\n\t\t\t\t\tthis.login,\r\n\t\t\t\t\tthis.password,\r\n\t\t\t\t\tthis.socketUrl,\r\n\t\t\t\t\tthis.localIp,\r\n\t\t\t\t\tthis.getVideoDiv(),\r\n\t\t\t\t\t\"local_video\",\r\n\t\t\t\t\tthis.callback,\r\n\t\t\t\t\tthis.mic,\r\n\t\t\t\t\tthis.speak,\r\n\t\t\t\t\tthis.cam\r\n\t\t\t\t);\r\n\t\t\t\t// console.log(\r\n\t\t\t\t// \"配置载入参数\",\r\n\t\t\t\t// this.login,\r\n\t\t\t\t// this.password,\r\n\t\t\t\t// this.socketUrl,\r\n\t\t\t\t// this.localIp,\r\n\t\t\t\t// this.getVideoDiv(),\r\n\t\t\t\t// \"local_video\",\r\n\t\t\t\t// this.callback,\r\n\t\t\t\t// this.mic,\r\n\t\t\t\t// this.speak,\r\n\t\t\t\t// this.cam\r\n\t\t\t\t// );\r\n\t\t\t},\r\n\t\t\t//获取音视频设备\r\n\t\t\tinitMediaDevices() {\r\n\t\t\t\trtcHelper.getMediaDevices().then((result) => {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tlet microphone = result.audioInputDevices; //麦克风\r\n\t\t\t\t\t\tlet camera = result.videoDevices; //摄像头+\r\n\t\t\t\t\t\tlet loudspeaker = result.audioOutputDevices; //扬声器\r\n\t\t\t\t\t\tlet microphoneStr = \"\";\r\n\t\t\t\t\t\tlet cameraStr = \"\";\r\n\t\t\t\t\t\tlet loudspeakerStr = \"\";\r\n\t\t\t\t\t\tfor (let i = 0; i < microphone.length; i++) {\r\n\t\t\t\t\t\t\tmicrophoneStr +=\r\n\t\t\t\t\t\t\t\t'<option value=\"' +\r\n\t\t\t\t\t\t\t\tmicrophone[i].deviceId +\r\n\t\t\t\t\t\t\t\t'\">' +\r\n\t\t\t\t\t\t\t\tmicrophone[i].label +\r\n\t\t\t\t\t\t\t\t\"</option>\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdocument.getElementById(\"audioInputDev\").innerHTML = microphoneStr;\r\n\t\t\t\t\t\tfor (let i = 0; i < camera.length; i++) {\r\n\t\t\t\t\t\t\tcameraStr +=\r\n\t\t\t\t\t\t\t\t'<option value=\"' +\r\n\t\t\t\t\t\t\t\tmicrophone[i].deviceId +\r\n\t\t\t\t\t\t\t\t'\">' +\r\n\t\t\t\t\t\t\t\tcamera[i].label +\r\n\t\t\t\t\t\t\t\t\"</option>\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdocument.getElementById(\"videoInputDev\").innerHTML = cameraStr;\r\n\t\t\t\t\t\tfor (let i = 0; i < loudspeaker.length; i++) {\r\n\t\t\t\t\t\t\tloudspeakerStr +=\r\n\t\t\t\t\t\t\t\t'<option value=\"' +\r\n\t\t\t\t\t\t\t\tmicrophone[i].deviceId +\r\n\t\t\t\t\t\t\t\t'\">' +\r\n\t\t\t\t\t\t\t\tloudspeaker[i].label +\r\n\t\t\t\t\t\t\t\t\"</option>\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdocument.getElementById(\"audioOutputDev\").innerHTML = loudspeakerStr;\r\n\t\t\t\t\t\tif (microphone.length > 0) {\r\n\t\t\t\t\t\t\tthis.mic = microphone[0].deviceId;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (camera.length > 0) {\r\n\t\t\t\t\t\t\tthis.cam = camera[0].deviceId;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (loudspeaker.length > 0) {\r\n\t\t\t\t\t\t\tthis.speak = loudspeaker[0].deviceId;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tconsole.log(\"音视频设备:\", result, this.mic, this.cam, this.speak);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.error(e);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// 自动登录\r\n\t\t\t\t\t// if (\r\n\t\t\t\t\t// localStorage.verto_autoReg == \"true\" &&\r\n\t\t\t\t\t// localStorage.verto_login &&\r\n\t\t\t\t\t// localStorage.verto_password &&\r\n\t\t\t\t\t// localStorage.verto_socketUrl\r\n\t\t\t\t\t// ) {\r\n\t\t\t\t\t// this.initPerimeter();\r\n\t\t\t\t\t// }\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t//登录\r\n\t\t\twebRtcLogin() {\r\n\t\t\t\ttry {\r\n\t\t\t\t\trtcHelper.rtcLogin();\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.error(e);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t//登出\r\n\t\t\twebRtcLogout() {\r\n\t\t\t\ttry {\r\n\t\t\t\t\trtcHelper.rtcLogout();\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.error(e);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t// 拨号外呼\r\n\t\t\tdial(type) {\r\n\r\n\t\t\t\tdocument.getElementById('hc').addEventListener('click', function() {\r\n\t\t\t\t\tnavigator.mediaDevices.getUserMedia({\r\n\t\t\t\t\t\t\taudio: true\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.then(stream => {\r\n\t\t\t\t\t\t\tconst audio = document.createElement('audio');\r\n\t\t\t\t\t\t\taudio.srcObject = stream;\r\n\t\t\t\t\t\t\taudio.autoplay = true;\r\n\t\t\t\t\t\t\tdocument.body.appendChild(audio);\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.catch(error => {\r\n\t\t\t\t\t\t\tconsole.error('获取麦克风失败:', error);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t\tconsole.log(\"拨号号码:\", this.ringNumber);\r\n\t\t\t\tlet destinationNumber = this.ringNumber;\r\n\t\t\t\tif (!destinationNumber) {\r\n\t\t\t\t\talert(\"没有输入被叫号码\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (type === 1) {\r\n\t\t\t\t\t// 视频呼出\r\n\t\t\t\t\trtcHelper.rtcDial(destinationNumber, true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// 语音呼出\r\n\t\t\t\t\trtcHelper.rtcDial(destinationNumber, false);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t//历史记录\r\n\t\t\tlogRecords(callee, type) {\r\n\t\t\t\tlet log = \"\";\r\n\t\t\t\tswitch (type) {\r\n\t\t\t\t\tcase \"ringing\":\r\n\t\t\t\t\t\tlog = new Date().Format(\"yyyy-MM-dd HH:mm:ss\") + \" 呼入 \" + callee;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"calling\":\r\n\t\t\t\t\t\tlog = new Date().Format(\"yyyy-MM-dd HH:mm:ss\") + \" 呼出 \" + callee;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tif (localStorage.verto_his_list) {\r\n\t\t\t\t\tlocalStorage.verto_his_list += \",\" + log;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlocalStorage.verto_his_list = log;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t// =================== 通话事件 start ====================\r\n\t\t\tonRinging(d) {\r\n\t\t\t\tlet callee = d.cidString();\r\n\t\t\t\tconsole.log(\"===========来电信息===========\" + callee);\r\n\t\t\t\tconsole.log(\"通话呼入事件\", d);\r\n\t\t\t\t// 判断是否自动接听\r\n\t\t\t\tif (localStorage.verto_autoAnswer) {\r\n\t\t\t\t\tconsole.log(\"自动接听\");\r\n\t\t\t\t\tif (d.params.wantVideo) {\r\n\t\t\t\t\t\t// 选择是否有视频\r\n\t\t\t\t\t\tlet videoFlag = true;\r\n\t\t\t\t\t\trtcHelper.rtcAnswer(d, videoFlag);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trtcHelper.rtcAnswer(d, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdocument.getElementById(\"call_in_now\").innerHTML = callee;\r\n\t\t\t\t\tdocument.getElementById(\"call_in_now\").setAttribute(\"callID\", d.callID);\r\n\t\t\t\t\tthis.call_in_now_d = d;\r\n\t\t\t\t}\r\n\t\t\t\tdocument.getElementById(\"call_list\").innerHTML +=\r\n\t\t\t\t\t\"<li callID='\" +\r\n\t\t\t\t\td.callID +\r\n\t\t\t\t\t\"' @click='checkCalling(this)'>\" +\r\n\t\t\t\t\tcallee +\r\n\t\t\t\t\t\" 呼入</li>\";\r\n\t\t\t\t// 缓存历史呼入记录\r\n\t\t\t\tthis.logRecords(callee, \"ringing\");\r\n\t\t\t},\r\n\t\t\tonCalling(d) {\r\n\t\t\t\tlet callee = d.cidString();\r\n\t\t\t\tconsole.log(\"通话呼出事件\", d);\r\n\t\t\t\t// 呼出通话启动\r\n\t\t\t\tdocument.getElementById(\"call_list\").innerHTML +=\r\n\t\t\t\t\t\"<li callID='\" +\r\n\t\t\t\t\td.callID +\r\n\t\t\t\t\t\"' @click='checkCalling(this)'>\" +\r\n\t\t\t\t\tcallee +\r\n\t\t\t\t\t\" 呼出</li>\";\r\n\t\t\t\t// 缓存历史呼出记录\r\n\t\t\t\tthis.logRecords(callee, \"calling\");\r\n\t\t\t},\r\n\t\t\tonAnswer(d) {\r\n\t\t\t\t// 通话中处理\r\n\t\t\t\tconsole.log(\"通话中事件\", d);\r\n\t\t\t},\r\n\t\t\tonHangup(d) {\r\n\t\t\t\t// 挂机处理 - 接通列表处理\r\n\t\t\t\t// console.log(\"通话挂机事件\", d);\r\n\t\t\t},\r\n\t\t\t// =================== 通话事件 end ====================\r\n\r\n\t\t\t// =================== 呼入处理 start ====================\r\n\t\t\t// 呼入接听\r\n\t\t\tcallInAnswer(type) {\r\n\t\t\t\tif (!this.call_in_now_d) {\r\n\t\t\t\t\talert(\"当前无通话呼入\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (type === 1) {\r\n\t\t\t\t\tif (this.call_in_now_d.params.wantVideo) {\r\n\t\t\t\t\t\t// 选择是否有视频\r\n\t\t\t\t\t\tlet videoFlag = true;\r\n\t\t\t\t\t\trtcHelper.rtcAnswer(this.call_in_now_d, videoFlag);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\trtcHelper.rtcAnswer(this.call_in_now_d, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\trtcHelper.rtcAnswer(this.call_in_now_d, false);\r\n\t\t\t\t}\r\n\t\t\t\tconsole.log(\"通话呼入\");\r\n\t\t\t\tdocument.getElementById(\"call_in_now\").innerHTML = \"\";\r\n\t\t\t\tthis.call_in_now_d = null;\r\n\t\t\t},\r\n\r\n\t\t\t// 呼入挂断\r\n\t\t\tcallInHangup() {\r\n\t\t\t\tif (!this.call_in_now_d) {\r\n\t\t\t\t\talert(\"当前无通话呼入\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\trtcHelper.rtcHangup(this.call_in_now_d.callID);\r\n\t\t\t\tdocument.getElementById(\"call_in_now\").innerHTML = \"\";\r\n\t\t\t\tconsole.log(\"通话挂断\");\r\n\t\t\t\tthis.call_in_now_d = null;\r\n\t\t\t},\r\n\r\n\t\t\t// =================== 呼入处理 end ====================\r\n\r\n\t\t\t// =================== 通话功能 start ==================\r\n\t\t\tcheckCalling(e) {\r\n\t\t\t\tlet callID = e.getAttribute(\"callID\");\r\n\t\t\t\tconsole.log(\"设置\", callID);\r\n\t\t\t\tthis.setValue(\"callID\", callID);\r\n\t\t\t\tthis.getMuteState(callID);\r\n\t\t\t\tthis.getMuteVideoState(callID);\r\n\t\t\t},\r\n\r\n\t\t\tgetMuteState(callID) {\r\n\t\t\t\tif (rtcHelper.rtcGetMuteState(callID)) {\r\n\t\t\t\t\t// 没有静音\r\n\t\t\t\t\tconsole.log(\"非静音,本地声音状态打开\");\r\n\t\t\t\t\tdocument\r\n\t\t\t\t\t\t.getElementById(\"mute_off_status\")\r\n\t\t\t\t\t\t.setAttribute(\"hidden\", \"hidden\");\r\n\t\t\t\t\tdocument.getElementById(\"mute_on_status\").removeAttribute(\"hidden\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.log(\"静音,本地声音状态关闭\");\r\n\t\t\t\t\tdocument.getElementById(\"mute_off_status\").removeAttribute(\"hidden\");\r\n\t\t\t\t\tdocument\r\n\t\t\t\t\t\t.getElementById(\"mute_on_status\")\r\n\t\t\t\t\t\t.setAttribute(\"hidden\", \"hidden\");\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetMuteVideoState(callID) {\r\n\t\t\t\tif (rtcHelper.rtcGetMuteVideoState(callID)) {\r\n\t\t\t\t\t// 没有静音\r\n\t\t\t\t\tconsole.log(\"非静音,本地视频状态打开\");\r\n\t\t\t\t\tdocument\r\n\t\t\t\t\t\t.getElementById(\"mute_video_off_status\")\r\n\t\t\t\t\t\t.setAttribute(\"hidden\", \"hidden\");\r\n\t\t\t\t\tdocument\r\n\t\t\t\t\t\t.getElementById(\"mute_video_on_status\")\r\n\t\t\t\t\t\t.removeAttribute(\"hidden\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.log(\"静音,本地视频状态关闭\");\r\n\t\t\t\t\tdocument\r\n\t\t\t\t\t\t.getElementById(\"mute_video_off_status\")\r\n\t\t\t\t\t\t.removeAttribute(\"hidden\");\r\n\t\t\t\t\tdocument\r\n\t\t\t\t\t\t.getElementById(\"mute_video_on_status\")\r\n\t\t\t\t\t\t.setAttribute(\"hidden\", \"hidden\");\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t//保持或取消指定通话\r\n\t\t\tcallHoldUnhold(callID) {\r\n\t\t\t\tif (callID) {\r\n\t\t\t\t\trtcHelper.rtcHoldUnhold(callID);\r\n\t\t\t\t} else {\r\n\t\t\t\t\talert(\"未选择callID\");\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t//关闭或打开通话本地声音\r\n\t\t\tcallMuteUnmute(callID) {\r\n\t\t\t\tif (callID) {\r\n\t\t\t\t\trtcHelper.rtcMuteUnmute(callID);\r\n\t\t\t\t\tthis.getMuteState(callID);\r\n\t\t\t\t} else {\r\n\t\t\t\t\talert(\"未选择callID\");\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t//关闭或打开本地视频\r\n\t\t\tcallMuteUnmuteVideo(callID) {\r\n\t\t\t\tif (callID) {\r\n\t\t\t\t\trtcHelper.rtcMuteUnmuteVideo(callID);\r\n\t\t\t\t\tthis.getMuteVideoState(callID);\r\n\t\t\t\t} else {\r\n\t\t\t\t\talert(\"未选择callID\");\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t//挂断指定callID通话\r\n\t\t\tcallHangup(callID) {\r\n\t\t\t\tif (callID) {\r\n\t\t\t\t\trtcHelper.rtcHangup(callID);\r\n\t\t\t\t\talert(\"callID\", callID);\r\n\t\t\t\t} else {\r\n\t\t\t\t\talert(\"未选择callID\");\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t//挂断所有通话\r\n\t\t\tcallHangupAll() {\r\n\t\t\t\trtcHelper.rtcHangupAll();\r\n\t\t\t},\r\n\t\t\t//向指定通话发送DTMF\r\n\t\t\tcallDtmf(callID, dtmfKey) {\r\n\t\t\t\tif (callID) {\r\n\t\t\t\t\trtcHelper.rtcDtmf(callID, dtmfKey);\r\n\t\t\t\t} else {\r\n\t\t\t\t\talert(\"未选择callID\");\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t// =================== 通话功能 end ==================\r\n\t\t},\r\n\t};\r\n</script>\r\n<style scoped>\r\n\t.fbky-container {\r\n\t\twidth: 100%;\r\n\t\tbackground: #00000000;\r\n\t}\r\n\r\n\t.top {\r\n\t\tcolor: #fff;\r\n\t\tfont-size: 14px;\r\n\t\t/* height: 60px; */\r\n\t\ttext-align: left;\r\n\t}\r\n\r\n\t.fbky_manage {\r\n\t\tcolor: #fff;\r\n\t\tfont-size: 14px;\r\n\t\tmargin-top: 10px;\r\n\t\t/* margin-bottom: 10px; */\r\n\t\ttext-align: left;\r\n\t}\r\n\r\n\t.fbky_manage span {\r\n\t\tdisplay: inline-block;\r\n\t\tmargin-left: 20px;\r\n\t\tcolor: red;\r\n\t}\r\n\r\n\t.fbky-container .websocket {\r\n\t\t/* width: 100%; */\r\n\t\t/* height: 60%; */\r\n\t\tdisplay: flex;\r\n\t\tpadding: 20px;\r\n\t\t/* background-color: #f1f4f7; */\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_left {\r\n\t\t/* width: 70%; */\r\n\t\t/* padding-right: 20px; */\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_left .set_case {\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_left .set_case .set_call .set_name {\r\n\t\twidth: 80px;\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_left .set_case .set_item {\r\n\t\tmargin-bottom: 15px;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_left .set_case .call_left {\r\n\t\t/* width: 50%; */\r\n\t\tdisplay: flex;\r\n\t\tpadding-right: 20px;\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_left .set_case .call_right {\r\n\t\twidth: 50%;\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_left .video_box {\r\n\t\theight: 200px;\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_left .video_box .video_left,\r\n\t.fbky-container .websocket .websocket_left .video_box .video_right {\r\n\t\twidth: 50%;\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_left .video_box .video_left {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_left .video_box .video_right {\r\n\t\tdisplay: flex;\r\n\t\tflex-wrap: wrap;\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_right {\r\n\t\twidth: 30%;\r\n\t}\r\n\r\n\t.fbky-container .websocket .websocket_right .set_box {\r\n\t\twidth: 100%;\r\n\t\t/* background-color: #fff; */\r\n\t\tpadding: 20px;\r\n\t\tmargin-bottom: 20px;\r\n\t}\r\n\r\n\t.set_box {\r\n\t\twidth: 100%;\r\n\t\t/* background-color: #fff; */\r\n\t\tpadding: 20px;\r\n\t\tmargin-bottom: 20px;\r\n\t}\r\n\r\n\t.set_item:last-child {\r\n\t\tmargin-bottom: 0;\r\n\t}\r\n\r\n\t.group_case {\r\n\t\tjustify-content: space-between;\r\n\t}\r\n\r\n\t.set_group {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t}\r\n\r\n\t.set_slt,\r\n\t.set_ipt {\r\n\t\tflex: auto;\r\n\t\theight: 30px;\r\n\t\tline-height: 30px;\r\n\t\tborder: 1px solid #d1d1d1;\r\n\t\toutline: none;\r\n\t\tborder-radius: 3px;\r\n\t\tpadding-left: 10px;\r\n\t\tbackground-color: #fff !important;\r\n\t}\r\n\r\n\t.btn {\r\n\t\tpadding: 6px 12px;\r\n\t\tborder-radius: 3px;\r\n\t\tcursor: pointer;\r\n\t\toutline: none !important;\r\n\t\tfont-size: 12px !important;\r\n\t}\r\n\r\n\t.btn:hover {\r\n\t\topacity: 0.8;\r\n\t}\r\n\r\n\t.blue_btn {\r\n\t\tbackground-color: #1890ff;\r\n\t\tborder: 1px solid #1890ff;\r\n\t\tcolor: #fff !important;\r\n\t}\r\n\r\n\t.cyan_btn {\r\n\t\tbackground-color: #00bcd4;\r\n\t\tborder: 1px solid #00bcd4;\r\n\t\tcolor: #fff !important;\r\n\t}\r\n\r\n\t.white_btn {\r\n\t\tbackground-color: #fafafa;\r\n\t\tborder: 1px solid #d1d1d1;\r\n\t}\r\n\r\n\t.video_box {\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.video_left,\r\n\t.video_right {\r\n\t\twidth: 50%;\r\n\t}\r\n\r\n\t.video_left {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t}\r\n\r\n\t.video_right {\r\n\t\tdisplay: flex;\r\n\t\tflex-wrap: wrap;\r\n\t}\r\n\r\n\t.video_item {\r\n\t\tposition: relative;\r\n\t\tbackground-color: #fff;\r\n\t\tborder: 1px solid #d1d1d1;\r\n\t}\r\n\r\n\t.video_item1 {\r\n\t\twidth: 100%;\r\n\t\tflex: auto;\r\n\t}\r\n\r\n\t.video_item2 {\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t.video_item3 {\r\n\t\twidth: 50%;\r\n\t}\r\n\r\n\t.video_name {\r\n\t\tposition: absolute;\r\n\t\ttop: 5px;\r\n\t\tleft: 5px;\r\n\t}\r\n\r\n\t.video_tag {\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\t}\r\n\r\n\t.set_case {\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.set_status {\r\n\t\tcolor: #fff;\r\n\t\tborder-radius: 10px;\r\n\t\tpadding: 4px 10px;\r\n\t}\r\n\r\n\t.off_status {\r\n\t\tbackground-color: #bbb;\r\n\t}\r\n\r\n\t.on_status {\r\n\t\tbackground-color: #3fd672;\r\n\t}\r\n\r\n\t.must {\r\n\t\tcolor: red;\r\n\t\tfont-size: 17px;\r\n\t\tposition: absolute;\r\n\t\tleft: -10px;\r\n\t\ttop: 0px;\r\n\t}\r\n\r\n\t.set_name {\r\n\t\tposition: relative;\r\n\t}\r\n\r\n\t.set_zhuce .set_name {\r\n\t\twidth: 140px;\r\n\t}\r\n\r\n\t.set_equipment .set_name {\r\n\t\twidth: 90px;\r\n\t}\r\n\r\n\t.margin {\r\n\t\tmargin-right: 20px;\r\n\t}\r\n\r\n\t.his_left {\r\n\t\twidth: 30%;\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.his_right {\r\n\t\twidth: 70%;\r\n\t\tdisplay: flex;\r\n\t}\r\n\r\n\t.ipt_number {\r\n\t\tflex: none;\r\n\t\twidth: 50%;\r\n\t}\r\n\r\n\t.call_box {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\talign-items: flex-start;\r\n\t\theight: 100%;\r\n\t}\r\n\r\n\t.call_box .set_name {\r\n\t\tmargin-bottom: 12px;\r\n\t}\r\n\r\n\t.call_case {\r\n\t\tdisplay: flex;\r\n\t\theight: 135px;\r\n\t\toverflow: hidden auto;\r\n\t\tborder: 1px solid #d1d1d1;\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t.his_case {\r\n\t\tdisplay: flex;\r\n\t\theight: 182px;\r\n\t\toverflow: hidden auto;\r\n\t\tborder: 1px solid #d1d1d1;\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t#call_list {\r\n\t\tflex: auto;\r\n\t}\r\n\r\n\t#call_list>li,\r\n\t#his_list>li {\r\n\t\theight: 30px;\r\n\t\tline-height: 30px;\r\n\t\tpadding: 0 20px;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t#call_list>li:hover,\r\n\t#his_list>li:hover {\r\n\t\tbackground-color: #eee;\r\n\t}\r\n\r\n\t.set_his {\r\n\t\tflex-direction: column;\r\n\t\talign-items: flex-start;\r\n\t}\r\n\r\n\t.set_his .set_name {\r\n\t\tmargin-bottom: 15px;\r\n\t}\r\n\r\n\t#his_list {\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t.set_speed {\r\n\t\tflex-direction: column;\r\n\t\talign-items: flex-start;\r\n\t}\r\n\r\n\t#speed {\r\n\t\tmargin-top: 20px;\r\n\t}\r\n\r\n\t.ipt_call {\r\n\t\tflex: none;\r\n\t\twidth: 30%;\r\n\t\tmargin-right: 15px;\r\n\t}\r\n\r\n\t.check_box {\r\n\t\tcursor: pointer;\r\n\t\twidth: 20%;\r\n\t}\r\n\r\n\t.check {\r\n\t\tposition: relative;\r\n\t\ttop: 2px;\r\n\t}\r\n\r\n\t.come_box {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: column;\r\n\t\tjustify-content: space-between;\r\n\t}\r\n\r\n\t.set_first {\r\n\t\tmargin-top: 30px;\r\n\t}\r\n\r\n\t.group_right {\r\n\t\tmargin-left: 20px;\r\n\t}\r\n</style>"],"sourceRoot":"src/components"}]}