|
|
@@ -535,6 +535,37 @@ export const useClassroom = ({ user }:{ user : User }) => {
|
|
|
listenGroupEvents();
|
|
|
listenMessageEvents();
|
|
|
|
|
|
+ // 只有老师角色需要获取现有的群组成员列表
|
|
|
+ if (role === Role.Teacher) {
|
|
|
+ try {
|
|
|
+ const membersResponse = await gm!.listRecentGroupUser(classId);
|
|
|
+ if (membersResponse && membersResponse.userList) {
|
|
|
+ const existingMembers = membersResponse.userList
|
|
|
+ .filter(member => member.userId !== userId) // 排除老师自己
|
|
|
+ .map(member => {
|
|
|
+ try {
|
|
|
+ const userExtension = member.userExtension ? JSON.parse(member.userExtension) : {};
|
|
|
+ return {
|
|
|
+ id: member.userId,
|
|
|
+ name: userExtension.nickname || userExtension.username || member.userId
|
|
|
+ };
|
|
|
+ } catch {
|
|
|
+ return {
|
|
|
+ id: member.userId,
|
|
|
+ name: member.userId
|
|
|
+ };
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ setStudents(existingMembers);
|
|
|
+ showMessage(`已加载 ${existingMembers.length} 名现有学生`);
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ console.error('获取群组成员失败:', err);
|
|
|
+ showMessage('获取现有学生列表失败,将只显示新加入的学生');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
await joinRtcChannel(classId);
|
|
|
|
|
|
buildShareLink(classId)
|
|
|
@@ -674,14 +705,14 @@ export const useClassroom = ({ user }:{ user : User }) => {
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
- const groupManager = imEngine.current.getGroupManager();
|
|
|
- if (!groupManager) {
|
|
|
+ const gm = imEngine.current.getGroupManager();
|
|
|
+ if (!gm) {
|
|
|
throw new Error('群组管理器未初始化');
|
|
|
}
|
|
|
|
|
|
showToast('info', '正在创建课堂...');
|
|
|
|
|
|
- const response = await groupManager.createGroup({
|
|
|
+ const response = await gm.createGroup({
|
|
|
groupName: className,
|
|
|
groupMeta: JSON.stringify({
|
|
|
classType: 'interactive',
|
|
|
@@ -695,31 +726,28 @@ export const useClassroom = ({ user }:{ user : User }) => {
|
|
|
throw new Error('创建群组失败: 未返回群组ID');
|
|
|
}
|
|
|
|
|
|
- try {
|
|
|
- await groupManager.joinGroup(response.groupId);
|
|
|
-
|
|
|
- showToast('success', '课堂创建并加入成功');
|
|
|
- showMessage(`课堂 ${className} 创建成功,ID: ${response.groupId}`);
|
|
|
-
|
|
|
- setClassId(response.groupId);
|
|
|
- setIsJoinedClass(true);
|
|
|
-
|
|
|
- const messageManager = imEngine.current.getMessageManager();
|
|
|
- if (messageManager) {
|
|
|
- imMessageManager.current = messageManager;
|
|
|
- listenMessageEvents();
|
|
|
- }
|
|
|
-
|
|
|
- await joinRtcChannel(response.groupId);
|
|
|
-
|
|
|
- // const baseUrl = window.location.href.split('?')[0].replace(/\/[^/]*$/, '');
|
|
|
- // setShareLink(`${baseUrl}/mobile/classroom/${response.groupId}/student`);
|
|
|
- buildShareLink(response.groupId)
|
|
|
-
|
|
|
- return response.groupId;
|
|
|
- } catch (joinErr: any) {
|
|
|
- throw new Error(`创建成功但加入失败: ${joinErr.message}`);
|
|
|
+ const mm = imEngine.current.getMessageManager();
|
|
|
+
|
|
|
+ await gm.joinGroup(response.groupId);
|
|
|
+
|
|
|
+ showToast('success', '课堂创建并加入成功');
|
|
|
+ showMessage(`课堂 ${className} 创建成功,ID: ${response.groupId}`);
|
|
|
+
|
|
|
+ setClassId(response.groupId);
|
|
|
+ setIsJoinedClass(true);
|
|
|
+
|
|
|
+ imGroupManager.current = gm;
|
|
|
+ listenGroupEvents();
|
|
|
+
|
|
|
+ if (mm) {
|
|
|
+ imMessageManager.current = mm;
|
|
|
+ listenMessageEvents();
|
|
|
}
|
|
|
+
|
|
|
+ await joinRtcChannel(response.groupId);
|
|
|
+ buildShareLink(response.groupId);
|
|
|
+
|
|
|
+ return response.groupId;
|
|
|
} catch (err: any) {
|
|
|
const errorMsg = err.message.includes('alreadyExist')
|
|
|
? '课堂已存在'
|