From 17254b30fc05dedc9525d4ac5c1929d76ce1a049 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Fri, 16 Aug 2024 16:01:42 +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.module.scss | 1 - src/page/Meeting/index.tsx | 29 ++++++++++++++++++++++------- src/utils/package/agora.ts | 6 +++--- src/utils/package/signalr.ts | 2 +- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/page/Meeting/index.module.scss b/src/page/Meeting/index.module.scss index 4c33579..98886b6 100644 --- a/src/page/Meeting/index.module.scss +++ b/src/page/Meeting/index.module.scss @@ -17,7 +17,6 @@ box-sizing: border-box; >div { - background: #FDC229; border-radius: 6px; padding: 4px; display: flex; diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 89152c2..62c64a9 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -122,7 +122,7 @@ const Meeting: React.FC = () => { const [isShareUser, setIsShareUser] = useState(null) const [currentLookUserStatus, setCurrentLookUserStatus] = useState<0 | 1 | 2 | 3 | 4>(1) let userInfo = JSON.parse(storage.getItem('user') as string) - const msgTips = '您不是管理员,无法开启此功能!' + const msgTips = '您不是管理员或主讲人,无法开启此功能!' useEffect(() => { let time = null as any; setUser(userInfo) @@ -298,6 +298,13 @@ const Meeting: React.FC = () => { break; // 主讲人用户信息刷新 case 'ManagerRefresh': + if (item.uid === userInfo.uid) { + await agora.updateChannelMediaOptions(item.isRoomManager) + if (!item.isRoomManager) { + postOpenMicr(false, user.id) + postOpenCamera(false, user.id) + } + } setAllUserListData('ManagerRefresh', item) break; } @@ -533,7 +540,7 @@ const Meeting: React.FC = () => { setNoViewChatList(0) break; case '共享屏幕': - if (user.roleId === '1') { + if (getUserRoomInfo()) { getDesktopCapturerVideo() setIsSharedScreenModal(true) } else { @@ -541,7 +548,7 @@ const Meeting: React.FC = () => { } break; case '停止共享': - if (user.roleId === '1') { + if (getUserRoomInfo()) { await agora.leaveChannelEx(userInfo.screenShareId) agora.stopScreenCapture() await allUserLook(userInfo.uid) @@ -725,7 +732,7 @@ const Meeting: React.FC = () => { } // 开关麦克风 const postOpenMicr = async (enableMicr: boolean, uid: string, isAll?: boolean): Promise => { - if (user.roleId === '1') { + if (getUserRoomInfo()) { if (isAll) { await PostMuteAll({ roomNum: state.channelId, @@ -756,7 +763,7 @@ const Meeting: React.FC = () => { } // 开关视频 const postOpenCamera = async (enableCamera: boolean, uid: string): Promise => { - if (user.roleId === '1') { + if (getUserRoomInfo()) { let msg = ''; if (uid === user.uid) { await agora.getVideoDeviceManager().then(res => { @@ -787,6 +794,14 @@ const Meeting: React.FC = () => { // const changeSpeakerMode = (): void => { // speakerModeModalRef.current.changeSpeakerMode() // } + // 获取当前用户在房间的角色信息 + const getUserRoomInfo = (): any => { + let userItem = roomUserList.find((item: any) => item.uid === user.uid) + if (userItem && (userItem.roleId === '1' || userItem.isRoomManager)) { + return userItem + } + return '' + } // 获取当前模式样式 const getMeetingContentBodyLeftModeClass = (): string => { switch (meetingMode) { @@ -1341,11 +1356,11 @@ const meetingContentUser = (item: any) => {
{item.roleId === '1' || item.isRoomManager ? -
+
: null} {!item.enableMicr ? : ''} - {item.userName} + {item.userName}{item.roleId === '1' || item.isRoomManager ? item.roleId === '1' ? '(管理员)' : '(主讲人)' : ''}
diff --git a/src/utils/package/agora.ts b/src/utils/package/agora.ts index 2a2ee1c..1f722ad 100644 --- a/src/utils/package/agora.ts +++ b/src/utils/package/agora.ts @@ -189,12 +189,12 @@ const agora = { joinChannel: async () => { await rtcEngine.enableAudioVolumeIndication(100, 1, true) await rtcEngine.joinChannel(option.token, option.channelId, option.uid); - await agora.updateChannelMediaOptions() + await agora.updateChannelMediaOptions(option.roleId === '1' ? true : false) }, // 更新频道配置 - updateChannelMediaOptions: async () => { + updateChannelMediaOptions: async (bool: boolean) => { await rtcEngine.updateChannelMediaOptions({ - clientRoleType: option.roleId === '1' ? ClientRoleType.ClientRoleBroadcaster : ClientRoleType.ClientRoleAudience, //用户角色 ClientRoleBroadcaster 主播 ClientRoleAudience 观众 + clientRoleType: bool ? ClientRoleType.ClientRoleBroadcaster : ClientRoleType.ClientRoleAudience, //用户角色 ClientRoleBroadcaster 主播 ClientRoleAudience 观众 autoSubscribeAudio: true,//设置是否自动订阅所有音频流 autoSubscribeVideo: true,//设置是否自动订阅所有视频流 publishMicrophoneTrack: true,//设置是否发布麦克风采集到的音频 diff --git a/src/utils/package/signalr.ts b/src/utils/package/signalr.ts index 350ba74..2e0f19c 100644 --- a/src/utils/package/signalr.ts +++ b/src/utils/package/signalr.ts @@ -131,7 +131,7 @@ export const onSignalr = (callBack: Function) => { user }) }); - // 管理员用户信息刷新 + // 主讲人用户信息刷新 connection.on("ManagerRefresh", (user: any) => { callBack({ key: 'ManagerRefresh',