From e8c62bd430b9697d3f954125b7ec9f61f18347a2 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期一, 20 十月 2025 11:19:34 +0800
Subject: [PATCH] 测试完成
---
src/components/CallButton/index.vue | 82 ++++++++++++++++++++++++++++++++++++-----
1 files changed, 72 insertions(+), 10 deletions(-)
diff --git a/src/components/CallButton/index.vue b/src/components/CallButton/index.vue
index 78ea734..bc17eea 100644
--- a/src/components/CallButton/index.vue
+++ b/src/components/CallButton/index.vue
@@ -28,6 +28,7 @@
<script>
import sipService from "@/utils/sipService";
+import { CallsetState, CallgetList } from "@/api/AiCentre/index";
export default {
props: {
@@ -37,15 +38,17 @@
},
},
data() {
- const randomNum = Math.floor(Math.random() * 20) + 1000; // 鍐呴儴瀹氫箟
+ const randomNum = Math.floor(Math.random() * 20) + 1000; // 瀹氫箟闅忔満鍒嗘満鍙�
return {
isCalling: false,
+ randomNum: randomNum,
+ randomID: null,
callStatus: "idle", // idle, calling, connected, ended
sipStatus: "鏈繛鎺�",
sipStatusClass: "status-disconnected",
sipConfig: {
- wsUrl: "wss://1192.170.66.107:7443",
- sipUri: `${randomNum}` + "@1192.170.66.107",
+ wsUrl: "wss://192.168.10.124:7443",
+ sipUri: "",
password: "Smartor@2023",
displayName: "Web 灏忛緳",
// realm: "9.208.5.18:8090",
@@ -78,13 +81,22 @@
return this.isCalling ? "閫氳瘽涓�..." : "涓�閿懠鍙�";
},
},
- mounted() {
- console.log('褰撳墠鍒嗘満鍙�',this.sipConfig);
+ created() {
+ // CallgetList();
+ },
+ async mounted() {
+ await this.CallgetList();
sipService.init(this.sipConfig);
+ // 璁剧疆鐘舵�佸洖璋�
sipService.onStatusChange = (status) => {
this.sipStatus = status.text;
this.sipStatusClass = `status-${status.type}`;
+
+ // 澶勭悊娉ㄥ唽澶辫触鍜屾柇寮�杩炴帴鎯呭喌
+ if (status.type === "failed" || status.type === "disconnected") {
+ this.overCallsetState(); // 閲婃斁鍒嗘満鍙�
+ }
};
// 鐩戝惉閫氳瘽鐘舵�佸彉鍖�
@@ -115,7 +127,7 @@
this.isCalling = true;
console.log("寮�濮嬪懠鍙細", sipService);
- await sipService.makeCall("0"+this.phoneNumber);
+ await sipService.makeCall(this.phoneNumber);
} catch (error) {
let registrationTime = Date.now(); // 璁板綍娉ㄩ攢鎴愬姛鏃堕棿
console.log(registrationTime, "鍛煎彨澶辫触鏃堕棿");
@@ -123,7 +135,7 @@
// this.callStatus = "ended";
// this.isCalling = false;
//this.$message.error(`鍛煎彨澶辫触: ${error.message}`);
- try {
+ try {
// 鍏堟鏌ユ槸鍚﹀彲浠ュ懠鍙�
const { canCall, reason } = sipService.canMakeCall();
if (!canCall) {
@@ -133,19 +145,69 @@
this.isCalling = true;
console.log("寮�濮嬪懠鍙細", sipService);
- await sipService.makeCall("0"+this.phoneNumber);
+ await sipService.makeCall("0" + this.phoneNumber);
} catch (error) {
- this.callStatus = "ended";
- this.isCalling = false;
+ this.callStatus = "ended";
+ this.isCalling = false;
}
}
},
+ // 鏌ヨ鍙敤鍒嗘満鍙�
+ async CallgetList() {
+ try {
+ const res = await CallgetList();
+ this.randomNum = res.data[0].tel;
+ this.randomID = res.data[0].id;
+ // 姝g‘璁剧疆 sipUri
+ this.sipConfig.sipUri = `${this.randomNum}@192.168.10.124`;
+ this.startCallsetState();
+ } catch (error) {
+ console.error("鑾峰彇鍒嗘満鍙峰け璐�:", error);
+ this.updateStatus("failed", "鑾峰彇鍒嗘満鍙峰け璐�");
+ }
+ },
+ async startCallsetState() {
+ try {
+ await CallsetState({ id: this.randomID, state: 1 });
+ console.log("鍒嗘満鍙风姸鎬佹洿鏂颁负浣跨敤涓�");
+ } catch (error) {
+ console.error("鏇存柊鍒嗘満鍙风姸鎬佸け璐�:", error);
+ }
+ },
+ async overCallsetState() {
+ try {
+ if (this.randomID) {
+ await CallsetState({ id: this.randomID, state: 0 });
+ console.log("鍒嗘満鍙风姸鎬佹洿鏂颁负鍙敤");
+ }
+ } catch (error) {
+ console.error("閲婃斁鍒嗘満鍙峰け璐�:", error);
+ }
+ },
endCall() {
sipService.endCall();
this.callStatus = "ended";
this.isCalling = false;
},
+ cleanupResources() {
+ // 缁撴潫閫氳瘽
+ if (this.isCalling) {
+ sipService.endCall();
+ }
+
+ // 閲婃斁鍒嗘満鍙�
+ this.overCallsetState();
+
+ // 鏂紑 SIP 杩炴帴
+ if (sipService.ua) {
+ sipService.ua.stop();
+ }
+ },
+ },
+ beforeUnmount() {
+ // 缁勪欢閿�姣佹椂纭繚閲婃斁璧勬簮
+ this.cleanupResources();
},
};
</script>
--
Gitblit v1.9.3