공휴일js 공통으로뻄

This commit is contained in:
dyhj625 2025-02-21 10:46:46 +09:00
parent 3779e63142
commit 909be29d74
2 changed files with 46 additions and 49 deletions

View File

@ -0,0 +1,18 @@
// src/api/holiday.js
import axios from "@api";
export 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 [];
}
}

View File

@ -60,6 +60,7 @@ import { useUserStore } from "@s/userList";
import VacationModal from "@c/modal/VacationModal.vue"
import { useUserInfoStore } from "@s/useUserInfoStore";
import VacationGrantModal from "@c/modal/VacationGrantModal.vue";
import { fetchHolidays } from "@c/calendar/holiday.js";
const userStore = useUserInfoStore();
const userListStore = useUserStore();
@ -73,6 +74,32 @@ const remainingVacationData = ref({});
const isGrantModalOpen = ref(false);
const selectedUser = ref(null);
// FullCalendar
const fullCalendarRef = ref(null);
const calendarEvents = ref([]); // FullCalendar (API + )
const selectedDates = ref(new Map()); //
const halfDayType = ref(null);
const vacationCodeMap = ref({}); //
// (YYYY-MM-DD ) ( )
const holidayDates = ref(new Set());
const fetchedEvents = ref([]); // API (, )
// FullCalendar (events calendarEvents )
const calendarOptions = reactive({
plugins: [dayGridPlugin, interactionPlugin],
initialView: "dayGridMonth",
headerToolbar: {
left: "today",
center: "title",
right: "prev,next",
},
locale: "ko",
selectable: false,
dateClick: handleDateClick,
datesSet: handleMonthChange,
events: calendarEvents,
});
onMounted(async () => {
await userStore.userInfo();
@ -138,33 +165,6 @@ const fetchUserList = async () => {
}
};
// FullCalendar
const fullCalendarRef = ref(null);
const calendarEvents = ref([]); // FullCalendar (API + )
const fetchedEvents = ref([]); // API (, )
const selectedDates = ref(new Map()); //
const halfDayType = ref(null);
const vacationCodeMap = ref({}); //
// (YYYY-MM-DD ) ( )
const holidayDates = ref(new Set());
// FullCalendar (events calendarEvents )
const calendarOptions = reactive({
plugins: [dayGridPlugin, interactionPlugin],
initialView: "dayGridMonth",
headerToolbar: {
left: "today",
center: "title",
right: "prev,next",
},
locale: "ko",
selectable: false,
dateClick: handleDateClick,
datesSet: handleMonthChange,
events: calendarEvents,
});
const fetchVacationCodes = async () => {
try {
const response = await axios.get("vacation/codes");
@ -363,29 +363,10 @@ halfDayType.value = halfDayType.value === type ? null : type;
}
}
/**
* 공휴일 데이터 요청 이벤트 변환
*/
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) {
function handleMonthChange(viewInfo) {
const currentDate = viewInfo.view.currentStart;
const year = currentDate.getFullYear();
const month = String(currentDate.getMonth() + 1).padStart(2, "0");
@ -421,7 +402,5 @@ await loadCalendarData(year, month);
</script>
<style>
.fc-bg-event{
}
</style>