From 486714bc105a0f2d60dfdde491c8494d01a97391 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Wed, 15 Oct 2025 17:05:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 6 +- src/page/Meeting/index.module.scss | 23 ++---- src/page/Meeting/index.tsx | 115 ++++++++++++++++------------- 3 files changed, 71 insertions(+), 73 deletions(-) diff --git a/main.js b/main.js index 15ab458..b044a2f 100644 --- a/main.js +++ b/main.js @@ -703,9 +703,9 @@ app.on('ready', () => { childWindow[config.key].setBounds({ width: config.width, height: config.height }) break; default: - mainWindow.setMinimumSize(250, config.height); - mainWindow.setMaximumSize(250, config.height); - mainWindow.setSize(250, config.height) + mainWindow.setMinimumSize(config.width, config.height); + mainWindow.setMaximumSize(config.width, config.height); + mainWindow.setSize(config.width, config.height) break; } }); diff --git a/src/page/Meeting/index.module.scss b/src/page/Meeting/index.module.scss index 1f2409d..87e9b40 100644 --- a/src/page/Meeting/index.module.scss +++ b/src/page/Meeting/index.module.scss @@ -103,20 +103,6 @@ background-color: #1F2022; left: 0; top: 0; - z-index: 3000; - - .meetingAbsoluteLoading { - background: black; - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - display: flex; - justify-content: center; - align-items: center; - z-index: 1; - } .meetingAbsoluteText { position: absolute; @@ -124,7 +110,7 @@ left: 0; color: white; text-align: center; - z-index: 2; + z-index: 3; background-color: rgba(0, 0, 0, 0.5); cursor: pointer; font-size: 14px; @@ -234,7 +220,6 @@ #videoView { position: relative; - border: 1px red solid; } .standardModeIcon { @@ -424,7 +409,11 @@ height: 160px; } } - + .meetingContentBodyLeftSpeakerModeNoScrollbar{ + &::-webkit-scrollbar { + display: none; + } + } // 单画面模式 .meetingContentBodyLeftSingleScreenMode { width: 100%; diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 672ea5d..e529fc5 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -639,7 +639,10 @@ const Meeting: React.FC = () => { if (isShare) { const item = roomUserList.find((item: any) => item.screenShareId === String(isShare)) setIsShareUser(item || null) - setMeetingMode('StandardMode') + setIsScreenCapture(isScreenCaptureValue => { + setMeetingMode(isScreenCaptureValue ? 'SpeakerMode' : 'StandardMode') + return isScreenCaptureValue + }) } }, [isShare, roomUserList]); @@ -745,7 +748,10 @@ const Meeting: React.FC = () => { const temp = JSON.parse(item.contentString) if (temp.type === 'mode') { temp.msg ? message.success(`管理员已将会议室显示模式更新为${getMeetingContentBodyLeftModeText(temp.mode)}`) : null; - setMeetingMode(temp.mode) + setIsScreenCapture(isScreenCaptureValue => { + setMeetingMode(isScreenCaptureValue ? 'SpeakerMode' : temp.mode) + return isScreenCaptureValue + }) } } catch (error) { @@ -1164,13 +1170,7 @@ const Meeting: React.FC = () => { useEffect(() => { if (isScreenCapture) { - agora.setupLocalVideo({ - uid: Number(user.uid), - view: document.getElementById(`meetingAbsoluteVideo`) as HTMLElement, - channelId: state.channelId, - sourceType: VideoSourceType.VideoSourceCameraPrimary, - type: true - }) + } }, [isScreenCapture]); @@ -1289,18 +1289,11 @@ const Meeting: React.FC = () => { observer?.unobserve(element); }); const observerObject = new IntersectionObserver(async (entries: IntersectionObserverEntry[], _observer: IntersectionObserver) => { - setIsScreenCapture((bool: boolean) => { - entries.forEach(async (entry) => { - if (entry.target.id !== user.uid) { - await agora.muteRemoteVideoStreamEx(Number(entry.target.id), bool ? true : !entry.isIntersecting) - } - }); - return bool - }) - setIsScreenCapture((bool: boolean) => { - agora.muteRemoteVideoStreamEx(Number(currentVideoId), bool) - return bool - }) + entries.forEach(async (entry) => { + if (entry.target.id !== user.uid) { + await agora.muteRemoteVideoStreamEx(Number(entry.target.id), !entry.isIntersecting) + } + }); }, { threshold: 0, root: document.getElementById('videoView') }); setObserver(observerObject) elements.forEach(element => { @@ -1608,7 +1601,10 @@ const Meeting: React.FC = () => { const peoPleLength = res.filter((item: any) => (role.ID.includes(item.roleId) || item.isRoomManager) && item.isRoom).length setIsAdmin(peoPleLength) if (peoPleLength > 6) { - setMeetingMode('StandardMode') + setIsScreenCapture(isScreenCaptureValue => { + setMeetingMode(isScreenCaptureValue ? 'SpeakerMode' : 'StandardMode') + return isScreenCaptureValue + }) } return res }) @@ -2143,7 +2139,7 @@ const Meeting: React.FC = () => { window.electron.createChildWindow('show') setKeyOpenChildWindow('shareScreenWindow', true) window.electron.setMainWindowSize({ - width: 250, + width: 270, height: 160, }) window.electron.setPosition('right') @@ -2205,7 +2201,6 @@ const Meeting: React.FC = () => { } // 停止共享 const stopScreenCapture = async (): Promise => { - await agora.destroyRendererByView(`meetingAbsoluteVideo`) const footerListTemplate = [...footerList] await agora.leaveChannelEx(userInfo.screenShareId) agora.stopScreenCapture() @@ -2274,7 +2269,10 @@ const Meeting: React.FC = () => { const handleCustomStorageChange = async (e: any): Promise => { switch (e.key) { case 'meetingMode': - setMeetingMode(e.value) + setIsScreenCapture(isScreenCaptureValue => { + setMeetingMode(isScreenCaptureValue ? 'SpeakerMode' : e.value) + return isScreenCaptureValue + }) break; case 'quitMeeting': if (e.value) { @@ -2528,7 +2526,7 @@ const Meeting: React.FC = () => { case 'StandardMode': return styles.meetingContentBodyLeftStandardMode case 'SpeakerMode': - return styles.meetingContentBodyLeftSpeakerMode + return `${styles.meetingContentBodyLeftSpeakerMode} ${isScreenCapture ? styles.meetingContentBodyLeftSpeakerModeNoScrollbar : ''}` case 'SingleScreenMode': return styles.meetingContentBodyLeftSingleScreenMode case 'DualScreenMode': @@ -2699,18 +2697,23 @@ const Meeting: React.FC = () => { } setIsNetworkQuality(false) }}> - {isScreenCapture ?
-
{currentSpeakUser.length ? '正在说话:' + currentSpeakUser.join(';') : '正在说话:'}
- {footerList[0][1].active ?
- -
: null} -
{ + {isScreenCapture ?
+
{currentSpeakUser.length ? '正在说话:' + currentSpeakUser.join(';') : '正在说话:'}
+
{ setIsExpand(!isExpand) - window.electron.setChildWindow({ - height: isExpand ? 160 : 40, - key: 'main' + // 临时方案 + window.electron.setMainWindowSize({ + width: 270, + height: !isExpand ? 160 * 4 : 160, }) - }}>{isExpand ? '展开' : '收起'}
+ window.electron.setPosition('right') + // 更新壳子 + // window.electron.setChildWindow({ + // height: !isExpand ? 160 * 4 : 160, + // width: 270, + // key: 'main' + // }) + }}>{isExpand ? '收起' : '查看参会者'}
: null} {contextMenu ?
{ >移出会议 : null}
: null} {contextHolder} -
+ {isScreenCapture ? null :
- {isScreenCapture ? null : setIsNetworkQuality(false)}> @@ -2859,7 +2862,7 @@ const Meeting: React.FC = () => { {networkIcon(currentEffective)} 详情
- } +
{changeCurrentSeconds()}
会议号:{state.channelId} 会议名称:{state.roomName} @@ -2911,11 +2914,11 @@ const Meeting: React.FC = () => { : null}
-
+
}
- {isAdmin && currentLookUserAccount ? getSettingIcon() : null} + {isAdmin && currentLookUserAccount && !isScreenCapture ? getSettingIcon() : null}
{roomUserList.map((item: any, index: number) => { return (item.isRoom && item.isAdmin ?
{ className={`${styles.meetingContentSwiperCard} intersectionObserver-view`} key={index} onClick={() => { + if (isScreenCapture) { + return + } if (String(isShare) === item.screenShareId) { renderVideo(item.screenShareId) } else { @@ -2930,6 +2936,9 @@ const Meeting: React.FC = () => { } }} onContextMenu={(e: any) => { + if (isScreenCapture) { + return + } if (role.ID.includes(userInfo.roleId)) { setContextMenuStyle({ top: e.clientY, @@ -2944,12 +2953,12 @@ const Meeting: React.FC = () => {
- {meetingContentUser(item)} + {meetingContentUser(item, false, isScreenCapture)} {item.enableCamera ? null : meetingContentError(item)} - {String(isShare) === item.screenShareId ?
+ {String(isShare) === item.screenShareId && !isScreenCapture ?
屏幕分享中
: null} - {role.ID.includes(user.roleId) ? {item.isRoomManager || role.ID.includes(item.roleId) ?
:
{ +
:
{ const container = document.getElementById('videoView') as HTMLElement; container.scrollTop -= 100 }}> @@ -3064,7 +3073,7 @@ const Meeting: React.FC = () => { container.scrollLeft += 100 }}> -
:
{ +
:
{ const container = document.getElementById('videoView') as HTMLElement; container.scrollTop += 100 }}> @@ -3072,7 +3081,7 @@ const Meeting: React.FC = () => {
}
: null} {meetingMode !== "FreedomMode" && currentLookUserStatus === 0 ? -
+
{
@@ -3083,7 +3092,7 @@ const Meeting: React.FC = () => { {meetingContentUser(currentLookUserAccount, true)}
: null} {meetingMode !== "FreedomMode" && currentLookUserStatus === 1 ? -
+
{
@@ -3095,7 +3104,7 @@ const Meeting: React.FC = () => { {currentLookUserAccount.enableCamera ? null : meetingContentError(currentLookUserAccount)}
: null} {meetingMode !== "FreedomMode" && currentLookUserStatus === 2 ? -
+
@@ -3106,7 +3115,7 @@ const Meeting: React.FC = () => { {meetingContentUser(currentLookUserAccount, true)}
: null} {meetingMode !== "FreedomMode" && currentLookUserStatus === 3 ? -
+
@@ -3117,7 +3126,7 @@ const Meeting: React.FC = () => { {meetingContentUser(currentLookUserAccount, true)}
: null} {meetingMode !== "FreedomMode" && currentLookUserStatus === 4 ? -
+
@@ -3781,7 +3790,7 @@ const Meeting: React.FC = () => { ) } -const meetingContentUser = (item: any, bool?: boolean) => { +const meetingContentUser = (item: any, bool?: boolean, isScreenCapture?: boolean) => { return ( <>
@@ -3798,7 +3807,7 @@ const meetingContentUser = (item: any, bool?: boolean) => {
: ''} } - + {item.userName} {role.ID.includes(item.roleId) || item.isRoomManager ? role.ID.includes(item.roleId) ? '(管理员)' : '(发言人)' : ''}