视频连线
This commit is contained in:
@@ -154,6 +154,7 @@ const userStore = useUserStore()
|
||||
const rawCode = ref('')
|
||||
const callId = ref('')
|
||||
const cloudLawApiBase = ref('')
|
||||
const cloudLawToken = ref('')
|
||||
const callMode = ref('video')
|
||||
const joining = ref(false)
|
||||
const joinError = ref('')
|
||||
@@ -382,6 +383,20 @@ const requestCloudLawCommands = (url) => {
|
||||
})
|
||||
}
|
||||
|
||||
const notifyCloudLawEnd = () => {
|
||||
if (!callId.value || !cloudLawApiBase.value) return Promise.resolve()
|
||||
return new Promise(resolve => {
|
||||
uni.request({
|
||||
url: resolveCloudLawApiUrl(`/api/applet/voiceConnection/${encodeURIComponent(callId.value)}/end`),
|
||||
method: 'POST',
|
||||
data: {},
|
||||
header: cloudLawToken.value ? { 'Content-Type': 'application/json', token: `Bearer ${cloudLawToken.value}` } : { 'Content-Type': 'application/json' },
|
||||
timeout: 5000,
|
||||
complete: resolve
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const pollCommandsOnce = async () => {
|
||||
if (!callId.value || !meetingStore.isInMeeting || leaving.value || ended.value || commandPolling) return
|
||||
commandPolling = true
|
||||
@@ -687,6 +702,7 @@ const hangup = async () => {
|
||||
leaving.value = true
|
||||
stopCommandPolling()
|
||||
try {
|
||||
await notifyCloudLawEnd()
|
||||
// 云律视频咨询:发起人(小程序端用户)在 CreateRoomForInternal 时被加成 host,
|
||||
// 用户挂机 = 咨询结束,无条件 endMeeting 让律师 iframe 收到 room.ended 自动退出。
|
||||
// 不依赖 meetingStore.isHost(host_id/userId 偶发类型不一致导致误判 false 只走 leave,
|
||||
@@ -712,6 +728,7 @@ onLoad(query => {
|
||||
rawCode.value = query?.code || query?.roomCode || ''
|
||||
callId.value = query?.callId || query?.call_id || ''
|
||||
cloudLawApiBase.value = query?.cloudLawApiBase || query?.cloud_law_api_base || ''
|
||||
cloudLawToken.value = query?.cloudLawToken || query?.cloud_law_token || ''
|
||||
const mode = String(query?.mode || query?.callType || query?.type || '').toLowerCase()
|
||||
callMode.value = mode === 'voice' || mode === 'audio' ? 'voice' : 'video'
|
||||
joinMeeting()
|
||||
@@ -752,6 +769,9 @@ onBeforeUnmount(() => {
|
||||
|
||||
onUnload(() => {
|
||||
stopCommandPolling()
|
||||
if (!ended.value && callId.value) {
|
||||
notifyCloudLawEnd().catch(() => {})
|
||||
}
|
||||
if (meetingStore.isInMeeting && meetingStore.localState !== MEETING_LOCAL_STATE_LEAVING) {
|
||||
meetingStore.leave().catch(() => {})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user