Преглед изворни кода

✨ feat(classroom): 添加闭门会议权限控制功能

- 新增ClassStatus枚举值PRIVATE_ACCESS_DENIED表示私密访问被拒绝状态
- 修改权限检查逻辑,无权限时设置课堂状态而非直接抛出错误
- 添加权限不足时的友好提示界面,显示"该课堂为闭门会议,只有老师和学员身份可以进入"信息
yourname пре 6 месеци
родитељ
комит
fb2312b84f

+ 5 - 3
src/client/mobile/components/Classroom/useClassroom.ts

@@ -68,7 +68,8 @@ interface Question {
 export enum ClassStatus {
   NOT_STARTED = 'not_started',
   IN_PROGRESS = 'in_progress',
-  ENDED = 'ended'
+  ENDED = 'ended',
+  PRIVATE_ACCESS_DENIED = 'private_access_denied'
 }
 
 
@@ -653,10 +654,11 @@ export const useClassroom = ({ user }:{ user : User }) => {
         console.error('获取群组信息失败:', err);
       }
 
-      // 如果没有权限,抛出错误统一处理
+      // 如果没有权限,设置课堂状态为权限不足
       if (!hasPermission) {
         console.log('该课堂为闭门会议,只有老师和学员身份可以进入')
-        throw new Error('该课堂为闭门会议,只有老师和学员身份可以进入');
+        setClassStatus(ClassStatus.PRIVATE_ACCESS_DENIED);
+        return;
       }
 
       listenGroupEvents();

+ 13 - 0
src/client/mobile/pages/ClassroomPage.tsx

@@ -172,6 +172,19 @@ const Classroom = () => {
     );
   }
 
+  if (classId && classStatus === ClassStatus.PRIVATE_ACCESS_DENIED) {
+    return (
+      <Card className="text-center py-8">
+        <CardHeader>
+          <CardTitle className="text-xl">无法进入课堂</CardTitle>
+        </CardHeader>
+        <CardContent>
+          <p>该课堂为闭门会议,只有老师和学员身份可以进入</p>
+        </CardContent>
+      </Card>
+    );
+  }
+
   // if (!role) {
   //   return (
   //     <AuthLayout>