diff --git a/frontend/src/pages/cloud-law/video-call.vue b/frontend/src/pages/cloud-law/video-call.vue index 9ff1e26..4e8ae22 100644 --- a/frontend/src/pages/cloud-law/video-call.vue +++ b/frontend/src/pages/cloud-law/video-call.vue @@ -494,9 +494,18 @@ const hangup = async () => { if (leaving.value) return leaving.value = true try { - await meetingStore.leave() + // 云律视频咨询:发起人(小程序端用户)在 CreateRoomForInternal 时被加成 host, + // 用户挂机即视为整个咨询结束,直接 endMeeting 让另一端(律师 iframe)也收到 room.ended 退出。 + // 非 host 兜底走 leave,避免异常会议状态下挂机被卡住。 + if (meetingStore.isHost) { + await meetingStore.endMeeting() + } else { + await meetingStore.leave() + } } catch (err) { - console.warn('[CloudLawVideoCall] leave failed', err) + console.warn('[CloudLawVideoCall] hangup failed', err) + // endMeeting 失败时兜底 leave,至少自己先退出 + try { await meetingStore.leave() } catch (leaveErr) { console.warn('[CloudLawVideoCall] fallback leave failed', leaveErr) } } finally { ended.value = true leaving.value = false