From aac01594daffda31f7064a16e4777704bfb18db4 Mon Sep 17 00:00:00 2001 From: wangziqi Date: Mon, 6 Jul 2026 16:45:21 +0800 Subject: [PATCH] feat: student profile as Drawer from student list --- apps/admin/src/pages/Students/index.tsx | 89 ++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 3 deletions(-) diff --git a/apps/admin/src/pages/Students/index.tsx b/apps/admin/src/pages/Students/index.tsx index 29e7c88..d9ccbd5 100644 --- a/apps/admin/src/pages/Students/index.tsx +++ b/apps/admin/src/pages/Students/index.tsx @@ -16,7 +16,7 @@ import { Row, Col, Card, - Descriptions, + Drawer, } from 'antd'; import { PlusOutlined, @@ -83,6 +83,21 @@ const StudentsPage: React.FC = () => { const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [enrollmentData, setEnrollmentData] = useState>({}); const [form] = Form.useForm(); + const [drawerOpen, setDrawerOpen] = useState(false); + const [drawerStudentId, setDrawerStudentId] = useState(null); + const [drawerData, setDrawerData] = useState(null); + const [drawerLoading, setDrawerLoading] = useState(false); + + const openDrawer = async (studentId: number) => { + setDrawerStudentId(studentId); + setDrawerOpen(true); + setDrawerLoading(true); + try { + const res = await api.get(`/archive/${studentId}`); + setDrawerData(res); + } catch { setDrawerData(null); } + setDrawerLoading(false); + }; const handleViewSensitive = (studentId: number, field: string, value: string) => { modal.confirm({ @@ -227,10 +242,9 @@ const StudentsPage: React.FC = () => { dataIndex: 'name', width: 120, render: (v: string, record: any) => ( - navigate(`/students/${record.id}/profile`)}>{v} + openDrawer(record.id)}>{v} ), }, - { title: '性别', dataIndex: 'gender', width: 70 }, { title: '电话', dataIndex: 'phone', @@ -570,6 +584,75 @@ const StudentsPage: React.FC = () => { )} + + { setDrawerOpen(false); setDrawerData(null); }} + width={720} + loading={drawerLoading} + > + {drawerData && ( + + {drawerData.student?.name} + {drawerData.student?.studentNo || '-'} + {drawerData.student?.phone || '-'} + {drawerData.student?.idNumber || '-'} + {drawerData.student?.status} + {drawerData.profile?.targetCollege || '-'} + {drawerData.profile?.targetMajor || '-'} + {drawerData.profile?.subjectDirection || '-'} + {drawerData.profile?.grade || '-'} + {drawerData.profile?.campusLocation || '-'} + {drawerData.profile?.profileDate || '-'} + + ), + }, + { + key: 'enrollments', label: `报读记录 (${drawerData.enrollments?.length || 0})`, + children: drawerData.enrollments?.length ? ( + + ) :
暂无报读记录
, + }, + { + key: 'exams', label: `考试成绩 (${drawerData.examScores?.length || 0})`, + children: drawerData.examScores?.length ? ( +
v ?? '-' }, + { title: '排名', dataIndex: 'rank', render: (v: number) => v ?? '-' }, + { title: '日期', dataIndex: 'examDate' }, + ]} /> + ) :
暂无考试成绩
, + }, + { + key: 'result', label: '录取结果', + children: drawerData.result ? ( + + {drawerData.result.cultureFinalScore ?? '-'} + {drawerData.result.professionalFinalScore ?? '-'} + {drawerData.result.admissionStatus || '-'} + {drawerData.result.admittedCollege || '-'} + {drawerData.result.admittedMajor || '-'} + + ) :
暂无录取结果
, + }, + ]} /> + )} + ); };