From c6e460ad97106a20f1f2769490521ca2d74154c8 Mon Sep 17 00:00:00 2001 From: duoaohui <928970622@qq.com> Date: Sat, 6 Jun 2026 13:38:50 +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 | 41 ++++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/frontend/src/pages/cloud-law/video-call.vue b/frontend/src/pages/cloud-law/video-call.vue index 3e5a052..67c1a56 100644 --- a/frontend/src/pages/cloud-law/video-call.vue +++ b/frontend/src/pages/cloud-law/video-call.vue @@ -166,8 +166,7 @@ import { minimizeCloudLawMeeting } from '@/utils/cloudLawMiniProgram' import { notifyCloudLawBackendEnd, notifyCloudLawParentCallEnded, - isCloudLawPcIframe, - notifyNativeMiniProgramHangup + isCloudLawPcIframe } from '@/utils/cloudLawVoiceCall' import bgImage from '@/static/bg.png' import hangupIcon from '@/static/cacel.png' @@ -1054,14 +1053,36 @@ const hangup = async () => { if (isLawRole.value) { notifyMiniProgramCallEndedOnce() } else { - // 用户端跳转咨询详情:postMessage 仅作辅助。 - // 房间已 endMeeting 同源结束,这里用 URL 桥接(cloudLawHangup=1)触发原生页 onWebViewLoad, - // 由原生页用 uni.reLaunch 跳转——web-view JSSDK 的 reLaunch 无成功回调,当前微信环境会 - // navigateTo:fail timeout 静默失败却误标记已跳转,导致停不到咨询详情,故不依赖它。 - notifyMiniProgramCallEndedOnce() - setTimeout(() => { - notifyNativeMiniProgramHangup() - }, 300) + // 关键修复:web-view 的 wx.miniProgram.reLaunch/navigateTo 在本环境会 navigateTo:fail + // timeout、根本不触发小程序导航,导致原生承载页 onUnload 不执行、同域 /end 不被调, + // 会议结束不了(status 一直 accepted、律师端不结束)。 + // navigateBack 不加载新页面、可靠触发后退 → 原生页 onUnload 调同域 /end 结束会议 + //(等同用户手点左上角返回箭头,已验证可行);同时 postMessage 携带 consultId, + // 原生页 onMessage 收到后用 uni.reLaunch 跳咨询详情。 + const returnUrl = buildMiniProgramReturnUrl() + const mp = getMiniProgram() + try { + if (mp && typeof mp.postMessage === 'function') { + mp.postMessage({ + data: { + type: 'cloudLawCallEnded', + action: 'cloudLawCallEnded', + callId: callId.value, + consultId: consultId.value, + returnUrl + } + }) + } + } catch (e) { + console.warn('[CloudLawVideoCall] postMessage failed', e) + } + try { + if (mp && typeof mp.navigateBack === 'function') { + mp.navigateBack({ delta: 1 }) + } + } catch (e) { + console.warn('[CloudLawVideoCall] navigateBack failed', e) + } } } }