成员管理 API
成员列表、统一操作(上台/下台/禁言/踢出)、举手、循环上台等功能。
API 参考
approveHandUp()
老师同意学生举手请求,邀请上台(等同 memberAction Stage_Up)。
| 参数 | 类型 | 说明 |
|---|---|---|
| userId | string | 要邀请上台的学生 userId |
返回值: Promise<any>
示例:
// 遍历举手列表逐个同意 / Iterate over the hand-up list and approve
for (const m of classroom.state.handUpList$.get()) {
await classroom.approveHandUp(m.userId);
}clearHandUpList()
清空全部举手列表(老师/助教权限)。
返回值: Promise<TResult<void>>
示例:
// 一键拒绝所有未处理的举手 / One-click reject all pending hand-raises
await classroom.clearHandUpList();deleteHandUpMembers()
从举手列表中移除指定成员。
仅清除其在举手列表中的状态,不会影响这些成员的其他权限。
| 参数 | 类型 | 说明 |
|---|---|---|
| userIds | string[] | 要移除的用户 ID 数组 |
返回值: Promise<TResult<void>>
示例:
await classroom.deleteHandUpMembers(['student_001', 'student_002']);getAllCommand()
批量查询所有用户的上台邀请状态,返回当前所有待处理和已完成的邀请记录。
返回值: Promise<TResult<any>>
getHandUpList()
分页获取当前举手列表,返回正在等待审批的学生。
与响应式 state.handUpList$ 等价,常用于一次性主动刷新。
| 参数 | 类型 | 说明 |
|---|---|---|
| page? | number | 页码(默认 1) |
| pageSize? | number | 每页条数(默认 20) |
返回值: Promise<TResult<HandUpListResponse>>
getMemberInfo()
查询单个成员信息。
| 参数 | 类型 | 说明 |
|---|---|---|
| userId | string | 目标用户 ID |
| forceRemote? | boolean | true=强制从服务端拉取最新数据;false=优先使用本地缓存(默认) |
返回值: Promise<TResult<MemberInfo>>
示例:
// 优先使用本地缓存 / Prefer local cache
const info = await classroom.getMemberInfo('student_001');
// 强制刷新(如确认权限变更后立即查询) / Force refresh
const fresh = await classroom.getMemberInfo('student_001', true);getMemberList()
分页获取课堂成员列表(花名册),包括角色、在线状态、权限等信息。
增量分页:SDK 内部维护游标,自动合并到 state.memberMap$;订阅 state.memberList$ 可响应式获取最新列表。 subscribe to state.memberList$ for reactive access to the latest list.
| 参数 | 类型 | 说明 |
|---|---|---|
| page? | number | 页码,从 1 开始(默认 1) |
| pageSize? | number | 每页条数(默认 20) |
返回值: Promise<TResult<MemberListResponse>>
示例:
// 首次拉取第一页 / Fetch the first page
await classroom.getMemberList(1, 50);
// 通过响应式信号订阅完整成员列表 / Subscribe via reactive signal
classroom.state.memberList$.subscribe((list) => renderRoster(list));getPermissionList()
主动拉取最新权限列表(进房后 SDK 会自动拉取一次,此方法用于强制刷新)。
拉取结果会自动合并到 state.memberMap$,并触发 TEvent.PERMISSION_UPDATE。
返回值: Promise<TResult<void>>
getUserCommand()
查询指定用户当前的上台邀请状态(是否已发送邀请、是否已接受/拒绝)。
| 参数 | 类型 | 说明 |
|---|---|---|
| userId | string | 目标用户 ID |
返回值: Promise<TResult<any>>
handUp()
学生举手,申请连麦上台发言。
调用后老师端通过 state.handUpList$ 实时收到申请;学生端 state.myHandUpStatus$ 变为 true。
仅在课堂启用了举手连麦(state.enableStage$ === true)时有效,否则返回失败。
返回值: Promise<any>
示例:
if (!classroom.state.enableStage$.get()) { toast.warn('当前课堂未开启连麦'); return; }
const result = await classroom.handUp();
if (!result.ok) toast.error(result.message);handUpCancel()
学生取消举手,撤回上台申请。
返回值: Promise<any>
示例:
await classroom.handUpCancel();lockStageLoop()
锁定/解锁循环上台轮换。
锁定后暂停自动切换,当前学生持续在台上;解锁后恢复自动轮换。
| 参数 | 类型 | 说明 |
|---|---|---|
| lock? | boolean | true=锁定暂停轮换(默认 true,不传即锁定);false=解锁恢复轮换 |
返回值: Promise<TResult<void>>
示例:
await classroom.lockStageLoop(); // 锁定 / lock
await classroom.lockStageLoop(false); // 解锁 / unlockmemberAction()
统一成员操作入口,支持上台/下台/禁言/踢出/授权等多种操作。
| 参数 | 类型 | 说明 |
|---|---|---|
| param | MemberActionParam | 操作参数,包含 action 类型和目标 userId |
返回值: Promise<any>
示例:
// 邀请学生上台 / Invite a student to the stage
await classroom.memberAction({ userId: 'stu_001', action: MemberActionType.Stage_Up });
// 禁言学生 / Silence a student
await classroom.memberAction({ userId: 'stu_002', action: MemberActionType.Silence });
// 踢出学生 / Kick a student
await classroom.memberAction({ userId: 'stu_003', action: MemberActionType.Kick_Out });memberLike()
发送点赞,课堂总点赞计数通过 state.likeCount$ 响应式更新。
服务端会做合并/限流处理,业务侧无需自行节流。
返回值: Promise<TResult<void>>
示例:
// 用户点击点赞按钮 / User taps the like button
onClickLike(() => classroom.memberLike());
// 订阅总点赞数 / Subscribe to total like count
classroom.state.likeCount$.subscribe((count) => updateLikeBadge(count));rejectHandUp()
老师拒绝学生举手(清除其举手状态)。
| 参数 | 类型 | 说明 |
|---|---|---|
| userId | string | 要拒绝的学生 userId |
返回值: Promise<any>
示例:
await classroom.rejectHandUp('student_001');sendCommand()
向指定用户发送上台邀请命令,用于老师主动点名上台流程。
学生端通过订阅 state.askStageStatus$ 接收邀请并决定是否同意。
| 参数 | 类型 | 说明 |
|---|---|---|
| userId | string | 目标用户 ID |
| param? | Record<string, unknown> | 可选的附加参数(如指定开麦/开摄像头) |
返回值: Promise<TResult<any>>
示例:
// 老师邀请学生上台 / Teacher invites student to stage
await classroom.sendCommand('stu_001');
// 带附加参数 / With additional params
await classroom.sendCommand('stu_001', { autoMic: true, autoCamera: false });startStageLoop()
开启循环上台功能,让学生按配置自动轮流上台展示(老师/助教权限)。
开启后 SDK 会按照设定的时长自动轮换台上学生,直到调用 stopStageLoop() 或所有学生轮完。 until stopStageLoop() is called or all students have had their turn.
状态由 state.stageLoopEnabled$ 反映;轮换过程中可调用 lockStageLoop(true) 暂停切换。
| 参数 | 类型 | 说明 |
|---|---|---|
| params | StageLoopParams | ⚠️ interval 单位为毫秒(不是秒)/ interval is in milliseconds (not seconds) |
返回值: Promise<TResult<void>>
示例:
await classroom.startStageLoop({
duration: 120, // 每人上台 120 秒 / 120s per student
interval: 5000, // 切换间隔 5 秒(毫秒)/ 5000ms switch interval
autoMic: true, // 自动开麦 / auto unmute mic
autoCamera: true, // 自动开摄像头 / auto open camera
memberNumber: 1, // 每轮上台人数(可选)/ students on stage per round (optional)
});stopStageLoop()
停止循环上台,所有当前在台上的轮换学生将被自动下台。
返回值: Promise<TResult<void>>
示例:
await classroom.stopStageLoop();updateStageLoop()
热更新循环上台参数(无需先停止再重启,参数变更立即生效)。
| 参数 | 类型 | 说明 |
|---|---|---|
| params | StageLoopParams | 新的循环上台参数 |
返回值: Promise<TResult<void>>
示例:
// 把每人上台时长改为 60 秒 / Change per-student duration to 60s
await classroom.updateStageLoop({ duration: 60, interval: 5000, autoMic: true, autoCamera: true });