diff --git a/src/components/EditApply.jsx b/src/components/EditApply.jsx index d8a496b..ff4095c 100644 --- a/src/components/EditApply.jsx +++ b/src/components/EditApply.jsx @@ -72,7 +72,7 @@ const EditApply = ({ jobPostData = {}, applicationData = [], onSave }) => { } } setCurrentQuestionIndex(0); - }, [currentPageIndex, applicationDataState]); + }, [currentPageIndex]); // 토글 핸들러 const handleToggleClick = () => { @@ -162,13 +162,13 @@ const EditApply = ({ jobPostData = {}, applicationData = [], onSave }) => { jobPart: jobPart, // 수정된 직무명 memberId: jobPostData.memberId, jobApplications: applicationDataState.map((app) => ({ - id: appIdRef.current++, + id: app.jobPostId, applicationType: app.applicationType, place: app.place, result: app.result, submissionStatus: app.submissionStatus, applicationStartDate: app.applicationStartDate, - applicationCloseDate: new Date(applyDate).getTime(), + applicationCloseDate: formatDate(new Date(applyDate).getTime()), memberId: jobPostData.memberId, jobPostId: jobPostData.jobPostId, applicationDetails: app.applicationDetails.map(question => ({ @@ -186,14 +186,14 @@ const EditApply = ({ jobPostData = {}, applicationData = [], onSave }) => { handleSaveRef.current = handleSave; }, [companyName, jobPart, applyDate, currentQuestionIndex, currentPageIndex, applicationDataState, submissionStatus, resultStatus]); - useEffect(() => { - // 언마운트시 데이터 저장(저장 버튼과 같은 기능) - return () => { - if (handleSaveRef.current) { - handleSaveRef.current(); - } - }; - }, []) + // useEffect(() => { + // // 언마운트시 데이터 저장(저장 버튼과 같은 기능) + // return () => { + // if (handleSaveRef.current) { + // handleSaveRef.current(); + // } + // }; + // }, []) // 현재 보여져야 하는 질문 const currentQuestions = applicationDataState[currentPageIndex]?.applicationDetails || []; @@ -213,21 +213,30 @@ const EditApply = ({ jobPostData = {}, applicationData = [], onSave }) => { setApplyDate(date); // DatePicker의 선택된 날짜 상태를 업데이트 }; + // 타임스탬프를 'yy-mm-dd' 형식으로 변환하는 함수 + const formatDate = (timestamp) => { + const date = new Date(timestamp); + const year = date.getFullYear().toString(); // 'yy' 형식 + const month = String(date.getMonth() + 1).padStart(2, '0'); // 'mm' 형식 + const day = String(date.getDate()).padStart(2, '0'); // 'dd' 형식 + return `${year}-${month}-${day}`; + }; + // 제출 여부 수정 핸들러 -const handleApplySubmissionStatus = (icon) => { - const updatedApplicationData = [...applicationDataState]; - updatedApplicationData[currentPageIndex].submissionStatus = getSubmitIconStatus(icon); - setApplicationData(updatedApplicationData); - setSubmissionStatus(getSubmitIconStatus(icon)); -}; + const handleApplySubmissionStatus = (icon) => { + const updatedApplicationData = [...applicationDataState]; + updatedApplicationData[currentPageIndex].submissionStatus = getSubmitIconStatus(icon); + setApplicationData(updatedApplicationData); + setSubmissionStatus(getSubmitIconStatus(icon)); + }; -// 결과 수정 핸들러 -const handleApplyResult = (icon) => { - const updatedApplicationData = [...applicationDataState]; - updatedApplicationData[currentPageIndex].result = getResultIconStatus(icon); - setApplicationData(updatedApplicationData); - setResultStatus(getResultIconStatus(icon)); -}; + // 결과 수정 핸들러 + const handleApplyResult = (icon) => { + const updatedApplicationData = [...applicationDataState]; + updatedApplicationData[currentPageIndex].result = getResultIconStatus(icon); + setApplicationData(updatedApplicationData); + setResultStatus(getResultIconStatus(icon)); + }; // 아이콘 상태에 따른 반환 함수 const getStatusIcon = (status) => { @@ -301,7 +310,7 @@ const handleApplyResult = (icon) => {
setCurrentPageIndex(index)}>
- {page.applicationType === '서류' ? '서류' : page.applicationType === '면접' ? '면접' : page.applicationType === '면접 피드백' ? '면접 피드백' : '기업분석'} + {page.applicationType === 'DOCUMENT' ? '서류' : page.applicationType === 'INTERVIEW' ? '면접' : page.applicationType === 'INTERVIEW_FEEDBACK' ? '면접 피드백' : '기업분석'}
removePage(index)}> @@ -317,10 +326,10 @@ const handleApplyResult = (icon) => { {isToggleOpen && (
-
handleAddPage('서류')}>서류 추가
-
handleAddPage('면접')}>면접 추가
-
handleAddPage('면접 피드백')}>면접피드백 추가
-
handleAddPage('기업분석')}>기업분석 추가
+
handleAddPage('DOCUMENT')}>서류 추가
+
handleAddPage('INTERVIEW')}>면접 추가
+
handleAddPage('INTERVIEW_FEEDBACK')}>면접피드백 추가
+
handleAddPage('BUSINESS_ANALYSIS')}>기업분석 추가
)} diff --git a/src/components/NewApply.jsx b/src/components/NewApply.jsx index 8414a0d..bd34ed1 100644 --- a/src/components/NewApply.jsx +++ b/src/components/NewApply.jsx @@ -196,20 +196,20 @@ const NewApply = ({ jobPostData = {}, applicationData = [], onSave }) => { }; // 제출 여부 수정 핸들러 -const handleApplySubmissionStatus = (icon) => { - const updatedApplicationData = [...applicationDataState]; - updatedApplicationData[currentPageIndex].submissionStatus = getSubmitIconStatus(icon); - setApplicationData(updatedApplicationData); - setSubmissionStatus(getSubmitIconStatus(icon)); -}; + const handleApplySubmissionStatus = (icon) => { + const updatedApplicationData = [...applicationDataState]; + updatedApplicationData[currentPageIndex].submissionStatus = getSubmitIconStatus(icon); + setApplicationData(updatedApplicationData); + setSubmissionStatus(getSubmitIconStatus(icon)); + }; -// 결과 수정 핸들러 -const handleApplyResult = (icon) => { - const updatedApplicationData = [...applicationDataState]; - updatedApplicationData[currentPageIndex].result = getResultIconStatus(icon); - setApplicationData(updatedApplicationData); - setResultStatus(getResultIconStatus(icon)); -}; + // 결과 수정 핸들러 + const handleApplyResult = (icon) => { + const updatedApplicationData = [...applicationDataState]; + updatedApplicationData[currentPageIndex].result = getResultIconStatus(icon); + setApplicationData(updatedApplicationData); + setResultStatus(getResultIconStatus(icon)); + }; // 아이콘 상태에 따른 반환 함수 const getStatusIcon = (status) => { diff --git a/src/pages/ActivityRecord.jsx b/src/pages/ActivityRecord.jsx index 17d8901..b55a9d0 100644 --- a/src/pages/ActivityRecord.jsx +++ b/src/pages/ActivityRecord.jsx @@ -95,7 +95,7 @@ const ActivityRecord = () => { 활동 추가하기
-
+
{filteredActivities.map((item) => { return ( {
면접 합격
-
+
{combinedData.map((application) => ( { // 지원현황 데이터 업데이트 const handleUpdate = async (updatedData) => { + console.log(updatedData); try { const response = await instance.patch(`/api/job-posts/${currentId}`, updatedData); if (response.data && response.data.status === 'success') { console.log("수정된 데이터:", response.data.data); - window.location.reload(); + // window.location.reload(); } else { console.error('지원현황 수정 중 오류 발생:', response.data.message); } diff --git a/src/pages/EditMyAbout.jsx b/src/pages/EditMyAbout.jsx index 718aa85..7803b69 100644 --- a/src/pages/EditMyAbout.jsx +++ b/src/pages/EditMyAbout.jsx @@ -6,7 +6,6 @@ import instance from "../api/instance"; const EditMyAbout = () => { const nav = useNavigate(); - const [infoData, setInfoData] = useState(); const [formData, setFormData] = useState({ career: "", aboutMe: "" @@ -19,9 +18,11 @@ const EditMyAbout = () => { const response = await instance.get('/api/member/info'); if (response.data && response.data.status === 'success') { console.log(response.data.data); - setInfoData(response.data.data); // 받아온 데이터를 applyData 상태에 저장 // 받아온 데이터를 formData에 저장 setFormData({ + field: response.data.data.field || "", + belong: response.data.data.belong || "", + job: response.data.data.job || "", educationBackground: response.data.data.educationBackground || "", skill: response.data.data.skill || "", activityHistory: response.data.data.activityHistory || "", @@ -40,7 +41,7 @@ const EditMyAbout = () => { }, []); // infoData가 null일 때 로딩 스피너나 대체 UI를 표시할 수 있음 - if (!infoData) { + if (!formData) { return
Loading...
; // 데이터를 불러오는 동안 표시될 내용 } @@ -79,7 +80,7 @@ const EditMyAbout = () => {
{
{ const nav = useNavigate(); - const [infoData, setInfoData] = useState(); const [formData, setFormData] = useState({ + belong: "", + job: "", educationBackground: "", skill: "", activityHistory: "", @@ -29,9 +37,11 @@ const EditMyInfo = () => { const response = await instance.get('/api/member/info'); if (response.data && response.data.status === 'success') { console.log(response.data.data); - setInfoData(response.data.data); // 받아온 데이터를 applyData 상태에 저장 // 받아온 데이터를 formData에 저장 setFormData({ + field: response.data.data.field || "", + belong: response.data.data.belong || "", + job: response.data.data.job || "", educationBackground: response.data.data.educationBackground || "", skill: response.data.data.skill || "", activityHistory: response.data.data.activityHistory || "", @@ -50,7 +60,7 @@ const EditMyInfo = () => { }, []); // infoData가 null일 때 로딩 스피너나 대체 UI를 표시할 수 있음 - if (!infoData) { + if (!formData) { return
Loading...
; // 데이터를 불러오는 동안 표시될 내용 } @@ -67,9 +77,9 @@ const EditMyInfo = () => { const handleSave = async () => { try { const payload = { - ...formData, + ...formData }; - const response = await instance.post('/api/member/additional-info', payload); + const response = await instance.post('/api/member/default-info', payload); if (response.data.status === 'success') { nav("/user/mypage"); // 저장 후 마이페이지로 이동 } @@ -87,33 +97,25 @@ const EditMyInfo = () => {
소속
- - {/* */} + name="belong" + onChange={handleInputChange} + />
직업
- - {/* */} + placeholderText={jobMap[formData.job]} + value={jobMap[formData.job]} + name="job" + onChange={handleInputChange} + />
@@ -121,7 +123,7 @@ const EditMyInfo = () => {
{
{ console.log('저장할 데이터:', savedData); try { const response = await instance.post('/api/job-posts', savedData); - window.location.reload(); + //window.location.reload(); console.log('서버 응답:', response.data); } catch (error) { console.error('에러 발생:', error); diff --git a/src/pages/Setting.jsx b/src/pages/Setting.jsx index 7910e27..e34a271 100644 --- a/src/pages/Setting.jsx +++ b/src/pages/Setting.jsx @@ -12,14 +12,38 @@ const Setting = () => { currentPassword: "", newPassword: "", }); - // const [formData, setFormData] = useState({ - // educationBackground: "", - // skill: "", - // activityHistory: "", - // award: "", - // languageScore: "", - // }); + const [formData, setFormData] = useState({ + field: "", + }); + + // 서버로부터 데이터 GET + useEffect(() => { + const fetchData = async () => { + try { + const response = await instance.get('/api/member/info'); + if (response.data && response.data.status === 'success') { + console.log(response.data.data); + // 받아온 데이터를 formData에 저장 + setFormData({ + field: response.data.data.field || "", + belong: response.data.data.belong || "", + job: response.data.data.job || "", + educationBackground: response.data.data.educationBackground || "", + skill: response.data.data.skill || "", + activityHistory: response.data.data.activityHistory || "", + award: response.data.data.award || "", + languageScore: response.data.data.languageScore || "", + career: response.data.data.career || "", + aboutMe: response.data.data.aboutMe || "" + }); + } + } catch (error) { + console.error('Error fetching apply data:', error); + } + }; + fetchData(); + }, []); // 입력값을 업데이트하는 함수 const handleInputChange = (e) => { @@ -28,10 +52,10 @@ const Setting = () => { ...passwordFormData, [name]: value }); - // setFormData({ - // ...formData, - // [name]: value, - // }); + setFormData({ + ...formData, + [name]: value, + }); }; // 저장 버튼 클릭 시 서버로 POST 요청 @@ -44,13 +68,35 @@ const Setting = () => { if (response.data.status === 'success') { console.log('비밀번호 변경 성공!'); alert('비밀번호가 변경되었습니다'); - nav("/user/mypage"); // 저장 후 마이페이지로 이동 } } catch (error) { console.error('비밀번호 변경 실패:', error); } }; + // 저장 버튼 클릭 시 서버로 POST 요청 + const handleSave = async () => { + try { + const payload = { + ...formData, + }; + const response = await instance.post('/api/member/additional-info', payload); + if (response.data.status === 'success') { + sessionStorage.setItem('field', formData.field) + alert('분야 정보가 변경되었습니다'); + } + } catch (error) { + console.error('Error saving info data:', error); + } + }; + + // 비밀번호와 분야 정보를 모두 저장하는 함수 + const handleSaveAll = async () => { + await handlePasswordSave(); // 비밀번호 저장 + await handleSave(); // 분야 정보 저장 + nav("/user/mypage"); // 저장 후 마이페이지로 이동 + }; + return (
@@ -72,6 +118,7 @@ const Setting = () => {
{
{
분야
- +
@@ -102,9 +156,7 @@ const Setting = () => {