diff --git a/frontend/src/components/AdminDailyAttendanceCard.jsx b/frontend/src/components/AdminDailyAttendanceCard.jsx index 73b0b07..f4f0f25 100644 --- a/frontend/src/components/AdminDailyAttendanceCard.jsx +++ b/frontend/src/components/AdminDailyAttendanceCard.jsx @@ -3,7 +3,7 @@ import "./componentsCss/AdminDailyAttendanceCard.css"; import api from "../api/api"; import { getStudentAttendance,updateAttendanceStatus } from "../api/adminattendance"; -const AdminDailyAttendanceCard = ({ date, studentId, onClose }) => { +const AdminDailyAttendanceCard = ({ date, order,studentId, onClose, onRefresh }) => { const [slots, setSlots] = useState([]); const [modified, setModified] = useState([]); @@ -24,11 +24,40 @@ const AdminDailyAttendanceCard = ({ date, studentId, onClose }) => { */ try { const rawData = await getStudentAttendance(studentId); - const dayData = rawData.data.find((d) => d.date === date); - const rawSlots = dayData?.slots || []; + /* + "attendanceId": 1, + "userId": 1, + "username": "홍길동", + "date": "2023-10-20", + "order": 1, + "status": true + */ + const rawSlots = rawData + .filter((d) => d.date === date) // 해당 날짜의 출석만 필터 + .sort((a, b) => a.order - b.order) // order 순으로 정렬 + .map((d) => ({ + date: d.date, + id: d.attendanceId, // 출석 ID + order: d.order, // 회차 표시용 + status: d.status ? "SUCCESS" : "FAILURE", // 드롭다운에 맞게 변환 + })); + + const filledSlots = + rawSlots.length > 0 + ? rawSlots + : [1, 2, 3].map((order) => ({ + date, + id: null, // 새 출석이므로 아직 id 없음 + order, + status: "EMPTY",//기본값 + })); + + setSlots(filledSlots); + setModified(Array(filledSlots.length).fill(false)); + + //setSlots(rawSlots); + //setModified(Array(rawSlots.length).fill(false)); - setSlots(rawSlots); - setModified(Array(rawSlots.length).fill(false)); } catch (err) { console.error("슬롯 정보 불러오기 실패:", err); } @@ -39,7 +68,7 @@ const AdminDailyAttendanceCard = ({ date, studentId, onClose }) => { const handleChange = (idx, newValue) => { const newSlots = [...slots]; - newSlots[idx].status = newValue === "SUCCESS"; + newSlots[idx].status = newValue; setSlots(newSlots); const newModified = [...modified]; @@ -49,15 +78,28 @@ const AdminDailyAttendanceCard = ({ date, studentId, onClose }) => { const handleSave = async (idx) => { try { - const slot = slots[idx]; - await updateAttendanceStatus(studentId, slot.id, slot.status); + + const slot = slots[idx]; + const attendanceId = slot.id; + const status = slot.status === "SUCCESS"; + + await updateAttendanceStatus(studentId, attendanceId, status); const newModified = [...modified]; newModified[idx] = false; setModified(newModified); + + console.log("📝 저장 요청", { + id: slot.id, + order: slot.order, + date: slot.date, + status: slot.status, + }); + } catch (err) { console.error("슬롯 저장 실패:", err); alert("저장 실패"); + } }; @@ -69,6 +111,8 @@ const AdminDailyAttendanceCard = ({ date, studentId, onClose }) => { } } alert("전체 저장 완료"); + if (onRefresh) onRefresh(); // submit 이후 새로고침 + onClose(); } catch (err) { console.error("전체 저장 실패:", err); } @@ -82,7 +126,7 @@ const AdminDailyAttendanceCard = ({ date, studentId, onClose }) => {
{slots.map((slot, idx) => ( -
+
{idx + 1}차 출석