@@ -3,11 +3,16 @@ import Image from "next/image";
33import { useRouter } from "next/router" ;
44import AlertIcon from "@/assets/icons/AlertIcon" ;
55import useLoginStore from "@/store/login-store" ;
6+ import axios from "axios" ;
7+ import Button from "./Button" ;
68// import useStudentFilterStore from "@/store/student-filter-store";
79
810export 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