对接
This commit is contained in:
@@ -83,8 +83,10 @@ import { ArrowLeft, CircleCheck, CircleClose, Clock, CopyDocument, Delete, Docum
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { useUserStore } from '@/pinia/modules/user'
|
||||
import { getLiveStreams, getRoom } from '../api/live'
|
||||
import { getLiveStreams, getRoomDetail } from '../api/live'
|
||||
import { useLiveRTC } from '../composables/useLiveRTC'
|
||||
import { getRoomLinks } from '../utils/roomLinks'
|
||||
import { copyLiveText } from '../utils/clipboard'
|
||||
|
||||
defineOptions({ name: 'LiveDiagnostics' })
|
||||
|
||||
@@ -106,9 +108,12 @@ const tests = reactive({
|
||||
viewer: { status: 'idle', detail: '等待检测观众下行链路' },
|
||||
})
|
||||
|
||||
const base = () => `${window.location.origin}${window.location.pathname}#`
|
||||
const viewerURL = computed(() => `${base()}/live/room/${route.params.id}`)
|
||||
const studioURL = computed(() => `${base()}/live/studio/${route.params.id}`)
|
||||
const roomLinks = computed(() => {
|
||||
try { return getRoomLinks(route.params.id) }
|
||||
catch { return { viewer: '', studio: '' } }
|
||||
})
|
||||
const viewerURL = computed(() => roomLinks.value.viewer)
|
||||
const studioURL = computed(() => roomLinks.value.studio)
|
||||
const currentUserID = computed(() => Number(userStore.userInfo?.ID || 0))
|
||||
const currentUserLabel = computed(() => userStore.userInfo?.nickName || userStore.userInfo?.userName || `用户 ${currentUserID.value || '-'}`)
|
||||
const canPublish = computed(() => Boolean(room.value?.enabled && currentUserID.value && Number(room.value?.anchorUserId) === currentUserID.value && !room.value?.streamUrl))
|
||||
@@ -147,7 +152,7 @@ const sleep = (duration) => new Promise((resolve) => window.setTimeout(resolve,
|
||||
|
||||
const loadRoom = async () => {
|
||||
if (userStore.token && !currentUserID.value) await userStore.GetUserInfo()
|
||||
const response = await getRoom(Number(route.params.id))
|
||||
const response = await getRoomDetail(Number(route.params.id))
|
||||
if (response.code !== 0 || !response.data) throw new Error(response.msg || '房间接口不可用')
|
||||
room.value = response.data
|
||||
return response.data
|
||||
@@ -158,6 +163,7 @@ const testLinks = async () => {
|
||||
tests.link.detail = '正在请求房间接口和运行状态'
|
||||
try {
|
||||
const item = await loadRoom()
|
||||
if (!viewerURL.value || !studioURL.value) throw new Error('PC 站点地址配置无效,无法生成房间链接')
|
||||
const streams = await getLiveStreams()
|
||||
runtime.value = (streams.data?.streams || []).find((stream) => stream.streamId === item.streamId) || null
|
||||
if (!item.enabled) throw new Error('房间接口正常,但直播间已停用')
|
||||
@@ -280,8 +286,15 @@ const report = () => ({
|
||||
publisher: { state: publisherRTC.state.value, diagnostics: { ...publisherRTC.diagnostics }, events: publisherRTC.events.value },
|
||||
viewer: { state: viewerRTC.state.value, diagnostics: { ...viewerRTC.diagnostics }, events: viewerRTC.events.value },
|
||||
})
|
||||
const copyReport = async () => { await navigator.clipboard.writeText(JSON.stringify(report(), null, 2)); ElMessage.success('诊断报告已复制') }
|
||||
const copy = async (value) => { await navigator.clipboard.writeText(value); ElMessage.success('链接已复制') }
|
||||
const copyReport = async () => {
|
||||
try { await copyLiveText(JSON.stringify(report(), null, 2)); ElMessage.success('诊断报告已复制') }
|
||||
catch { ElMessage.warning('复制失败,请检查浏览器剪贴板权限') }
|
||||
}
|
||||
const copy = async (value) => {
|
||||
if (!value) return ElMessage.error('无法生成链接,请检查 PC 站点地址配置')
|
||||
try { await copyLiveText(value); ElMessage.success('链接已复制') }
|
||||
catch { ElMessage.warning('复制失败,请选中地址复制') }
|
||||
}
|
||||
const open = (value) => window.open(value, '_blank', 'noopener')
|
||||
const clearLogs = () => { publisherRTC.events.value = []; viewerRTC.events.value = [] }
|
||||
const stopConnections = () => { publisherRTC.disconnect(); viewerRTC.disconnect() }
|
||||
|
||||
Reference in New Issue
Block a user