Merge pull request 'Remove name field from ClassTeacher and derive teacher name from user' (#55) from xiongyuxing/gongxue-base:main into main

Reviewed-on: #55
This commit is contained in:
2026-07-24 09:37:06 +00:00

View File

@@ -42,7 +42,6 @@ interface ClassStudent {
interface ClassTeacher { interface ClassTeacher {
id: number; id: number;
userId: number; userId: number;
name: string | null;
username: string; username: string;
roleType: string; roleType: string;
subject: string | null; subject: string | null;
@@ -190,9 +189,19 @@ const ClassDetailPage: React.FC = () => {
} }
}, [id]); }, [id]);
const fetchUsers = useCallback(async () => {
try {
const res = (await api.get('/rbac/users')) as UserItem[];
setAllUsers(res || []);
} catch {
setAllUsers([]);
}
}, []);
useEffect(() => { useEffect(() => {
fetchDetail(); fetchDetail();
}, [fetchDetail]); fetchUsers();
}, [fetchDetail, fetchUsers]);
const fetchSchedules = useCallback(async () => { const fetchSchedules = useCallback(async () => {
if (!id) return; if (!id) return;
@@ -321,8 +330,7 @@ const ClassDetailPage: React.FC = () => {
const openTeacherModal = async () => { const openTeacherModal = async () => {
try { try {
const res = (await api.get('/rbac/users')) as UserItem[]; await fetchUsers();
setAllUsers(res || []);
setTeacherUserId(undefined); setTeacherUserId(undefined);
setTeacherRole('subject_teacher'); setTeacherRole('subject_teacher');
setTeacherSubject(''); 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; if (!detail) return null;
const studentColumns: ColumnsType<ClassStudent> = [ const studentColumns: ColumnsType<ClassStudent> = [
@@ -361,7 +372,7 @@ const ClassDetailPage: React.FC = () => {
]; ];
const teacherColumns: ColumnsType<ClassTeacher> = [ const teacherColumns: ColumnsType<ClassTeacher> = [
{ title: '姓名', dataIndex: 'name', render: (name: string | null) => name || '-' }, { title: '姓名', render: (_: unknown, teacher) => getTeacherName(teacher) },
{ {
title: '角色', title: '角色',
dataIndex: 'roleType', dataIndex: 'roleType',
@@ -510,7 +521,12 @@ const ClassDetailPage: React.FC = () => {
{detail.studentCount}/{detail.maxStudents || '-'} {detail.studentCount}/{detail.maxStudents || '-'}
</Descriptions.Item> </Descriptions.Item>
<Descriptions.Item label="班主任"> <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>
<Descriptions.Item label="备注">{detail.notes || '-'}</Descriptions.Item> <Descriptions.Item label="备注">{detail.notes || '-'}</Descriptions.Item>
</Descriptions> </Descriptions>