Remove name field from ClassTeacher and derive teacher name from user #55

Merged
xiongyuxing merged 1 commits from xiongyuxing/gongxue-base:main into main 2026-07-24 09:37:07 +00:00

View File

@@ -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<ClassStudent> = [
@@ -361,7 +372,7 @@ const ClassDetailPage: React.FC = () => {
];
const teacherColumns: ColumnsType<ClassTeacher> = [
{ 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 || '-'}
</Descriptions.Item>
<Descriptions.Item label="班主任">
{teachers.find((t) => t.roleType === 'head_teacher')?.name || '-'}
{(() => {
const headTeacher = teachers.find(
(teacher) => teacher.roleType === 'head_teacher',
);
return headTeacher ? getTeacherName(headTeacher) : '-';
})()}
</Descriptions.Item>
<Descriptions.Item label="备注">{detail.notes || '-'}</Descriptions.Item>
</Descriptions>