From a7e91a2cdec42fbc2e0a8f58ae79ad39bfc8db65 Mon Sep 17 00:00:00 2001 From: duoaohui <928970622@qq.com> Date: Sat, 6 Jun 2026 12:16:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E8=90=A5=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/cloud-law/video-call.vue | 28 +++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/frontend/src/pages/cloud-law/video-call.vue b/frontend/src/pages/cloud-law/video-call.vue index f0a3e19..8658161 100644 --- a/frontend/src/pages/cloud-law/video-call.vue +++ b/frontend/src/pages/cloud-law/video-call.vue @@ -162,7 +162,7 @@ import { MEETING_ENDED_REASON_LABEL } from '@/constants/meeting' import VideoTile from '@/components/meeting/VideoTile.vue' -import { minimizeCloudLawMeeting } from '@/utils/cloudLawMiniProgram' +import { minimizeCloudLawMeeting, notifyCloudLawCallEnded, getMiniProgram } from '@/utils/cloudLawMiniProgram' import { notifyCloudLawBackendEnd, notifyCloudLawParentCallEnded, @@ -1018,10 +1018,6 @@ const hangup = async () => { userInitiatedHangup.value = true leaving.value = true stopCommandPolling() - if (!isLawRole.value) { - // 优先触发小程序原生 /end(web-view 跨域直连云律 API 不可靠) - notifyNativeMiniProgramHangup() - } try { // 先通知云律后端结束本次通话: // - 用户端:/api/applet/voiceConnection/{callId}/end @@ -1055,14 +1051,18 @@ const hangup = async () => { } finally { ended.value = true leaving.value = false - // 用户端:优先尝试跳转小程序咨询详情;失败则依赖小程序页轮询 /end 状态兜底 - notifyMiniProgramCallEndedOnce() if (!isLawRole.value) { + // 挂断流程完成后再通知小程序:避免提前 reload web-view 中断 endMeeting + notifyMiniProgramCallEndedOnce() setTimeout(() => { - if (ended.value && !miniProgramRedirected) { + if (!miniProgramRedirected) { goToConsultDetail() } - }, 600) + // 跳转失败时再用 URL 桥接触发原生页 @load 兜底 + if (!miniProgramRedirected) { + notifyNativeMiniProgramHangup() + } + }, 400) } } } @@ -1130,8 +1130,16 @@ onMounted(() => { // 对方挂断或会议结束时,通知云律后端 + 父页面(PC 律师浮窗)+ 小程序 notifyCloudLawEnd().finally(() => { if (isLawRole.value) { + if (isCloudLawPcIframe()) { + notifyCloudLawParentCallEnded(callId.value) + return + } + if (getMiniProgram()) { + notifyCloudLawCallEnded(callId.value) + return + } notifyCloudLawParentCallEnded(callId.value) - if (isCloudLawPcIframe()) return + return } notifyMiniProgramCallEndedOnce() scheduleEndedRedirect()