Skip to content

课堂管理与权限 API

课堂控制(开始/结束/静音/布局)和权限查询(三层权限检查)。

API 参考

canControlClass()

当前用户是否可以控制课堂生命周期(开始/结束上课,通常仅老师拥有此权限)。

返回值: boolean


canManageMember()

当前用户是否可以管理成员(踢人/禁言/上下台/授权,通常仅老师/助教拥有此权限)。

返回值: boolean


canOpenCamera()

当前用户是否可以打开摄像头(综合考虑全员禁视频 + 个人权限)。

返回值: boolean


canOpenMic()

当前用户是否可以打开麦克风(综合考虑全员静音状态 + 个人权限)。

返回值: boolean


canOperateBoard()

当前用户是否拥有白板权限(涂鸦、工具切换、翻页等全部白板操作能力)。

后台只有一个统一的 board 权限,涵盖所有白板操作。 老师/助教默认 true,学生需老师通过 memberAction(Board_Enable) 授权。

返回值: boolean


canOperateDocument()

当前用户是否可以操作课件(上传/删除/绑定白板,通常仅老师/助教拥有此权限)。

返回值: boolean


canSendChatMessage()

当前用户是否可以发送聊天消息(综合禁言模式 + 角色权限 + 个人禁言状态)。

返回值: boolean


canShareScreen()

当前用户是否可以屏幕共享(需要 screenSharePermission > 0)。

返回值: boolean


endClass()

结束课堂(老师/助教权限)。状态最终更新由 IM class_end 信令驱动,不立即变更本地状态。

返回值: Promise<TResult<void>>

示例:

ts
const result = await classroom.endClass();
if (result.ok) {
  // 结课请求已发送,等待 IM 信令确认后 classStatus$ 变为 'ended'
  // End request sent; classStatus$ updates to 'ended' once IM signal arrives
}

getAllPermissions()

获取所有在线用户的权限信息列表。

返回值: MemberInfo[]

示例:

ts
const all = classroom.getAllPermissions();
const onStage = all.filter((p) => p.stage);

getClassInfo()

主动拉取最新课堂信息(进房后 SDK 会自动更新,此方法用于强制刷新场景)。

参数类型说明
allTask?booleantrue=同时拉取所有任务列表(成本较高,按需使用)/ true=also fetch all tasks (costly; use sparingly)

返回值: Promise<TResult<ClassInfo>>

示例:

ts
const result = await classroom.getClassInfo();
if (result.ok) console.log('课堂名:', result.data.className);

getTasks()

查询课堂任务列表(本地缓存优先;传入 seq 时与服务端比对,仅差异时才刷新)。

参数类型说明
seq?number本地已知的最新任务序列号(用于增量判断)

返回值: Promise<TResult<GetTaskListResult>>

示例:

ts
const r = await classroom.getTasks();
if (r.ok) renderTaskPanel(r.data.list);

getTranslateConfig()

获取当前翻译配置(同步方法,从本地缓存读取,包含是否开启及目标语言)。

返回值: TranslateConfig

示例:

ts
const cfg = classroom.getTranslateConfig();
if (cfg.state === 1) console.log('当前自动翻译目标语言:', cfg.lang);

getUserPermission()

获取指定用户的权限信息(来自本地 memberMap$ 缓存)。

参数类型说明
userIdstring目标用户 ID

返回值: MemberInfo | null

示例:

ts
const perm = classroom.getUserPermission('student_001');
if (perm?.stage) { /* 在台上 / on stage */ }

isFeatureAvailable()

三层权限检查:套餐功能开关 → 动态授权(老师实时授予/收回) → 角色默认能力。

传入 PackageFeatureConfigRoleCapabilities 的 key 名即可判断当前用户是否拥有该能力。

参数类型说明
featurekeyof PackageFeatureConfig | keyof RoleCapabilities功能/权限名称

返回值: boolean

示例:

ts
if (classroom.isFeatureAvailable('memberManage')) {
  // 可管理成员 / Can manage members
}
if (classroom.isFeatureAvailable('enableBeauty')) {
  // 套餐支持美颜 / Package supports beauty
}

isOnStage()

当前用户是否在台上(即 stage 字段为 true,可使用音视频能力)。

返回值: boolean


muteAudioAll()

全体音频静音/解除静音(老师/助教权限),影响所有学生的麦克风开启权限。

状态由 state.muteAll$ 反映;学生端开麦逻辑请使用 canOpenMic() 综合判断。

参数类型说明
mutebooleantrue=全体静音 / mute all, false=解除全体静音 / unmute all

返回值: Promise<TResult<void>>

示例:

ts
await classroom.muteAudioAll(true);   // 全员禁麦 / mute all
await classroom.muteAudioAll(false);  // 解除 / unmute

muteVideoAll()

全体禁视频/解除禁视频(老师/助教权限),影响所有学生的摄像头开启权限。

状态由 state.muteVideoAll$ 反映;学生端开摄像头请使用 canOpenCamera() 综合判断。

参数类型说明
mutebooleantrue=全体禁视频 / disable all video, false=解除 / re-enable

返回值: Promise<TResult<void>>

示例:

ts
await classroom.muteVideoAll(true);  // 全员关摄像头 / disable all video

releaseResource()

释放已持有的资源(如停止屏幕共享时释放锁,允许其他人使用)。

参数类型说明
namestring资源名称

返回值: Promise<TResult<void>>

示例:

ts
await classroom.releaseResource('screen_share');

requireResource()

抢占/获取资源(当前持有者数量达到 limit 时失败),成功后其他用户再请求会被拒绝。

参数类型说明
namestring资源名称(如 'screen_share''mic'

返回值: Promise<TResult<void>>

示例:

ts
const r = await classroom.requireResource('screen_share');
if (!r.ok) toast.warn('资源被占用');

revokeClassMessage()

撤回群聊消息(老师/助教权限,按 IM 消息序列号撤回)。

revokeMessage() 的区别:此方法按 IM seq 撤回他人消息(需老师/助教权限); revokeMessage() 按消息 ID 撤回自己的消息。 revokeMessage() uses message ID and only revokes the caller's own messages.

参数类型说明
messageSeqnumberIM 消息序列号(Message.seq 字段)

返回值: Promise<TResult<void>>

示例:

ts
await classroom.revokeClassMessage(message.seq);

setClassCustomData()

设置课堂自定义数据(存储在服务端,所有端可通过 state.classInfo$.customData 读取)。

用于业务侧扩展课堂级别的自定义状态(如教学环节、当前课件 docId、临时配置等)。

参数类型说明
dataobject任意可序列化 JSON 对象

返回值: Promise<TResult<void>>

示例:

ts
await classroom.setClassCustomData({ phase: 'lecture', currentDocId: 'doc_123' });

setEnableStage()

开启/关闭举手连麦功能(老师/助教权限),关闭后学生无法举手申请上台。

状态由 state.enableStage$ 反映,并触发 TEvent.ENABLE_STAGE_CHANGED

参数类型说明
enablebooleantrue=开启举手功能 / enable hand-raise, false=关闭 / disable

返回值: Promise<TResult<void>>

示例:

ts
await classroom.setEnableStage(false); // 关闭举手 / disable hand-raise

setLayout()

切换课堂视图布局(老师/助教权限),所有端同步切换。

切换结果由 state.classLayout$ 推送,UIKit 层据此重新排版课堂主区域。

参数类型说明
layoutClassLayout- 'right' / 'left' 视频在右/左 / video on right / left

返回值: Promise<TResult<void>>

示例:

ts
await classroom.setLayout('doc');     // 课件优先 / doc-priority
await classroom.setLayout('default'); // 还原默认 / restore default

setResourceLimit()

设置资源并发上限,用于排他性资源管理(如屏幕共享同一时刻只允许一人)。

配合 requireResource() / releaseResource() 实现分布式锁语义。

参数类型说明
namestring资源名称标识(业务约定,如 'screen_share'
limitnumber最大可同时持有的数量

返回值: Promise<TResult<void>>

示例:

ts
// 排他锁:屏幕共享同一时刻只允许 1 人 / Exclusive lock: only 1 screen-share at a time
await classroom.setResourceLimit('screen_share', 1);
// 学生端开启屏幕共享前先抢锁 / Acquire lock before sharing
const r = await classroom.requireResource('screen_share');
if (r.ok) {
  await classroom.startScreenShare();
} else {
  toast.warn('已有他人在共享屏幕');
}
// 停止共享时释放锁 / Release on stop
await classroom.stopScreenShare();
await classroom.releaseResource('screen_share');

setSilenceMode()

设置聊天禁言模式,控制课堂内学生的发言权限(老师/助教权限)。

参数类型说明
modeSilenceMode'muteAll'=全员禁言 / all muted

返回值: Promise<TResult<void>>

示例:

ts
// 全员禁言 / Mute all students
await classroom.setSilenceMode('muteAll');
// 恢复自由发言 / Restore free chat
await classroom.setSilenceMode('freeChat');
// 仅允许私聊(学生不能发公屏消息)/ Only allow private messages
await classroom.setSilenceMode('privateOnly');

setTranslate()

开启/关闭 IM 消息自动翻译功能。

开启后收到的群聊消息会自动附带目标语言的翻译结果(通过 Message.translation 字段)。

参数类型说明
state0 | 10=关闭自动翻译 / disable, 1=开启自动翻译 / enable
langstring目标语言代码(如 'zh''en''ja'

返回值: Promise<TResult<void>>

示例:

ts
// 把所有消息自动翻译成英文 / Auto-translate all messages to English
await classroom.setTranslate(1, 'en');

// 关闭自动翻译 / Disable
await classroom.setTranslate(0, 'en');

startClass()

开始上课(老师/助教权限)。课堂状态变为 started,所有端同步收到 TEvent.CLASS_START。

返回值: Promise<TResult<void>>

示例:

ts
const result = await classroom.startClass();
if (result.ok) {
  // 课堂已开始,UI 可切换到上课状态
  // Class started — switch UI to in-class mode
}

stopTask()

停止课堂业务任务(老师权限),停止后学生端不再展示该任务。

参数类型说明
taskIdstring任务 ID(来自 updateTask 返回)

返回值: Promise<TResult<void>>

示例:

ts
await classroom.stopTask('task_001');

submitClassRate()

提交课后评价(1~5 分 + 评价文字,课堂结束后调用)。

参数类型说明
paramSubmitRateParam评价参数(分数 + 评价内容)

返回值: Promise<TResult<void>>

示例:

ts
await classroom.submitClassRate({ score: 5, content: '老师讲得很好' });

translate()

手动翻译单条 IM 消息(用于未开启自动翻译时,用户点击某条消息进行即时翻译)。

翻译结果通过消息更新事件推送到接收端,写入 Message.translation 字段。

参数类型说明
fromstring发送者 userId
seqnumber消息的 IM 序列号
messagestring消息原文内容
langstring目标语言代码

返回值: Promise<TResult<void>>

示例:

ts
// 用户点击某条消息的"翻译"按钮 / User clicks "translate" on a message
await classroom.translate(msg.from, msg.seq, msg.text, 'zh');

updateTask()

创建或更新课堂业务任务(答题器/计时器等,老师权限)。

更新后 state.taskList$ 自动同步,并触发 TEvent.TASK_UPDATED

参数类型说明
paramUpdateTaskParam任务参数(类型、内容、配置等)

返回值: Promise<TResult<TaskInfo>>

示例:

ts
const result = await classroom.updateTask({
  taskType: 1,                     // 任务类型(业务约定)/ task type (business-defined)
  content: { question: '1+1=?' },  // 自定义内容 / custom content
});
if (result.ok) console.log('taskId:', result.data.taskId);