From 8a14aa01f801389f125885b4eb2c5a8ffd7da85d Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期四, 11 九月 2025 12:07:27 +0800
Subject: [PATCH] 测试完成
---
src/utils/sipService.js | 46 ++++++++++++++++++++---
src/components/CallButton/index.vue | 15 +++++++
2 files changed, 55 insertions(+), 6 deletions(-)
diff --git a/src/components/CallButton/index.vue b/src/components/CallButton/index.vue
index c9adf5c..b52d1f9 100644
--- a/src/components/CallButton/index.vue
+++ b/src/components/CallButton/index.vue
@@ -61,6 +61,15 @@
};
return statusMap[this.callStatus];
},
+ countdownText() {
+ if (this.sipStatus !== "宸叉敞鍐�") return "";
+
+ const { canCall, reason } = sipService.canMakeCall();
+ if (!canCall && reason.includes("绛夊緟")) {
+ return reason;
+ }
+ return "";
+ },
callStatusClass() {
return `status-${this.callStatus}`;
},
@@ -94,6 +103,12 @@
}
try {
+ // 鍏堟鏌ユ槸鍚﹀彲浠ュ懠鍙�
+ const { canCall, reason } = sipService.canMakeCall();
+ if (!canCall) {
+ this.$message.warning(reason);
+ return;
+ }
this.callStatus = "calling";
this.isCalling = true;
console.log('寮�濮嬪懠鍙細',sipService);
diff --git a/src/utils/sipService.js b/src/utils/sipService.js
index df2cda9..b6f0220 100644
--- a/src/utils/sipService.js
+++ b/src/utils/sipService.js
@@ -7,6 +7,8 @@
this.onStatusChange = null;
this.onCallStatusChange = null;
this.onIncomingCall = null;
+ this.isRegistered = false; // 鏂板娉ㄥ唽鐘舵�佹爣蹇�
+ this.registrationTime = null; // 鏂板娉ㄥ唽鎴愬姛鏃堕棿鎴�
}
init(config) {
@@ -28,12 +30,22 @@
this.ua.start();
// 浜嬩欢鐩戝惉
- this.ua.on("registered", () =>
- this.updateStatus("registered", "宸叉敞鍐�56")
- );
- this.ua.on("registrationFailed", (e) =>
- this.updateStatus("failed", `娉ㄥ唽澶辫触11: ${e.cause}`)
- );
+ // 浜嬩欢鐩戝惉
+ this.ua.on("registered", () => {
+ this.isRegistered = true;
+ this.registrationTime = Date.now(); // 璁板綍娉ㄥ唽鎴愬姛鏃堕棿
+ this.updateStatus("registered", "宸叉敞鍐�");
+ });
+
+ this.ua.on("registrationFailed", (e) => {
+ this.isRegistered = false;
+ this.updateStatus("failed", `娉ㄥ唽澶辫触: ${e.cause}`);
+ });
+
+ this.ua.on("unregistered", () => {
+ this.isRegistered = false;
+ this.updateStatus("disconnected", "宸叉敞閿�");
+ });
this.ua.on("disconnected", () =>
this.updateStatus("disconnected", "杩炴帴鏂紑")
);
@@ -49,8 +61,30 @@
throw error;
}
}
+// 鏂板鏂规硶锛氭鏌ユ槸鍚﹀彲浠ュ懠鍙�
+ canMakeCall(minDelay = 2000) {
+ if (!this.isRegistered) {
+ return { canCall: false, reason: "SIP鏈敞鍐岋紝鏃犳硶鍛煎彨" };
+ }
+ const now = Date.now();
+ const timeSinceRegistration = now - this.registrationTime;
+
+ if (timeSinceRegistration < minDelay) {
+ const remaining = minDelay - timeSinceRegistration;
+ return {
+ canCall: false,
+ reason: `娉ㄥ唽鎴愬姛锛岃绛夊緟 ${Math.ceil(remaining / 1000)} 绉掑悗鍐嶅懠鍙玚
+ };
+ }
+
+ return { canCall: true, reason: "" };
+ }
makeCall(targetNumber) {
+ const { canCall, reason } = this.canMakeCall();
+ if (!canCall) {
+ return Promise.reject(new Error(reason));
+ }
return new Promise((resolve, reject) => {
try {
if (!this.ua) {
--
Gitblit v1.9.3