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:
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user