Skip to content

Commit a82cd86

Browse files
authored
Merge pull request #85 from INU-Software-Design/feature/student-parent-page
โœจ feat: ๋ฌธ์„œ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
2 parents c72d346 + 67703eb commit a82cd86

1 file changed

Lines changed: 74 additions & 1 deletion

File tree

โ€Žsrc/components/shared/StudentHeader.tsxโ€Ž

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@ import Image from "next/image";
33
import { useRouter } from "next/router";
44
import AlertIcon from "@/assets/icons/AlertIcon";
55
import useLoginStore from "@/store/login-store";
6+
import axios from "axios";
7+
import Button from "./Button";
68
// import useStudentFilterStore from "@/store/student-filter-store";
79

810
export const StudentHeader = ({ children }: { children: ReactNode }) => {
911
const router = useRouter();
1012
const { name } = useLoginStore();
13+
const [isModal, setIsModal] = useState(false);
14+
const [selectedReports, setSelectedReports] = useState<string[]>(["ํ•™์ "]);
15+
console.log(selectedReports);
1116
// const { studentId } = useStudentFilterStore();
1217
const [windowWidth, setWindowWidth] = useState(typeof window !== "undefined" ? window.innerWidth : 0);
1318

@@ -70,6 +75,23 @@ export const StudentHeader = ({ children }: { children: ReactNode }) => {
7075
)),
7176
[menuItems, router.pathname, handleNavigation, isMobile]
7277
);
78+
79+
const handleButton = () => {
80+
const accessToken = localStorage.getItem("accessToken");
81+
const getCounselListPdf = async () => {
82+
try {
83+
const res = await axios.get(`${process.env.NEXT_PUBLIC_BACKEND_DOMAIN}/reports/counsels/students/{studentId}/history/pdf`, {
84+
headers: { Authorization: `Bearer ${accessToken}` },
85+
});
86+
const data = res.data;
87+
console.log("PDF ๋‹ค์šด๋กœ๋“œ:", data);
88+
} catch (err) {
89+
console.error("ํ•™์ƒ๋ณ„ ์ƒ๋‹ด ์ด๋ ฅ PDF ์ƒ์„ฑ ์—๋Ÿฌ:", err);
90+
}
91+
};
92+
getCounselListPdf();
93+
};
94+
7395
return (
7496
<header>
7597
<div className="flex items-center w-full bg-white border-b border-gray-400">
@@ -85,13 +107,64 @@ export const StudentHeader = ({ children }: { children: ReactNode }) => {
85107
/>
86108
<div className={`flex items-center h-[72px] ${isMobile ? "gap-8" : "gap-16"} ${isMobile ? "ml-1" : "ml-4"}`}>{menuElements}</div>
87109
<div className="flex flex-row justify-center items-center gap-8 ml-auto ">
110+
<Button
111+
onClick={() => {
112+
setIsModal(true);
113+
}}
114+
className="w-24 h-10 sm:flex hidden"
115+
>
116+
๋ณด๊ณ ์„œ
117+
</Button>
88118
<p className="hidden sm:flex text-base text-bold text-center">์ด๋ฆ„ : {name}</p>
89-
<div onClick={() => router.push("/alert")} aria-label="์•Œ๋ฆผ ์•„์ด์ฝ˜" data-testid="alert-icon" className="cursor-pointer">
119+
<div onClick={() => router.push("/alert")} aria-label="์•Œ๋ฆผ ์•„์ด์ฝ˜" data-testid="alert-icon" className="cursor-pointer mr-8">
90120
<AlertIcon />
91121
</div>
92122
</div>
93123
</div>
94124
{children}
125+
{isModal && (
126+
<div onClick={() => setIsModal(false)} className="fixed inset-0 bg-black bg-opacity-50 z-40">
127+
<div
128+
onClick={(e) => e.stopPropagation()}
129+
className="absolute w-[400px] h-[400px] bg-white z-50 p-6 top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-base rounded-lg shadow-lg flex flex-col"
130+
>
131+
<p className="text-[#333333] text-2xl mb-4">๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ๋ณด๊ณ ์„œ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”</p>
132+
133+
{["ํ•™์ ", "์„ฑ์ ", "์ถœ๊ฒฐ", "์ƒ๋‹ด", "ํ–‰๋™"].map((label) => (
134+
<label key={label} className="flex items-center gap-2 mb-4">
135+
<input
136+
type="checkbox"
137+
className="w-5 h-5"
138+
value={label}
139+
checked={selectedReports.includes(label)}
140+
disabled={label === "ํ•™์ "} // โœ… ํ•™์ ์€ ๋น„ํ™œ์„ฑํ™”
141+
onChange={(e) => {
142+
const value = e.target.value;
143+
setSelectedReports((prev) => (prev.includes(value) ? prev.filter((item) => item !== value) : [...prev, value]));
144+
}}
145+
/>
146+
<span className={`${label === "ํ•™์ " ? "text-gray-400" : ""} text-xl`}>{label}</span>
147+
</label>
148+
))}
149+
150+
<div className="flex justify-between mt-auto pt-6">
151+
<Button
152+
className="flex flex-1 mx-4 h-10"
153+
onClick={() => {
154+
console.log("์„ ํƒ๋œ ๋ณด๊ณ ์„œ:", selectedReports);
155+
setIsModal(false);
156+
handleButton(); // ํ•„์š” ์‹œ ์—ฌ๊ธฐ์— ์„ ํƒ๋œ ๋ฆฌ์ŠคํŠธ ์ „๋‹ฌ
157+
}}
158+
>
159+
๋‹ค์šด๋กœ๋“œ
160+
</Button>
161+
<Button className="flex flex-1 mx-4 h-10" onClick={() => setIsModal(false)}>
162+
๋‹ซ๊ธฐ
163+
</Button>
164+
</div>
165+
</div>
166+
</div>
167+
)}
95168
</header>
96169
);
97170
};

0 commit comments

Comments
ย (0)