diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 5d442d1..5bc8878 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -6,6 +6,7 @@ import Assignment from "./pages/generation/Assignment"; import Deposit from "./pages/generation/Deposit"; import Intro from "./Intro"; import Admin from "./pages/admin/Admin"; +import DetailManageStudent from "./pages/admin/DetailManageStudent.jsx"; import ManageStudent from "./pages/admin/ManageStudent.jsx"; import ManageTask from "./pages/admin/ManageTask.jsx"; import AttendanceCode from "./pages/admin/AttendanceCode"; @@ -68,6 +69,14 @@ function App() { } /> + + + + } + /> { }); return res.data; // [{ id: ..., name: ... }] }; + +export const getStudentDetail = async (studentId) => { + try { + const res = await api.get(`/admin/managestudent/${studentId}`); + return res.data; + } catch (error) { + console.error("학생 상세 정보 불러오기 실패:", error); + throw error; + } +}; diff --git a/frontend/src/pages/admin/DetailManageStudent.jsx b/frontend/src/pages/admin/DetailManageStudent.jsx new file mode 100644 index 0000000..f932ea9 --- /dev/null +++ b/frontend/src/pages/admin/DetailManageStudent.jsx @@ -0,0 +1,47 @@ +import { useParams } from "react-router-dom"; +import { useEffect, useState } from "react"; +import Header from "../../components/Header"; +import style from "./DetailManageStudent.module.css"; +import { getStudentDetail } from "../../api/students"; + +const DetailManageStudent = () => { + const { studentId } = useParams(); + const [student, setStudent] = useState(null); + + useEffect(() => { + const fetchStudent = async () => { + try { + const data = await getStudentDetail(studentId); + setStudent(data); + } catch (err) { + console.error("학생 상세 정보 불러오기 실패:", err); + } + }; + + fetchStudent(); + }, [studentId]); + + if (!student) return
loading...
; + + return ( +
+
+
+
+

{student.name}

+

잔여 보증금: {student.deposit}원

+

보증금 방어권: {student.defence}

+
+ +
+ {student.assignmentTitles.map((title, idx) => ( + + ))} +
+
+
+ ); +}; +export default DetailManageStudent; diff --git a/frontend/src/pages/admin/DetailManageStudent.module.css b/frontend/src/pages/admin/DetailManageStudent.module.css new file mode 100644 index 0000000..86fe69d --- /dev/null +++ b/frontend/src/pages/admin/DetailManageStudent.module.css @@ -0,0 +1,11 @@ +.managestudent_wrapper { + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; +} +.under_header { + display: flex; + flex-direction: column; + align-items: center; +} diff --git a/frontend/src/pages/admin/ManageStudent.jsx b/frontend/src/pages/admin/ManageStudent.jsx index 252175f..80a02e3 100644 --- a/frontend/src/pages/admin/ManageStudent.jsx +++ b/frontend/src/pages/admin/ManageStudent.jsx @@ -1,4 +1,5 @@ import { useEffect, useState } from "react"; +import { useNavigate } from "react-router-dom"; import { getStudentsByName } from "../../api/students"; import Header from "../../components/Header"; import InputBlock from "../../components/InputBlock"; @@ -8,6 +9,7 @@ const ManageStudent = () => { const [studentName, setStudentName] = useState([""]); const [page, setPage] = useState(1); const [students, setStudents] = useState([]); // 서버 데이터 저장 + const navigate = useNavigate(); const studentsPerPage = 6; @@ -54,7 +56,11 @@ const ManageStudent = () => { />
{paginatedStudents.map((student, index) => ( - ))} diff --git a/frontend/src/pages/admin/ManageStudent.module.css b/frontend/src/pages/admin/ManageStudent.module.css index 931680a..3a900c7 100644 --- a/frontend/src/pages/admin/ManageStudent.module.css +++ b/frontend/src/pages/admin/ManageStudent.module.css @@ -25,6 +25,9 @@ text-align: left; font-size: 16px; width: 100%; + display: flex; + align-items: center; + justify-content: space-between; } .student_button:hover { border: 1px solid #39ff14;