From 6b5e402f3a2faf2ebbe52be522261417e87304ac Mon Sep 17 00:00:00 2001 From: kura Date: Thu, 7 May 2026 22:42:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=91=84=E5=83=8F=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/file/index.vue | 45 ++ src/pages/file/item/desptopView.vue | 468 +++++++++++++++++- .../file/item/filePermissionSetDialog.vue | 26 +- src/pages/file/utils/common.ts | 8 +- src/pages/file/utils/peer.ts | 127 ++++- 5 files changed, 627 insertions(+), 47 deletions(-) diff --git a/src/pages/file/index.vue b/src/pages/file/index.vue index c90de07..c5e3831 100644 --- a/src/pages/file/index.vue +++ b/src/pages/file/index.vue @@ -46,6 +46,22 @@ > 通话 +
+ + + + +
([]); const selectedRemoteFiles = ref([]); @@ -150,6 +167,15 @@ const requestCall = () => { } peer.requestCall(targetId.value); }; +const requestCamera = () => { + if (!isConnected.value) return; + if (isCameraActive.value) { + peer.endMedia(sign2peerid(targetId.value), "camera"); + return; + } + peer.requestCamera(targetId.value); +}; + const shareUrl = async () => { if (myId.value) { const url = @@ -289,6 +315,7 @@ onMounted(() => { clearConnectedPeer(event.detail.peer); isDesktopActive.value = false; isCallActive.value = false; + isCameraActive.value = false; notification.error({ message: event.detail.peer + "连接已断开", }); @@ -307,6 +334,8 @@ onMounted(() => { isDesktopActive.value = true; } else if (event.detail.type === "call") { isCallActive.value = true; + } else if (event.detail.type === "camera") { + isCameraActive.value = true; } }) as EventListener); @@ -322,15 +351,24 @@ onMounted(() => { } }) as EventListener); + peer.on("camera-started", ((event: CustomEvent) => { + if (isActivePeer(event.detail.peerId)) { + isCameraActive.value = true; + } + }) as EventListener); + peer.on("media-ended", ((event: CustomEvent) => { if (!isActivePeer(event.detail.peerId)) return; if (event.detail.type === "desktop") { isDesktopActive.value = false; } else if (event.detail.type === "call") { isCallActive.value = false; + } else if (event.detail.type === "camera") { + isCameraActive.value = false; } }) as EventListener); }); +