From 1f192ea288e5b26f74eeec9f27883870f4ce94b6 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Thu, 16 Oct 2025 09:34:40 +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 --- src/page/Meeting/index.tsx | 128 ++++++++++++++++++++++--------------- 1 file changed, 78 insertions(+), 50 deletions(-) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index f9e8806..7882a69 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -184,6 +184,7 @@ const Meeting: React.FC = () => { const [isClickLock, setIsClickLock] = useState(false) const [open, setOpen] = useState(false) const [modeOpen, setModeOpen] = useState(false) + const [showCaret, setShowCaret] = useState(false) const [meetingMode, setMeetingMode] = useState('FreedomMode') const [userSearchValue, setUserSearchValue] = useState('') const [noViewChatList, setNoViewChatList] = useState(0) @@ -489,7 +490,7 @@ const Meeting: React.FC = () => { title: '录制' }, 1, 3) } else { - message.error('当前不在会议室!') + handleMessage().error('当前不在会议室!') } showSingIn() }, @@ -747,7 +748,7 @@ const Meeting: React.FC = () => { try { const temp = JSON.parse(item.contentString) if (temp.type === 'mode') { - temp.msg ? message.success(`管理员已将会议室显示模式更新为${getMeetingContentBodyLeftModeText(temp.mode)}`) : null; + temp.msg ? handleMessage().success(`管理员已将会议室显示模式更新为${getMeetingContentBodyLeftModeText(temp.mode)}`) : null; setIsScreenCapture(isScreenCaptureValue => { setMeetingMode(isScreenCaptureValue ? 'SpeakerMode' : temp.mode) return isScreenCaptureValue @@ -759,12 +760,12 @@ const Meeting: React.FC = () => { break; // 全员离开房间 case 'AllLeave': - message.success('管理员已结束会议!') + handleMessage().success('管理员已结束会议!') leaveChannel(false) break; // 移出会议 case 'ForceExitRoom': - message.success('管理员已将你移出会议!') + handleMessage().success('管理员已将你移出会议!') leaveChannel() break; // 更新视图模式 @@ -776,9 +777,9 @@ const Meeting: React.FC = () => { if (item.operUid && item.operUserName) { if (item.operUid !== userInfo.uid) { if (item.uid === userInfo.uid) { - message.success(`${item.operUserName}设置全员看你`) + handleMessage().success(`${item.operUserName}设置全员看你`) } else { - message.success(`${item.operUserName}设置全员看${item.uname}`) + handleMessage().success(`${item.operUserName}设置全员看${item.uname}`) } } } @@ -800,7 +801,7 @@ const Meeting: React.FC = () => { case 'OperMicr': if (item.operUid !== userInfo.uid) { if (item.user.uid === userInfo.uid) { - message.success(item.user.enableMicr ? '管理员已取消你的静音' : '你已被管理员静音') + handleMessage().success(item.user.enableMicr ? '管理员已取消你的静音' : '你已被管理员静音') } } setAllUserListData('OperMicr', item) @@ -809,7 +810,7 @@ const Meeting: React.FC = () => { case 'OperCamera': if (item.operUid !== userInfo.uid) { if (item.user.uid === userInfo.uid) { - message.success(item.user.enableCamera ? '管理员已开启你的摄像头' : '管理员已关闭你摄像头') + handleMessage().success(item.user.enableCamera ? '管理员已开启你的摄像头' : '管理员已关闭你摄像头') } } setAllUserListData('OperCamera', item) @@ -828,20 +829,20 @@ const Meeting: React.FC = () => { if (item.user.uid === item.uid) { if (item.user.uid === userInfo.uid) { await agora.allLeaveChannelEx() - message.success(`操作成功`) + handleMessage().success(`操作成功`) await agora.updateChannelMediaOptions(item.user.isRoomManager) await postOpenMicrApi(item.user.isRoomManager, userInfo.uid, false) await postOpenCameraApi(false, userInfo.uid) // 不管身份如何改变都关闭摄像头 await stopScreenCapture() } else { - message.success(`${item.user.userName}已结束发言`) + handleMessage().success(`${item.user.userName}已结束发言`) } } else { if (item.user.uid === userInfo.uid) { if (item.user.isRoomManager) { await agora.allLeaveChannelEx() } - message.success(`管理员${item.user.isRoomManager ? '设置' : '取消'}您为发言人`) + handleMessage().success(`管理员${item.user.isRoomManager ? '设置' : '取消'}您为发言人`) await agora.updateChannelMediaOptions(item.user.isRoomManager) setCurrentRequestSpeakType(res => { if (res === 'video') { @@ -856,7 +857,7 @@ const Meeting: React.FC = () => { }) await stopScreenCapture() } else { - message.success(`管理员${item.user.isRoomManager ? '设置' : '取消'}${item.user.userName}为发言人`) + handleMessage().success(`管理员${item.user.isRoomManager ? '设置' : '取消'}${item.user.userName}为发言人`) } } }) @@ -1046,7 +1047,7 @@ const Meeting: React.FC = () => { if (recorder) { recorder.start() recorder.onstart = async () => { - message.success('开始录制') + handleMessage().success('开始录制') } recorder.onerror = async () => { setRecorder('') @@ -1055,7 +1056,7 @@ const Meeting: React.FC = () => { changeStatusList({ title: '录制中' }, 1, 3) - message.error('录制失败,请重新录制!') + handleMessage().error('录制失败,请重新录制!') } recorder.onstop = async () => { @@ -1213,7 +1214,7 @@ const Meeting: React.FC = () => { // GetApplySpeak(state.channelId).then(res => { // if (res.code === 200) { // setIsClicked(true); - // message.success('申请发言成功') + // handleMessage().success('申请发言成功') // } // }) // }, @@ -1257,7 +1258,7 @@ const Meeting: React.FC = () => { } else { item.status-- if (item.status <= 0) { - message.error(`设置${user.userName}发言人失败!`) + handleMessage().error(`设置${user.userName}发言人失败!`) newApplyUserList.splice(index, 1) } } @@ -1483,7 +1484,7 @@ const Meeting: React.FC = () => { return bool }) } else if (reason === 3 || reason === 4) { - message.error({ + handleMessage().error({ content:
检查摄像头是否正常、未被占用,或尝试重新加入频道。 { stupWizardRef.current.changeModal(1); }}>前往修改摄像头
, @@ -1497,7 +1498,7 @@ const Meeting: React.FC = () => { uid: userInfo.uid, enableCamera: false }) - message.error({ + handleMessage().error({ content:
检查摄像头是否正常、未被占用,或尝试重新加入频道。 { stupWizardRef.current.changeModal(1); }}>前往修改摄像头
, @@ -1840,7 +1841,7 @@ const Meeting: React.FC = () => { GetApplySpeak(state.channelId).then(res => { if (res.code === 200) { setIsClicked(true); - message.success('申请发言成功') + handleMessage().success('申请发言成功') } }) }, @@ -1884,7 +1885,7 @@ const Meeting: React.FC = () => { } }) } else { - message.error(msgTips) + handleMessage().error(msgTips) } }) break; @@ -1894,7 +1895,7 @@ const Meeting: React.FC = () => { if (res) { await stopScreenCapture() } else { - message.error(msgTips) + handleMessage().error(msgTips) } }) if (row.title === '停止共享') { @@ -1913,7 +1914,7 @@ const Meeting: React.FC = () => { setCurrentRequestSpeakType('audio') requestSpeak() } else { - message.error('申请太频繁了,请稍后重试!'); + handleMessage().error('申请太频繁了,请稍后重试!'); } } }) @@ -1930,7 +1931,7 @@ const Meeting: React.FC = () => { setCurrentRequestSpeakType('video') requestSpeak() } else { - message.error('申请太频繁了,请稍后重试!'); + handleMessage().error('申请太频繁了,请稍后重试!'); } } }) @@ -1945,7 +1946,7 @@ const Meeting: React.FC = () => { if (res) { invitingPersonnelRef.current.changeInvitingPersonnelModal() } else { - message.error(msgTips) + handleMessage().error(msgTips) } }) break; @@ -2001,25 +2002,25 @@ const Meeting: React.FC = () => { setRecorder(mediaRecorder); }); } else { - message.error('录制太频繁了,请稍后重试!'); + handleMessage().error('录制太频繁了,请稍后重试!'); } } catch (error: any) { if (error.code === 'ENOENT') { - message.error({ + handleMessage().error({ content:
文件夹不存在 { stupWizardRef.current.changeModal(3); }}>前往设置
}); return; } else { - message.error(error); + handleMessage().error(error); } } break; case '录制中': if (isClickedMediaSteam) { - message.error('录制时长不足3秒,请稍后重试!'); + handleMessage().error('录制时长不足3秒,请稍后重试!'); } else { footerListTemplate[itemIndex][rowIndex].title = '录制' footerListTemplate[itemIndex][rowIndex].active = false @@ -2034,7 +2035,7 @@ const Meeting: React.FC = () => { if (!isClicked) { requestSpeak() } else { - message.error('申请太频繁了,请稍后重试!'); + handleMessage().error('申请太频繁了,请稍后重试!'); } break; case '会议监控': @@ -2183,7 +2184,7 @@ const Meeting: React.FC = () => { // 设置发言人 const postRoomManager = async (data: any): Promise => { if (isAdmin >= 20) { - message.error('设置失败,已达最大发言人20个!') + handleMessage().error('设置失败,已达最大发言人20个!') } else { await PostRoomManager({ roomId: data.roomId, @@ -2282,7 +2283,7 @@ const Meeting: React.FC = () => { break; case 'reconnect': if (e.value == true) { - message.success('网络已连接。') + handleMessage().success('网络已连接。') meetingDisconnectedRef.current.changeModal(false) setIsAgoraDisconnected(false) async function setUserStatus(res: any) { @@ -2348,7 +2349,7 @@ const Meeting: React.FC = () => { return res }) } else { - message.error('请输入内容!') + handleMessage().error('请输入内容!') } } // 聊天框滚动到底部 @@ -2378,19 +2379,20 @@ const Meeting: React.FC = () => { }) } if (msg) { - message.error(msg) + handleMessage().error(msg) return } } if (enableMicr) { const enableMicrLenght = roomUserList.filter((item: any) => item.enableMicr).length if (enableMicrLenght >= 20) { - return message.error('房间内最多20个开启麦克风') + handleMessage().error('房间内最多20个开启麦克风') + return } } await postOpenMicrApi(enableMicr, uid, isAll, true) } else { - message.error(msgTips) + handleMessage().error(msgTips) } }) } @@ -2418,7 +2420,7 @@ const Meeting: React.FC = () => { // }) } if (isMessage) { - // message.success('操作成功') + // handleMessage().success('操作成功') } } // 开关视频 @@ -2434,18 +2436,19 @@ const Meeting: React.FC = () => { }) } if (msg) { - message.error(msg) + handleMessage().error(msg) return } if (enableCamera) { const enableCameraLenght = roomUserList.filter((item: any) => item.enableCamera).length if (enableCameraLenght >= 20) { - return message.error('房间内最多20个开启摄像头') + handleMessage().error('房间内最多20个开启摄像头') + return } } await postOpenCameraApi(enableCamera, uid, true) } else { - message.error(msgTips) + handleMessage().error(msgTips) } }) } @@ -2471,7 +2474,7 @@ const Meeting: React.FC = () => { // enableCamera // }) if (isMessage) { - // message.success('操作成功') + // handleMessage().success('操作成功') } } // 演讲者模式 @@ -2637,21 +2640,24 @@ const Meeting: React.FC = () => { } else { await allUserLook(item.uid, item.userName) } - message.success('操作成功') + handleMessage().success('操作成功') } // 设置模式 const setSyncView = (mode: string) => { if (meetingMode === mode) { setModeOpen(false) - return message.error(`${getMeetingContentBodyLeftModeText(mode)}已开启,请勿重复操作!`) + handleMessage().error(`${getMeetingContentBodyLeftModeText(mode)}已开启,请勿重复操作!`) + return } if (isAdmin > 6 && mode === 'FreedomMode') { setModeOpen(false) - return message.error('发言人数超过6人,无法使用宫格模式!') + handleMessage().error('发言人数超过6人,无法使用宫格模式!') + return } if (isShare && mode === 'FreedomMode') { setModeOpen(false) - return message.error('共享中,无法切换模式') + handleMessage().error('共享中,无法切换模式') + return } window.electron.onInvoke('sendOper', { roomNum: state.channelId, @@ -2683,12 +2689,30 @@ const Meeting: React.FC = () => { cancelText: '取消', async onOk() { await GetRoomKickout(channelId, uid) - message.success('操作成功') + handleMessage().success('操作成功') }, onCancel() { }, }); } + const handleMessage = () => { + const displayMessage = ( + fn: (msg: any) => void, + msg: any + ) => { + setIsScreenCapture(bool => { + if (!bool) { + fn(msg); + } + return bool; + }); + }; + + return { + error: (msg: any) => displayMessage(message.error, msg), + success: (msg: any) => displayMessage(message.success, msg) + }; + }; return ( <>
{ @@ -2703,7 +2727,7 @@ const Meeting: React.FC = () => {
{ setIsExpand(!isExpand) window.electron.setChildWindow({ - height: !isExpand ? 160 * 4 : 200, + height: !isExpand ? 160 * 4 + 20 : 200, width: 250, key: 'main' }) @@ -2911,7 +2935,11 @@ const Meeting: React.FC = () => {
}
-
+
setShowCaret(true)} + onMouseLeave={() => setShowCaret(false)}> {isAdmin && currentLookUserAccount && !isScreenCapture ? getSettingIcon() : null}
{roomUserList.map((item: any, index: number) => { @@ -3050,13 +3078,13 @@ const Meeting: React.FC = () => {
*/} - {meetingMode !== "FreedomMode" && hasScrollbar() ?
+ {meetingMode !== "FreedomMode" && hasScrollbar() && showCaret ?
{meetingMode === "StandardMode" ?
{ const container = document.getElementById('videoView') as HTMLElement; container.scrollLeft -= 100 }}> -
:
{ +
:
{ const container = document.getElementById('videoView') as HTMLElement; container.scrollTop -= 100 }}> @@ -3067,7 +3095,7 @@ const Meeting: React.FC = () => { container.scrollLeft += 100 }}> -
:
{ +
:
{ const container = document.getElementById('videoView') as HTMLElement; container.scrollTop += 100 }}>