From 1aaa2392eea4694076c6a329a5b88436ceb50194 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期三, 17 九月 2025 15:13:48 +0800
Subject: [PATCH] 电话更新

---
 src/components/CallButton/index.vue |   80 +++++++++++++++++++++++++++++++++++----
 1 files changed, 71 insertions(+), 9 deletions(-)

diff --git a/src/components/CallButton/index.vue b/src/components/CallButton/index.vue
index 429a327..d3cb005 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://192.168.100.6:7443",
-        sipUri: `${randomNum}` + "@192.168.100.6",
+        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("0" + 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.100.6`;
+        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