-
-
+
-
+/**
+ * 공휴일 데이터 요청 및 이벤트 변환
+ */
+async function fetchHolidays(year, month) {
+try {
+ const response = await axios.get(`vacation/${year}/${month}`);
+ const holidayEvents = response.data.map((holiday) => ({
+ title: holiday.name,
+ start: holiday.date, // "YYYY-MM-DD" 형식
+ backgroundColor: "#ff6666",
+ classNames: ["holiday-event"],
+ }));
+ return holidayEvents;
+} catch (error) {
+ console.error("공휴일 정보를 불러오지 못했습니다.", error);
+ return [];
+}
+}
+
+/**
+ * 달력 월 변경 시 호출 (FullCalendar의 datesSet 옵션)
+ */
+function handleMonthChange(viewInfo) {
+const currentDate = viewInfo.view.currentStart;
+const year = currentDate.getFullYear();
+const month = String(currentDate.getMonth() + 1).padStart(2, "0");
+loadCalendarData(year, month);
+}
+
+/**
+ * 지정한 월의 데이터를 로드 (휴가, 공휴일 데이터를 병렬 요청)
+ */
+async function loadCalendarData(year, month) {
+fetchedEvents.value = [];
+const [vacationEvents, holidayEvents] = await Promise.all([
+ fetchVacationData(year, month),
+ fetchHolidays(year, month),
+]);
+// 클릭 불가 처리를 위해 공휴일 날짜 Set 업데이트
+holidayDates.value = new Set(holidayEvents.map((event) => event.start));
+fetchedEvents.value = [...vacationEvents, ...holidayEvents];
+updateCalendarEvents();
+await nextTick();
+fullCalendarRef.value.getApi().refetchEvents();
+}
+
+// 컴포넌트 마운트 시 현재 달의 데이터 로드
+onMounted(async () => {
+await fetchUserList(); // 사용자 목록 먼저 불러오기
+const today = new Date();
+const year = today.getFullYear();
+const month = String(today.getMonth() + 1).padStart(2, "0");
+await loadCalendarData(year, month);
+});
+