TeacherView.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import React from 'react';
  2. import { useClassroomContext } from './ClassroomProvider.tsx';
  3. import { ClassStatus } from './useClassroom.ts';
  4. export const TeacherView = () => {
  5. const {
  6. startClass,
  7. endClass,
  8. muteStudent,
  9. kickStudent,
  10. handUpList,
  11. questions,
  12. classStatus
  13. } = useClassroomContext();
  14. return (
  15. <div className="space-y-4">
  16. <div className="flex space-x-2">
  17. <button
  18. onClick={startClass}
  19. disabled={classStatus === ClassStatus.IN_PROGRESS}
  20. className="px-4 py-2 bg-blue-500 text-white rounded disabled:bg-gray-400"
  21. >
  22. {classStatus === ClassStatus.IN_PROGRESS ? '课堂已开始' : '开始课堂'}
  23. </button>
  24. <button
  25. onClick={endClass}
  26. disabled={classStatus !== ClassStatus.IN_PROGRESS}
  27. className="px-4 py-2 bg-red-500 text-white rounded disabled:bg-gray-400"
  28. >
  29. 结束课堂
  30. </button>
  31. </div>
  32. {handUpList.length > 0 && (
  33. <div className="bg-yellow-50 p-3 rounded">
  34. <h3 className="font-bold mb-2">举手列表</h3>
  35. <ul className="space-y-1">
  36. {handUpList.map((student, i) => (
  37. <li key={i} className="flex justify-between items-center">
  38. <span>{student.studentName || student.studentId}</span>
  39. <div className="space-x-2">
  40. <button
  41. onClick={() => muteStudent(student.studentId)}
  42. className="text-xs px-2 py-1 bg-gray-200 rounded"
  43. >
  44. 静音
  45. </button>
  46. <button
  47. onClick={() => kickStudent(student.studentId)}
  48. className="text-xs px-2 py-1 bg-red-200 rounded"
  49. >
  50. 移出
  51. </button>
  52. </div>
  53. </li>
  54. ))}
  55. </ul>
  56. </div>
  57. )}
  58. {questions.length > 0 && (
  59. <div className="bg-blue-50 p-3 rounded">
  60. <h3 className="font-bold mb-2">学生提问</h3>
  61. <ul className="space-y-2">
  62. {questions.map((q, i) => (
  63. <li key={i} className="border-b pb-2">
  64. <p className="font-medium">{q.studentName || q.studentId}: {q.question}</p>
  65. <p className="text-sm text-gray-600">
  66. {new Date(q.timestamp).toLocaleTimeString()}
  67. </p>
  68. </li>
  69. ))}
  70. </ul>
  71. </div>
  72. )}
  73. </div>
  74. );
  75. };