diff --git a/apps/admin/src/pages/Classes/detail.tsx b/apps/admin/src/pages/Classes/detail.tsx index 848d44f..07247a2 100644 --- a/apps/admin/src/pages/Classes/detail.tsx +++ b/apps/admin/src/pages/Classes/detail.tsx @@ -42,7 +42,6 @@ interface ClassStudent { interface ClassTeacher { id: number; userId: number; - name: string | null; username: string; roleType: string; subject: string | null; @@ -190,9 +189,19 @@ const ClassDetailPage: React.FC = () => { } }, [id]); + const fetchUsers = useCallback(async () => { + try { + const res = (await api.get('/rbac/users')) as UserItem[]; + setAllUsers(res || []); + } catch { + setAllUsers([]); + } + }, []); + useEffect(() => { fetchDetail(); - }, [fetchDetail]); + fetchUsers(); + }, [fetchDetail, fetchUsers]); const fetchSchedules = useCallback(async () => { if (!id) return; @@ -321,8 +330,7 @@ const ClassDetailPage: React.FC = () => { const openTeacherModal = async () => { try { - const res = (await api.get('/rbac/users')) as UserItem[]; - setAllUsers(res || []); + await fetchUsers(); setTeacherUserId(undefined); setTeacherRole('subject_teacher'); setTeacherSubject(''); @@ -333,6 +341,9 @@ const ClassDetailPage: React.FC = () => { } }; + const getTeacherName = (teacher: ClassTeacher) => + allUsers.find((user) => user.id === teacher.userId)?.name?.trim() || '-'; + if (!detail) return null; const studentColumns: ColumnsType = [ @@ -361,7 +372,7 @@ const ClassDetailPage: React.FC = () => { ]; const teacherColumns: ColumnsType = [ - { title: '姓名', dataIndex: 'name', render: (name: string | null) => name || '-' }, + { title: '姓名', render: (_: unknown, teacher) => getTeacherName(teacher) }, { title: '角色', dataIndex: 'roleType', @@ -510,7 +521,12 @@ const ClassDetailPage: React.FC = () => { {detail.studentCount}/{detail.maxStudents || '-'} - {teachers.find((t) => t.roleType === 'head_teacher')?.name || '-'} + {(() => { + const headTeacher = teachers.find( + (teacher) => teacher.roleType === 'head_teacher', + ); + return headTeacher ? getTeacherName(headTeacher) : '-'; + })()} {detail.notes || '-'}