diff --git a/src/views/board/BoardList.vue b/src/views/board/BoardList.vue index 875693d..cdf86af 100644 --- a/src/views/board/BoardList.vue +++ b/src/views/board/BoardList.vue @@ -182,66 +182,72 @@ const handleSizeChange = () => { // 일반 게시물 데이터 로드 const fetchGeneralPosts = async (page = 1) => { - const { data } = await axios.get("board/general", { - params: { - page, - size: selectedSize.value, - orderBy: selectedOrder.value, - searchKeyword: searchText.value + try { + const { data } = await axios.get("board/general", { + params: { + page, + size: selectedSize.value, + orderBy: selectedOrder.value, + searchKeyword: searchText.value + } + }); + + if (data?.data) { + const totalPosts = data.data.total; + generalList.value = data.data.list.map((post, index) => ({ + realId: post.id, + id: totalPosts - ((page - 1) * selectedSize.value) - index, + title: post.title, + author: post.author || '익명', + rawDate: post.date, + date: formatDate(post.date), // 날짜 변환 적용 + views: post.cnt || 0, + hasAttachment: post.hasAttachment, + img: post.firstImageUrl || null, + commentCount : post.commentCount + })); + + pagination.value = { + ...pagination.value, + currentPage: data.data.pageNum, + pages: data.data.pages, + prePage: data.data.prePage, + nextPage: data.data.nextPage, + isFirstPage: data.data.isFirstPage, + isLastPage: data.data.isLastPage, + hasPreviousPage: data.data.hasPreviousPage, + hasNextPage: data.data.hasNextPage, + navigatePages: data.data.navigatePages, + navigatepageNums: data.data.navigatepageNums, + navigateFirstPage: data.data.navigateFirstPage, + navigateLastPage: data.data.navigateLastPage + }; } - }); - - if (data?.data) { - const totalPosts = data.data.total; - generalList.value = data.data.list.map((post, index) => ({ - realId: post.id, - id: totalPosts - ((page - 1) * selectedSize.value) - index, - title: post.title, - author: post.author || '익명', - rawDate: post.date, - date: formatDate(post.date), // 날짜 변환 적용 - views: post.cnt || 0, - hasAttachment: post.hasAttachment, - img: post.firstImageUrl || null, - commentCount : post.commentCount - })); - - pagination.value = { - ...pagination.value, - currentPage: data.data.pageNum, - pages: data.data.pages, - prePage: data.data.prePage, - nextPage: data.data.nextPage, - isFirstPage: data.data.isFirstPage, - isLastPage: data.data.isLastPage, - hasPreviousPage: data.data.hasPreviousPage, - hasNextPage: data.data.hasNextPage, - navigatePages: data.data.navigatePages, - navigatepageNums: data.data.navigatepageNums, - navigateFirstPage: data.data.navigateFirstPage, - navigateLastPage: data.data.navigateLastPage - }; + } catch (error) { } }; // 공지사항 데이터 로드 const fetchNoticePosts = async () => { - const { data } = await axios.get("board/notices", { - params: { searchKeyword: searchText.value } - }); + try { + const { data } = await axios.get("board/notices", { + params: { searchKeyword: searchText.value } + }); - if (data?.data) { - noticeList.value = data.data.map(post => ({ - id: post.id, - title: post.title, - author: post.author || '관리자', - date: formatDate(post.date), - rawDate: post.date, - views: post.cnt || 0, - hasAttachment: post.hasAttachment, - img: post.firstImageUrl || null, - commentCount : post.commentCount - })); + if (data?.data) { + noticeList.value = data.data.map(post => ({ + id: post.id, + title: post.title, + author: post.author || '관리자', + date: formatDate(post.date), + rawDate: post.date, + views: post.cnt || 0, + hasAttachment: post.hasAttachment, + img: post.firstImageUrl || null, + commentCount : post.commentCount + })); + } + } catch (error) { } }; diff --git a/src/views/vacation/VacationManagement.vue b/src/views/vacation/VacationManagement.vue index 4bdeef9..7cde896 100644 --- a/src/views/vacation/VacationManagement.vue +++ b/src/views/vacation/VacationManagement.vue @@ -264,21 +264,24 @@ async function loadCalendarData(year, month) { /* 프로필 구역 */ // 프로필 클릭 시 모달 열기 const handleProfileClick = async (user) => { - if (isModalOpen.value && user.MEMBERSEQ === userStore.user.id) { - return; - } - if (isGrantModalOpen.value && selectedUser.value?.MEMBERSEQ === user.MEMBERSEQ) { - return; - } - isModalOpen.value = false; - isGrantModalOpen.value = false; - if (user.MEMBERSEQ === userStore.user.id) { - const displayedYear = lastRemainingYear.value; - await fetchVacationHistory(displayedYear); - isModalOpen.value = true; - } else { - selectedUser.value = user; - isGrantModalOpen.value = true; + try { + if (isModalOpen.value && user.MEMBERSEQ === userStore.user.id) { + return; + } + if (isGrantModalOpen.value && selectedUser.value?.MEMBERSEQ === user.MEMBERSEQ) { + return; + } + isModalOpen.value = false; + isGrantModalOpen.value = false; + if (user.MEMBERSEQ === userStore.user.id) { + const displayedYear = lastRemainingYear.value; + await fetchVacationHistory(displayedYear); + isModalOpen.value = true; + } else { + selectedUser.value = user; + isGrantModalOpen.value = true; + } + } catch (error) { } }; // 프로필 사원 리스트 @@ -300,17 +303,19 @@ const fetchUserList = async () => { }); } catch (error) { - console.error("📌 사용자 목록 불러오기 오류:", error); } }; // 사원별 남은 연차 개수 const fetchRemainingVacation = async () => { - const response = await axios.get("vacation/remaining"); - if (response.status === 200) { - remainingVacationData.value = response.data.data.reduce((acc, vacation) => { - acc[vacation.employeeId] = vacation.remainingQuota; - return acc; - }, {}); + try { + const response = await axios.get("vacation/remaining"); + if (response.status === 200) { + remainingVacationData.value = response.data.data.reduce((acc, vacation) => { + acc[vacation.employeeId] = vacation.remainingQuota; + return acc; + }, {}); + } + } catch (error) { } }; // 로그인한 사원이 사용한 휴가 필터링 @@ -403,42 +408,46 @@ async function saveVacationChanges() { /* 휴가 조회 */ // 로그인 사용자의 연차 사용 내역 async function fetchVacationHistory(year) { - const response = await axios.get(`vacation/history?year=${year}`); - if (response.status === 200 && response.data) { - myVacations.value = response.data.data.usedVacations || []; - receivedVacations.value = response.data.data.receivedVacations || [] + try { + const response = await axios.get(`vacation/history?year=${year}`); + if (response.status === 200 && response.data) { + myVacations.value = response.data.data.usedVacations || []; + receivedVacations.value = response.data.data.receivedVacations || [] + } + } catch (error) { } } // 모든 사원 연차 내역 및 그래프화 async function fetchVacationData(year, month) { - - const response = await axios.get(`vacation/list/${year}/${month}`); - if (response.status === 200) { - const vacationList = response.data; - // 회원 정보가 없거나 색상 정보가 없는 데이터는 제외 - const filteredVacations = vacationList.filter(vac => - userColors.value[vac.MEMBERSEQ] && userColors.value[vac.MEMBERSEQ] && !vac.LOCVACRMM - ); - const events = filteredVacations.map(vac => { - let dateStr = vac.LOCVACUDT ? vac.LOCVACUDT.split("T")[0] : ""; - let backgroundColor = userColors.value[vac.MEMBERSEQ]; - return { - title: getVacationType(vac.LOCVACTYP), - start: dateStr, - backgroundColor, - classNames: [getVacationTypeClass(vac.LOCVACTYP)], - saved: true, - memberSeq: vac.MEMBERSEQ, - }; - }).filter(event => event.start); - return events; - } else { - console.warn("📌 휴가 데이터를 불러오지 못함"); + try { + const response = await axios.get(`vacation/list/${year}/${month}`); + if (response.status === 200) { + const vacationList = response.data; + // 회원 정보가 없거나 색상 정보가 없는 데이터는 제외 + const filteredVacations = vacationList.filter(vac => + userColors.value[vac.MEMBERSEQ] && userColors.value[vac.MEMBERSEQ] && !vac.LOCVACRMM + ); + const events = filteredVacations.map(vac => { + let dateStr = vac.LOCVACUDT ? vac.LOCVACUDT.split("T")[0] : ""; + let backgroundColor = userColors.value[vac.MEMBERSEQ]; + return { + title: getVacationType(vac.LOCVACTYP), + start: dateStr, + backgroundColor, + classNames: [getVacationTypeClass(vac.LOCVACTYP)], + saved: true, + memberSeq: vac.MEMBERSEQ, + }; + }).filter(event => event.start); + return events; + } else { + console.warn("📌 휴가 데이터를 불러오지 못함"); + return []; + } + } catch (error) { return []; } - return []; } - // 캘린더 이벤트 업데이트 function updateCalendarEvents() { const selectedEvents = Array.from(selectedDates.value) @@ -499,14 +508,17 @@ const getVacationTypeClass = (type) => { }; // 휴가종류 const fetchVacationCodes = async () => { - const response = await axios.get("vacation/codes"); - if (response.status === 200 && response.data) { - vacationCodeMap.value = response.data.data.reduce((acc, item) => { - acc[item.code] = item.name; - return acc; - }, {}); - } else { - console.warn("❌ 공통 코드 데이터를 불러오지 못했습니다."); + try { + const response = await axios.get("vacation/codes"); + if (response.status === 200 && response.data) { + vacationCodeMap.value = response.data.data.reduce((acc, item) => { + acc[item.code] = item.name; + return acc; + }, {}); + } else { + console.warn("❌ 공통 코드 데이터를 불러오지 못했습니다."); + } + } catch (error) { } }; const getVacationType = (typeCode) => { @@ -548,7 +560,7 @@ watch(() => lastRemainingYear.value, async (newYear, oldYear) => { await fetchVacationHistory(newYear); } }); -// 새로운 휴가 추가 시 반차 버튼 초기화 +// 새로운 휴가추가 시 반차 버튼 초기화 watch( () => Array.from(selectedDates.value.keys()), // 선택된 날짜 리스트 감시 (newKeys) => {